Milvus Vector Databaseとは何ですか?
Milvusは、2019年に作成され、主な目標は、深層ニューラルネットワークやその他の機械学習(ML)モデルによって生成された大規模な埋め込みベクトルの格納、索引化、および管理です。
Milvusは、入力ベクトルクエリを処理するために特別に設計されたデータベースであり、数百億のスケールでベクトルを索引化することができます。これまでの関係データベースが主に事前に定義されたパターンと構造化されたデータを扱うのに対し、Milvusは非構造化データから導出された埋め込みベクトルを扱うように設計されています。
インターネットの拡大に伴い、メール、論文、IoTセンサーデータ、Facebookの写真、タンパク質構造など、非構造化データがますます一般的になっています。コンピュータが非構造化データを理解し処理するためには、これらのデータを埋め込み技術を使用してベクトルに変換する必要があります。Milvusはこれらのベクトルを格納し索引化します。Milvusは、2つのベクトル間の類似距離を分析し、その類似距離を計算することで、それらの相関を推測することができます。2つの埋め込みベクトルが非常に類似しているということは、元のデータソースも似ていることを示します。
Milvusワークフロー:
キーコンセプト
ベクトルデータベースや類似検索の世界に詳しくない場合、次のキーコンセプトが役立つかもしれません。
Milvus用語についてもっと詳しく学ぶ。
非構造化データ
非構造化データは、画像、動画、音声、自然言語などの情報であり、事前に定義されたモデルや組織化された構造に従わないものを指します。このデータタイプは、世界のデータの約80%を占めており、さまざまな人工知能(AI)および機械学習(ML)モデルを使用してベクトルに変換することができます。
埋め込みベクトル
埋め込みベクトルは非構造化データ(電子メール、IoTセンサーデータ、Instagramの写真、タンパク質構造など)の特徴抽象化です。数学的な観点から、埋め込みベクトルには浮動小数点数やバイナリ配列が含まれます。現代の埋め込み技術は非構造化データを埋め込みベクトルに変換するために使用されています。
ベクトル類似検索
ベクトル類似検索は、クエリベクトルとデータベース内のベクトルを比較し、クエリベクトルに最も類似したベクトルを見つけることを意味します。近似最近傍探索(ANN)アルゴリズムを使用することで、検索プロセスを加速することができます。2つの埋め込みベクトルが非常に似ている場合、元のデータソースも類似していることを示します。
Milvusを選択する理由
- 大規模データセットにおけるベクトル検索の高いパフォーマンス。
- マルチ言語およびツールチェーンのサポートを備えた開発者中心のコミュニティサポート。
- クラウドでのスケーラビリティと高い信頼性を実現し、障害が発生しても安定性を維持する。
- スカラーのフィルタリングとベクトル類似検索を組み合わせることで、混合検索が可能。
サポートされているインデックスと類似性の基準は何ですか?
インデックスはデータの組織単位です。挿入されたエンティティを検索またはクエリする前に、インデックスタイプと類似性の基準を宣言する必要があります。インデックスタイプを指定しない場合、Milvusは総当たり検索をデフォルトで使用します。
インデックスタイプ
Milvusは、近似最近傍探索(ANNS)用のほとんどのベクトルインデックスタイプをサポートしており、以下が含まれます:
- FLAT: 小規模(数百万)のデータセットで完全に正確で正確な検索結果を求めるシナリオに適しています。
- IVF_FLAT: 量子化インデックスに基づく、精度とクエリ速度の理想的なバランスを求めるシナリオに適しています。GPU版のGPU_IVF_FLATもあります。
- IVF_SQ8: 量子化インデックスに基づく、非常に限られたリソースのためにディスク、CPU、およびGPUメモリ消費を大幅に削減するシナリオに適しています。
- IVF_PQ: 量子化インデックスに基づく、精度を犠牲にして高速なクエリ速度を追求するシナリオに適しています。GPU版のGPU_IVF_PQもあります。
- HNSW: グラフインデックスに基づく、検索効率に非常に高い要求があるシナリオに適しています。
より詳細な情報については、「ベクトルインデックス」を参照してください。
類似性基準
Milvusでは、類似性基準がベクトル間の類似性を測定するために使用されます。適切な距離尺度を選択することで、分類やクラスタリングのパフォーマンスを大幅に改善することができます。特定の入力データの形式に応じて、最適なパフォーマンスを達成するために特定の類似性基準が選択されます。
浮動小数点埋め込みベクトルに使用される一般的なメトリクスは以下です:
- ユークリッド距離(L2): このメトリクスはコンピュータビジョンの分野で一般的に使用されています。
- 内積(IP): このメトリクスは自然言語処理の分野で一般的に使用されています。
バイナリ埋め込みベクトルに使用される一般的なメトリクスは以下です:
- ハミング距離: このメトリクスは自然言語処理の分野で一般的に使用されています。
- ジャッカード類似度: このメトリクスは分子類似性検索に一般的に使用されています。
Sample Applications
Milvusを使用すると、類似検索機能をアプリケーションに簡単に追加できます。Milvusのサンプルアプリケーションには次のものがあります:
- 画像の類似検索: 画像を検索可能にし、大規模なデータベースからほぼ即座に最も類似した画像を返します。
- 動画の類似検索: キーフレームをベクトルに変換し、その結果をMilvusに入力することで、数十億の動画をリアルタイムで検索および推薦できます。
- 音声の類似検索: 音声、音楽、効果音などの大量の音声データを迅速にクエリできます。
- 推薦システム: ユーザーの行動とニーズに基づいて情報や製品を推薦します。
- 質問応答システム: ユーザーの質問に自動的に回答できるインタラクティブなデジタル質問応答チャットボットです。
- DNA配列の分類: 類似したDNA配列を比較することで、遺伝子をミリ秒単位で正確に分類できます。
- テキスト検索エンジン: キーワードをテキストデータベースと比較することで、ユーザーが探している情報を見つけるのに役立ちます。
Milvusの設計コンセプト
Milvusはクラウドベースのベクトルデータベースであり、その設計においてストレージと計算を分離しています。すべてのMilvusのコンポーネントはステートレス性を持たせることで、柔軟性と拡張性を高めています。
このシステムは以下の4つのレイヤーに分かれています:
- アクセスレイヤー: システムのフロントエンドレイヤーおよびユーザーのエンドポイントとして機能する複数のステートレスプロキシから構成されています。
- 協調サービス: このサービスはタスクをワーカーノードに割り当て、システムの中枢として機能します。
- ワーカーノード: これらのノードは協調サービスからの指示に従い、ユーザーによってトリガーされたDML/DDLコマンドを無意識に実行します。
- ストレージ: これはデータの永続性に責任を持つシステムの骨格部分です。メタデータの格納、ログエージェント、およびオブジェクトの格納を含みます。
.
開発者ツール
Milvusは開発および運用のための豊富なAPIおよびツールを提供しています。
APIアクセス
MilvusはMilvus APIをラップしたクライアントライブラリを提供しており、これを使用してアプリケーションコードからデータの挿入、削除、およびクエリをプログラムで行うことができます:
- PyMilvus
- Node.js SDK
- Go SDK
- Java SDK
Milvusエコシステムツール
Milvusエコシステムには、次のような便利なツールがあります:
- Milvus CLI
- Attu: Milvusのためのグラフィカルな管理システム。
- MilvusDM (Milvusデータ移行): Milvusとのデータのインポートおよびエクスポートを行うためのオープンソースツール。
- Milvus容量計画ツール: さまざまなインデックスタイプを通じて必要な生ファイルサイズ、メモリサイズ、および安定したディスクサイズを見積もるのを支援します。
Milvusの制限事項
MilvusはAIアプリケーションとベクトル類似検索を推進するための最高のベクトルデータベースを提供することに取り組んでいます。ただし、チームはユーザーエクスペリエンスを向上させるためのより多くの機能や最適なツールを常に導入するために取り組んでいます。このページには、Milvusを使用する際にユーザーが遭遇するかもしれない既知の制限事項がいくつかリストされています。
リソース名の長さ
リソース | 制限 |
---|---|
コレクション | 255文字 |
フィールド | 255文字 |
インデックス | 255文字 |
パーティション | 255文字 |
命名規則
リソース名には、数字、文字、およびアンダースコア(_)を含めることができます。名前は文字またはアンダースコアで始まる必要があります。
リソースの数
リソース | 制限 |
---|---|
コレクション | 65,536 |
接続/エージェント | 65,536 |
コレクション内のリソースの数
リソース | 制限 |
---|---|
パーティション | 4,096 |
シャード | 64 |
フィールド | 64 |
インデックス | 1 |
エンティティ | 無制限 |
文字列の長さ
データ型 | 制限 |
---|---|
VARCHAR | 65,535 |
ベクトルの次元
属性 | 制限 |
---|---|
次元 | 32,768 |
各RPCの入出力
操作 | 制限 |
---|---|
挿入操作 | 512 MB |
検索操作 | 512 MB |
クエリ操作 | 512 MB |
ロード制限
現在のバージョンでは、メモリリソース全体の90%以内のデータをロードする必要があります。これは実行エンジンのためのメモリリソースを確保するためです。
検索制限
ベクトル | 制限 |
---|---|
topk (返す類似結果の数) |
16,384 |
nq (検索リクエストの数) |
16,384 |