オープンソースの列指向データ形式である Lance に基づいて構築された LanceDB には、AI/ML にとって魅力的ないくつかの興味深い機能があります。たとえば、LanceDB は、さまざまなデータ型を処理する機能を備えた明示的および暗黙的なベクトル化をサポートしています。 LanceDB は、次のような主要な ML フレームワークと統合されています。
LanceDB は、S3 互換のオブジェクト ストレージ内のデータをクエリできます。この組み合わせは、高性能でスケーラブルなクラウドネイティブの ML データ ストレージおよび取得システムを構築するのに最適です。 MinIO は、さまざまなハードウェア、場所、クラウド環境にパフォーマンスと比類のない柔軟性をもたらし、そのような導入には自然な選択となります。
このチュートリアルを完了すると、LanceDB と MinIO を使用してあらゆるデータの課題に挑戦する準備が整います。
の
その1つが
LanceDB のようなベクトル データベースは、その効率的な機能のおかげで、AI および機械学習アプリケーションに明確な利点をもたらします。
自然言語処理 (NLP):
セマンティック検索:キーワードだけでなく意味に基づいて、クエリに類似した文書や文章を検索します。これにより、チャットボットの応答、パーソナライズされたコンテンツの推奨、知識検索システムが強化されます。
質問回答:意味上の類似性に基づいて関連するテキストの一節を見つけて、複雑な質問を理解し、回答します。
トピック モデリング:大規模なテキスト コレクションから潜在的なトピックを発見し、ドキュメントのクラスタリングや傾向分析に役立ちます。
コンピュータビジョン:
画像とビデオの検索:ビジュアル コンテンツに基づいて類似の画像またはビデオを検索します。これは、コンテンツ ベースの画像検索、製品検索、およびビデオ分析に不可欠です。
オブジェクトの検出と分類:類似したトレーニング データを効率的に取得することで、オブジェクトの検出と分類モデルの精度を向上させます。
ビデオの推奨: 以前に視聴したビデオのビジュアル コンテンツに基づいて、類似したビデオを推奨します。
市場にある多数のベクトル データベースの中でも、LanceDB は S3 互換ストレージでのクエリをサポートしているため、AI と機械学習に特に適しています。データはどこにでもあり、データベースもどこにでもあるはずです。
LanceDB で MinIO を使用すると、次のようないくつかの利点があります。
MinIO と LanceDB を組み合わせることで、大規模な ML データセットを管理および分析するための、高性能でスケーラブルなクラウドネイティブ ソリューションが提供されます。
このチュートリアルを進めるには、以下を使用する必要があります
次のコマンドを実行して、Docker Compose がインストールされていることを確認します。
docker compose version
Python もインストールする必要があります。 Python は次からダウンロードできます。
オプションで、仮想環境の作成を選択できます。依存関係を分離するために仮想環境を作成することをお勧めします。これを行うには、ターミナルを開いて次を実行します。
python -m venv venv
仮想環境をアクティブ化するには:
Windows の場合:
.\venv\Scripts\activate
macOS/Linux の場合:
source venv/bin/activate
まずはプロジェクトのクローンを作成します。
docker-compose up minio
これにより、MinIO コンテナが起動します。 「」に移動できます。
ユーザー名とパスワードminioadmin:minioadmin
を使用してログインします。
次に、次のコマンドを実行して、 lance
という名前の MinIO バケットを作成します。
docker compose up mc
このコマンドは一連の処理を実行します。
各コマンドの内訳は次のとおりです。
until (/usr/bin/mc config host add minio http://minio:9000 minioadmin minioadmin) do echo '...waiting...' && sleep 1;完了;: このコマンドは、成功するまで、指定されたパラメーター (エンドポイント、アクセス キー、および秘密キー) を使用してminio
という名前の MinIO ホストの構成を繰り返し試行します。試行のたびに待機メッセージがエコーされ、1 秒間停止します。
/usr/bin/mc rm -r --force minio/lance;:このコマンドは、MinIO のlance
バケット内のすべてのコンテンツを強制的に削除 (削除) します。
/usr/bin/mc mb minio/lance; : このコマンドは、MinIO にlance
という名前の新しいバケットを作成します。
/usr/bin/mc ポリシー セット public minio/lance; : このコマンドは、 lance
バケットのポリシーをパブリックに設定し、パブリック読み取りアクセスを許可します。
0番出口; : このコマンドは、スクリプトがステータス コード 0 で終了し、実行が成功したことを示します。
残念ながら、LanceDB にはネイティブ S3 サポートがないため、作成した MinIO コンテナに接続するには boto3 などを使用する必要があります。 LanceDB が成熟するにつれて、ユーザー エクスペリエンスがさらに向上するネイティブ S3 サポートを楽しみにしています。
以下のサンプル スクリプトを使用して作業を開始します。
pip を使用して必要なパッケージをインストールします。次の内容を含む、requirements.txt という名前のファイルを作成します。
lancedb~=0.4.1 boto3~=1.34.9 botocore~=1.34.9
次に、次のコマンドを実行してパッケージをインストールします。
pip install -r requirements.txt
MinIO コンテナの作成方法が上記の方法と異なる場合は、資格情報を変更する必要があります。
以下のスクリプトをファイル (例: lancedb_script.py
に保存します。
import lancedb import os import boto3 import botocore import random def generate_random_data(num_records): data = [] for _ in range(num_records): record = { "vector": [random.uniform(0, 10), random.uniform(0, 10)], "item": f"item_{random.randint(1, 100)}", "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={'addressing_style': 'path'})) # Connect to LanceDB using path-style URI and s3_client db_uri = f"s3://{minio_bucket_name}/" 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 ベクトル データベースという 2 つの最先端のオープンソース構成要素が武器庫にあります。これが ML/AI への勝ちチケットであると考えてください。
ここで立ち止まらないでください。 LanceDB は幅広いサービスを提供します。
あなたが構築しているものを私たちに見せてください。また、あなたの崇高な探求に関するガイダンスが必要な場合は、遠慮なく [email protected] にメールしていただくか、ラウンド テーブルに参加してください。