LanceDB 是您在對抗資料複雜性時值得信賴的支架

Mondo 健康 更新 2024-01-31

LanceDB 建立在 Lance(一種開源列式資料格式)之上,具有一些有趣的功能,使其對 AI ML 具有吸引力。 例如,LanceDB 支援顯式和隱式向量化,並且能夠處理各種資料型別。 LanceDB 與 PyTorch 和 TensorFlow 等領先的 ML 框架整合。 Cooler 仍然是 LanceDB 的快速鄰居搜尋,它能夠使用近似最近鄰演算法有效地檢索相似的向量。 所有這些結合在一起,建立了乙個快速、易於使用且輕量級的向量資料庫,可以部署在任何地方。

LanceDB 能夠從相容的 S3 物件儲存中查詢資料。 這種組合非常適合構建高效能、可擴充套件和雲原生的 ML 資料儲存和檢索系統。 Minio 為不同的硬體、位置和雲環境帶來了效能和無與倫比的靈活性,使其成為此類部署的自然選擇。

在本教程結束時,您將準備好使用 LanceDB 和 Minio 應對任何資料挑戰。

Lance 檔案格式是一種針對 ML 工作流和資料集優化的列式資料格式。 它旨在快速輕鬆地進行版本控制、查詢和訓練,並適用於各種資料型別,包括影象 d 點雲、音訊和資料。 此外,它還支援高效能隨機存取:Lance 報告基準測試的速度比 Parquet 快 100 倍。 Lance 的速度在一定程度上歸功於 Rust 所取得的成就,以及它的雲原生設計,其中包括零拷貝版本控制和優化的向量操作等功能。

它的主要功能之一是能夠執行向量搜尋,允許使用者在不到 1 毫秒的時間內找到最近的鄰域,並將 olap 查詢與向量搜尋相結合。 Lance 格式的其他生產應用包括用於 ML 應用的邊緣部署低延遲向量資料庫,自動駕駛汽車公司中多模態資料的大規模儲存、檢索和處理,以及電子商務公司中的億+向量個性化搜尋。 Lance 檔案格式的部分吸引力在於它與流行的工具和平台相容,例如 pandas、duckdb、polars 和 pyarrow。 即使您不使用 LanceDB,您仍然可以在資料堆疊中使用 Lance 檔案格式。

像 LanceDB 這樣的向量資料庫為人工智慧和機器學習應用提供了明顯的優勢,這要歸功於它們高效的解耦儲存和計算架構以及對資料的高維向量表示的檢索。 以下是一些關鍵用例:

自然語言處理(NLP):

語義搜尋:根據含義(而不僅僅是關鍵字)查詢類似於查詢的文件或段落。 這為聊天機械人響應、個性化內容推薦和知識檢索系統提供支援。

Q&A:通過根據語義相似性查詢相關文字段落來理解和回答複雜的問題。

主題建模:發現大型文字集合中的潛在主題,這對於文件聚類和趨勢分析非常有用。

計算機視覺:目標檢測和分類:通過高效檢索相似的訓練資料,提高目標檢測和分類模型的準確性。

*推薦:與之前的視覺內容推薦類似**。

將 Minio 與 LanceDB 結合使用有幾個好處,包括:

可擴充套件性和效能:Minio 的雲原生設計專為擴充套件和高效能儲存和檢索而構建。 通過利用 Minio 的可擴充套件性和效能,LanceDB 可以高效處理大量資料,使其成為現代 ML 工作負載的理想選擇。

高可用和容錯:minio具有高可用、不變、高持久等特點。 這確保了儲存在 Minio 中的資料免受硬體故障的影響,並提供高可用性和容錯能力,這對於像 LanceDB 這樣的資料密集型應用程式至關重要。

主動-主動複製:多站點、主動-主動複製支援跨多個 minio 部署近乎同步地複製資料。 這種強大的過程確保了高耐用性和冗餘性,使其成為在關鍵任務生產環境中遮蔽資料的理想選擇。

