Milvus1.0の中身は?
Milvus.jpeg
Milvusは、100万、10億、あるいは1兆もの巨大なベクトルデータセットを管理するために設計されたオープンソースのベクトルデータベースです。Milvusは、新薬の発見、コンピューター・ビジョン、自律走行、レコメンデーション・エンジン、チャットボットなど、幅広い応用が可能です。
2021年3月、Milvusを開発するZilliz社は、プラットフォーム初の長期サポートバージョンであるMilvus v1.0をリリースした。数ヶ月に及ぶ広範なテストの後、世界で最も人気のあるベクターデータベースの安定した量産可能なバージョンは、プライムタイムの準備が整いました。このブログでは、Milvusの基礎知識とv1.0の主な機能についてご紹介します。
Milvusのディストリビューション
Milvusには、CPUのみのディストリビューションとGPU対応のディストリビューションがあります。前者はインデックス構築と検索をCPUのみに依存し、後者はMilvusをさらに高速化するCPUとGPUのハイブリッド検索とインデックス構築を可能にする。例えば、ハイブリッドディストリビューションを使用すると、CPUを検索に、GPUをインデックス構築に使用することができ、クエリの効率をさらに向上させることができる。
どちらのMilvusディストリビューションもDockerで利用可能です。DockerからMilvusをコンパイルするか(オペレーティングシステムがサポートしている場合)、Linux上でソースコードからMilvusをコンパイルすることができます(他のオペレーティングシステムはサポートしていません)。
ベクトルの埋め込み
Milvusではベクターはエンティティとして格納されます。各エンティティは1つのベクトルIDフィールドと1つのベクトルフィールドを持ちます。Milvus v1.0は整数ベクトルIDのみをサポートしています。Milvusでコレクションを作成する際、ベクターIDは自動生成または手動で定義することができます。Milvusは自動生成されたベクターIDが一意であることを保証しますが、手動で定義されたIDはMilvus内で重複する可能性があります。手動でIDを定義する場合、すべてのIDが一意であることを確認する責任はユーザーにあります。
パーティション
Milvusはコレクション内にパーティションを作成することができます。データが定期的に挿入され、過去のデータが重要でない場合(ストリーミングデータなど)、パーティションを使用することでベクトルの類似性検索を高速化することができます。1つのコレクションは最大4,096のパーティションを持つことができます。特定のパーティション内でベクトル検索を指定すると、検索が絞り込まれ、特に1兆個以上のベクトルを含むコレクションでは、クエリ時間が大幅に短縮される可能性があります。
インデックスアルゴリズムの最適化
Milvusは、Faiss、NMSLIB、Annoyなど、広く採用されている複数のインデックスライブラリの上に構築されています。Milvusは、これらのインデックスライブラリの基本的なラッパー以上のものです。以下は、基礎となるライブラリに加えられた主な機能強化の一部である:
- Elkan k-meansアルゴリズムを使用したIVFインデックス性能の最適化。
- FLAT検索の最適化。
- IVF_SQ8Hハイブリッドインデックスのサポート。データの精度を犠牲にすることなく、インデックスファイルのサイズを最大75%削減することができます。IVF_SQ8HはIVF_SQ8をベースに構築されており、同一のリコール率でありながら、クエリー速度が大幅に高速化されている。IVF_SQ8HはGPUの並列処理能力とCPU/GPUコプロセッシングの相乗効果の可能性を活用するためにMilvusのために特別に設計されました。
- 動的命令セットの互換性
検索、インデックス構築、その他のMilvus最適化
Milvusでは、検索およびインデックス構築のパフォーマンスを向上させるため、以下の最適化が行われています。
- 検索性能は、クエリー数(nq)がCPUスレッド数より少ない場合に最適化される。
- Milvusは同じtopKと検索パラメータを持つクライアントからの検索リクエストを結合する。
- インデックス構築は検索要求が来ると中断される。
- Milvusは開始時に自動的にコレクションをメモリにプリロードする。
- ベクトル類似検索の高速化のために複数のGPUデバイスを割り当てることができる。
距離メトリクス
Milvusはベクトル類似検索のために構築されたベクトルデータベースです。このプラットフォームは、MLOpsやプロダクションレベルのAIアプリケーションを念頭に構築されています。Milvusは、ユークリッド距離(L2)、内積(IP)、ジャカード距離、谷本、ハミング距離、上部構造、下部構造など、類似度を計算するための幅広い距離メトリクスをサポートしています。最後の2つのメトリックスは、分子検索やAIによる新薬探索で一般的に使用されている。
ロギング
milvusはログローテーションをサポートしている。システム設定ファイルのmilvus.yamlでは、1つのログファイルのサイズ、ログファイルの数、標準出力へのログ出力を設定できる。
分散ソリューション
MilvusのシャーディングミドルウェアであるMishardsは、Milvusの分散ソリューションです。1つの書き込みノードと無制限の読み取りノードを持つMishardsは、サーバクラスタの計算能力を解き放ちます。リクエスト転送、リード/ライト分割、動的/水平スケーリングなどの機能を備えています。
モニタリング
Milvusは、オープンソースのシステム監視およびアラートツールキットであるPrometheusと互換性があります。MilvusはPrometheusのPushgatewayのサポートを追加し、Prometheusによる短時間のバッチメトリクスの取得を可能にします。監視・アラートシステムは以下のように動作します:
- MilvusサーバーはカスタマイズされたメトリクスデータをPushgatewayにプッシュします。
- Pushgatewayは、エフェメラルなメトリクス・データがPrometheusに安全に送信されるようにします。
- PrometheusはPushgatewayからデータを取得し続けます。
- Alertmanagerを使用して、さまざまな指標のアラートしきい値を設定し、電子メールまたはメッセージでアラートを送信します。
メタデータ管理
Milvusはデフォルトでメタデータ管理にSQLiteを使用します。SQLiteはMilvusに実装されており、設定は不要です。本番環境では、メタデータ管理にMySQLを使用することをお勧めします。
オープンソースコミュニティ
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word