paint-brush
LanceDB: データの複雑さとの戦いにおいて信頼できる馬@minio
25,401 測定値
25,401 測定値

LanceDB: データの複雑さとの戦いにおいて信頼できる馬

MinIO8m2024/02/01
Read on Terminal Reader
Read this story w/o Javascript

長すぎる; 読むには

このチュートリアルで提供される基盤を基にして、MinIO と LanceDB を使用して、パフォーマンスが高く、スケーラブルで将来性のある ML/AI アーキテクチャを作成する方法は数多くあります。

People Mentioned

Mention Thumbnail
featured image - LanceDB: データの複雑さとの戦いにおいて信頼できる馬
MinIO HackerNoon profile picture
0-item
1-item

オープンソースの列指向データ形式である Lance に基づいて構築された LanceDB には、AI/ML にとって魅力的ないくつかの興味深い機能があります。たとえば、LanceDB は、さまざまなデータ型を処理する機能を備えた明示的および暗黙的なベクトル化をサポートしています。 LanceDB は、次のような主要な ML フレームワークと統合されています。パイトーチそしてTensorFlow 。さらに優れているのは、近似最近傍アルゴリズムを使用して類似ベクトルを効率的に取得できる LanceDB の高速近傍検索です。これらすべてを組み合わせて、高速で使いやすく軽量なベクトル データベースを作成し、どこにでも展開できます。


LanceDB は、S3 互換のオブジェクト ストレージ内のデータをクエリできます。この組み合わせは、高性能でスケーラブルなクラウドネイティブの ML データ ストレージおよび取得システムを構築するのに最適です。 MinIO は、さまざまなハードウェア、場所、クラウド環境にパフォーマンスと比類のない柔軟性をもたらし、そのような導入には自然な選択となります。


このチュートリアルを完了すると、LanceDB と MinIO を使用してあらゆるデータの課題に挑戦する準備が整います。

ランスとは何ですか?

ランスファイル形式は、ML ワークフローとデータセット用に最適化された列指向データ形式です。バージョン管理、クエリ、トレーニングでの使用が簡単かつ迅速に行えるように設計されており、画像、ビデオ、3D 点群、音声、表形式データなどのさまざまなデータ タイプに適しています。さらに、高パフォーマンスのランダム アクセスをサポートします。Lance レポートのベンチマーククエリでは Parquet よりも 100 倍高速です。 Lance の速度は、Rust での実装と、ゼロコピー バージョニングや最適化されたベクトル操作などの機能を含むクラウドネイティブ設計の結果の一部です。


その1つが主な機能ベクトル検索を実行して、ユーザーが検索できるようにする機能です。最近隣の人1 ミリ秒未満で、OLAP クエリとベクトル検索を組み合わせます。ランス形式のその他の実稼働アプリケーションには、ML アプリケーション用のエッジ展開の低遅延ベクトル データベース、自動運転車会社におけるマルチモーダル データの大規模ストレージ、検索、処理、および電子運転における 10 億規模以上のベクトル パーソナライズ検索などがあります。 -コマース企業。 Lance ファイル形式の魅力の 1 つは、Pandas などの人気のあるツールやプラットフォームとの互換性です。アヒルDB 、極地、および パイアロウ。 LanceDB を使用しない場合でも、データ スタックで Lance ファイル形式を利用できます。

AI と機械学習向けに構築

LanceDB のようなベクトル データベースは、その効率的な機能のおかげで、AI および機械学習アプリケーションに明確な利点をもたらします。分離されたストレージアーキテクチャを計算し、データの高次元ベクトル表現を取得します。主な使用例をいくつか示します。


自然言語処理 (NLP):


セマンティック検索:キーワードだけでなく意味に基づいて、クエリに類似した文書や文章を検索します。これにより、チャットボットの応答、パーソナライズされたコンテンツの推奨、知識検索システムが強化されます。


質問回答:意味上の類似性に基づいて関連するテキストの一節を見つけて、複雑な質問を理解し、回答します。


トピック モデリング:大規模なテキスト コレクションから潜在的なトピックを発見し、ドキュメントのクラスタリングや傾向分析に役立ちます。


コンピュータビジョン:


画像とビデオの検索:ビジュアル コンテンツに基づいて類似の画像またはビデオを検索します。これは、コンテンツ ベースの画像検索、製品検索、およびビデオ分析に不可欠です。


オブジェクトの検出と分類:類似したトレーニング データを効率的に取得することで、オブジェクトの検出と分類モデルの精度を向上させます。


ビデオの推奨: 以前に視聴したビデオのビジュアル コンテンツに基づいて、類似したビデオを推奨します。


市場にある多数のベクトル データベースの中でも、LanceDB は S3 互換ストレージでのクエリをサポートしているため、AI と機械学習に特に適しています。データはどこにでもあり、データベースもどこにでもあるはずです。

成功のための設計

LanceDB で MinIO を使用すると、次のようないくつかの利点があります。


  • スケーラビリティとパフォーマンス: 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 をシステムの PATH に追加するオプションを必ずチェックしてください。


オプションで、仮想環境の作成を選択できます。依存関係を分離するために仮想環境を作成することをお勧めします。これを行うには、ターミナルを開いて次を実行します。


 python -m venv venv


仮想環境をアクティブ化するには:


Windows の場合:

 .\venv\Scripts\activate


macOS/Linux の場合:

 source venv/bin/activate

はじめる

まずはプロジェクトのクローンを作成します。ここ。完了したら、ターミナル ウィンドウでファイルをダウンロードしたフォルダーに移動し、次のコマンドを実行します。


 docker-compose up minio


これにより、MinIO コンテナが起動します。 「」に移動できます。 http://172.20.0.2:9001 ' MinIO コンソールを見てみましょう。


MinIO コンソール


ユーザー名とパスワードminioadmin:minioadminを使用してログインします。


次に、次のコマンドを実行して、 lanceという名前の MinIO バケットを作成します。


 docker compose up mc 


MinIOバケット


このコマンドは一連の処理を実行します。 MinIOクライアント(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 で終了し、実行が成功したことを示します。

ランスDB

残念ながら、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 は幅広いサービスを提供します。レシピ最近発表された Udacity コースなど、このチュートリアルで構築した内容を拡張するためのチュートリアルもあります。 ベクトル データベースを使用した生成 AI ソリューションの構築。特に興味深いのは、 これドキュメントとチャットするためのレシピ。私たちは皆、データを最大限に活用するための障壁を打ち破ることに賛成しています。


あなたが構築しているものを私たちに見せてください。また、あなたの崇高な探求に関するガイダンスが必要な場合は、遠慮なく [email protected] にメールしていただくか、ラウンド テーブルに参加してください。たるみ