Minio 和 LanceDB 的結合為管理和分析大規模 ML 資料集提供了高效能、可擴充套件的雲原生解決方案。

要學習本教程,您需要使用 docker compose。 您可以單獨安裝 Docker Engine 和 Docker Compose 二進位檔案,也可以一起使用 Docker Desktop。 最簡單的選擇是安裝 Docker Desktop。

通過執行以下命令確保安裝了 docker compose

docker compose version

您還需要安裝 python。 你可以從這裡下載python。 在安裝過程中,請確保選中將 python 新增到系統路徑的選項。

或者,您可以選擇建立虛擬環境。 最好建立乙個虛擬環境來隔離依賴關係。 為此,請開啟終端並執行:

python -m venv venv

要啟用虛擬環境,請執行以下操作:

在 Windows 上:

.\venv\scripts\activate

在 macOS Linux 上: 在 macOS Linux 上:

source venv/bin/activate

首先從這裡轉殖專案。 完成後,導航到“終端”視窗中的“檔案”資料夾,然後執行:

docker-compose up minio

這將啟動 minio 容器。 您可以導航到 minio 控制台。

使用使用者名稱和密碼 minioadmin:minioadmin 登入。

接下來,執行以下命令,建立名為 Lance 的 minio 儲存桶。

docker compose up mc

此命令在 shell 中執行一系列 minio 客戶端 (MC) 命令。

以下是每個命令的細分:

until (/usr/bin/mc config host add minio http://minio:9000 minioadmin minioadmin) do echo '...waiting...' &&sleep 1; done;:此命令反覆嘗試配置使用指定引數(端點、訪問金鑰和金鑰)命名 minio 的 minio 主機,直到成功。 在每次嘗試期間,它都會回顯等待訊息並暫停 1 秒鐘。

usr/bin/mc rm -r --force minio/lance;此命令強制移除(刪除)Minio Lance 中儲存桶的所有內容。

usr/bin/mc mb minio/lance;此命令在 Minio 中建立乙個名為 Lance 的新儲存桶。

usr/bin/mc policy set public minio/lance;此命令將 Lance 儲存桶的策略設定為 public,從而允許 public 讀取訪問。

exit 0;此命令確保指令碼退出狀態為 0,指示執行成功。

不幸的是,LanceDB 沒有原生 S3 支援,因此您必須使用 boto3 之類的東西來連線到您製作的 minio 容器。 隨著 LanceDB 的成熟,我們期待原生 S3 支援,這將使使用者體驗更加美好。

以下示例指令碼將幫助您入門。

使用 pip 安裝所需的軟體包。 使用以下命令建立名為 requirements 的檔案txt的

lancedb~=0.4.1

boto3~=1.34.9

botocore~=1.34.9

然後執行以下命令以安裝包:

pip install -r requirements.txt

如果建立的 minio 容器與上述容器不同,則需要更改憑據。

將以下指令碼儲存到檔案中,例如 lancedb scriptpy .

import lancedb

import os

import boto3

import botocore

import random

def generate_random_data(num_records):

data =

for _ in range(num_records):

record = ","price": round(random.uniform(5, 100), 2)

data.append(record)

return data

def main():

# set credentials and region as environment variables

os.environ["aws_access_key_id"] = "minioadmin"

os.environ["aws_secret_access_key"] = "minioadmin"

os.environ["aws_endpoint"] = "http://localhost:9000"

os.environ["aws_default_region"] = "us-east-1"

minio_bucket_name = "lance"

# create a boto3 session with path-style access

session = boto3.session()

s3_client = session.client("s3", config=botocore.config.config(s3=))

# connect to lancedb using path-style uri and s3_client

db_uri = f"s3:///"

db = lancedb.connect(db_uri)

# create a table with more interesting data

table = db.create_table("mytable", data=generate_random_data(100))

# open the table and perform a search

result = table.search([5, 5]).limit(5).to_pandas()

print(result)

if __name__ == "__main__":

main()

此指令碼將從隨機生成的資料建立乙個 lance 表,並將其新增到您的 minio 儲存桶中。 同樣,如果您未使用上一節中的方法建立儲存桶,則需要在執行指令碼之前執行此操作。 請記住更改上面的示例指令碼以匹配 minio 儲存桶的名稱。

最後,指令碼開啟表而不將其移出 minio,並使用 pandas 搜尋和列印結果。

指令碼的結果應類似於下面的結果。 請記住,資料本身每次都是隨機生成的。

vector item price _distance

0 [5.1022754, 5.1069164] item_95 50.94 0.021891

1 [4.209107, 5.2760105] item_100 69.34 0.701694

2 [5.23562, 4.102992] item_96 99.86 0.860140

3 [5.7922664, 5.867489] item_47 56.25 1.380223

4 [4.458882, 3.934825] item_93 9.90 1.427407

在本教程中,有多種方法可以在此基礎上進行構建,以建立高效能、可擴充套件且面向未來的 ML AI 架構。 您的庫中有兩個尖端的開源構建塊 - Minio 物件儲存和 LanceDB 向量資料庫 - 將其視為 ML AI 錦標賽的獲勝門票。

不要止步於此。 LanceDB 提供了廣泛的方法和教程來擴充套件您在本教程中構建的內容,包括最近宣布的關於使用向量資料庫構建生成式 AI 解決方案的 Udacity 課程。 特別令人感興趣的是與您的文件聊天的秘訣。 我們都致力於打破障礙,充分利用您的資料。

相關問題答案

    這場衝突的複雜性

    近日,軍事形勢打得風火石,緬北聯軍以出人意料的速度攻占了關鍵據點,如颶風席捲而來,改寫了衝突的走向。在果敢盟軍 若開軍和德昂民族解放軍的共同努力下,駐紮在撣邦北部公丘鄉的第團於月日投降。這個訊息使緬甸 軍隊雪上加霜,而據點的喪失使整個戰爭局勢岌岌可危。緬甸北部聯軍的突然崛起引發了人們對這場衝突複雜性...

    緬甸局勢的複雜性和挑戰

    緬甸作為東南亞國家,長期以來一直是國際關注的焦點。最近,緬甸局勢再次成為熱門話題,主要是由於該國持續的衝突和不穩定。雖然緬甸 已宣布停火並得到國際社會的積極回應,但昂惠地區的行動使局勢進一步複雜化。緬甸衝突具有深遠的歷史背景,涉及種族 宗教 政治等問題。特別是在昂萊地區,由於其地理位置,它已成為各方...

    中國天庭制度的複雜性及其影響

    中國天庭制度是中國古代神話傳說的重要組成部分,包含諸神 神 仙等諸多元素,構成了乙個龐大而複雜的神話體系。這一制度不僅在中國文化中占有重要地位,而且對世界神話文化產生了深遠的影響。本文將探討中國天庭制度的複雜性及其對後世的影響。.中國天庭制度的組成。中國天庭系統主要由玉皇大帝 太上老君 佛陀等諸神組...

    孝道的複雜性 胡宗南與父親的矛盾與親情!

    中國自古以來就倡導尊老 愛幼 孝敬父母的傳統禮儀,素有禮儀之國之稱。這種價值觀不僅是對民族文化的肯定,也對每個人提出了更高的要求。然而,在 時期,有乙個人成為了例外,他就是國民黨高階將領胡宗南。胡宗南的父親胡吉慶曾去軍營探望兒子,卻被軍營門口的哨兵攔住。胡繼慶曾經是乙個威風凜凜的人物,但這次他依靠兒...

    尿路結石是需要注意的複雜尿路病因之一

    尿路結石是一種常見的泌尿系統疾病,其形成與多種因素有關,包括年齡 性別 飲食習 環境因素等。尿路結石的主要症狀包括疼痛 血尿 尿頻 尿急等,嚴重者甚至可能導致腎功能衰竭。本文將詳細介紹尿路結石的病因 診斷方法和方法。.尿路結石的成因。尿路結石的形成與多種因素有關,其中最重要的是尿液中鈣 草酸等物質濃...