Milvusは大規模(1兆倍)ベクトル類似検索のために作られた
毎日、計り知れない数のビジネス・クリティカルな洞察が、企業が自社のデータの意味を理解できないために浪費されている。テキスト、画像、動画、音声などの非構造化データは、全データの80%を占めると推定されているが、分析されているのはそのわずか1%に過ぎない。幸いなことに、人工知能(AI)、オープンソースソフトウェア、ムーアの法則により、機械規模の分析がかつてないほど身近になりつつある。ベクトル類似性検索を使えば、膨大な非構造化データセットから価値を引き出すことができる。この技術には、非構造化データを特徴ベクトル(リアルタイムで処理・分析できる機械に優しい数値データ形式)に変換することが含まれる。
ベクトル類似性検索は、電子商取引、セキュリティ、新薬開発などに応用されている。これらのソリューションは、数百万、数十億、あるいは数兆のベクトルを含むダイナミックなデータセットに依存しており、その有用性は、多くの場合、ほぼ瞬時に結果を返すことに依存しています。Milvusは、大規模なベクターデータセットを効率的に管理・検索するためにゼロから構築されたオープンソースのベクターデータ管理ソリューションです。この記事では、Milvusのベクトルデータ管理へのアプローチと、ベクトル類似検索のために最適化されたプラットフォームについて説明します。
戻る
LSMツリーにより大規模な動的データ管理を効率化
効率的な動的データ管理を実現するために、Milvusはログ構造化マージツリー(LSMツリー)データ構造を採用しています。LSMツリーは、挿入や削除の多いデータへのアクセスに適しています。高性能な動的データ管理に役立つLSMツリーの具体的な属性については、発明者が発表したオリジナル研究を参照してください。LSMツリーは、BigTable、Cassandra、RocksDBなど、多くの一般的なデータベースで使用されているデータ構造です。
Milvusではベクトルはエンティティとして存在し、セグメントに格納される。各セグメントには1つから最大800万個のエンティティが含まれる。各エンティティには一意のIDとベクトル入力用のフィールドがあり、後者は1から32768次元を表す。
ブログ_Milvusは大規模(Think Trillion)ベクトル類似検索用に構築されました_2.png
データ管理は迅速なアクセスと断片化の抑制に最適化されている。
Milvusはインサートリクエストを受け取ると、新しいデータをWAL(Write ahead log)に書き込む。リクエストが正常にログファイルに記録された後、データはミュータブルバッファに書き込まれる。最後に、3つのトリガーのうちの1つにより、バッファは不変となり、ディスクにフラッシュされます:
- 時間間隔:時間間隔: 定められた間隔(デフォルトでは1秒)で、定期的にデータがディスクにフラッ シュされる。
- バッファサイズ:累積データがミュータブル・バッファの上限(128MB)に達したとき。
- 手動トリガー:クライアントがフラッシュ関数を呼び出すと、データは手動でディスクにフラッシュされます。
Blog_Milvus Was Built for Massive-Scale (Think Trillion) Vector Similarity Search_3.png
ユーザは一度に数千から数百万のベクトルを追加することができ、新しいベクトルが挿入されるたびに異なるサイズのデータファイルが生成されます。その結果、データの断片化が生じ、データ管理が複雑になり、ベクトル類似検索の速度が低下します。過剰なデータ断片化を防ぐため、Milvusは、結合されたファイルサイズがユーザー設定可能な上限(例えば、1GB)に達するまで、データセグメントを常にマージします。例えば、上限が1GBの場合、512次元のベクトルを1億個挿入しても、データファイルは200個にしかなりません。
ベクターの挿入と検索が同時に行われるインクリメンタルな計算シナリオでは、Milvusは新しく挿入されたベクターデータを他のデータとマージする前にすぐに検索できるようにします。データマージ後、元のデータファイルは削除され、代わりに新しく作成されたマージファイルが検索に使用されます。
ブログ_Milvusは大規模(Think Trillion)ベクトル類似検索用に構築されました_4.png
ブログ_Milvusは大規模(Think Trillion)ベクトル類似検索のために構築されました_5.png
類似検索はベクトルデータのインデックス化によって高速化される
デフォルトでは、Milvusはベクトルデータを検索する際、総当たり検索に頼っています。網羅的検索とも呼ばれるこのアプローチは、クエリを実行するたびにすべてのベクトルデータをチェックします。数百万から数十億の多次元ベクトルを含むデータセットでは、このプロセスは遅すぎて、ほとんどの類似検索シナリオでは役に立ちません。クエリー時間を短縮するために、アルゴリズムを用いてベクトルインデックスを構築する。インデックス化されたデータは、類似したベクトルがより近くにあるようにクラスタ化され、類似検索エンジンが全データの一部だけをクエリすることを可能にし、精度を犠牲にする一方でクエリ時間を大幅に短縮する。
Milvusがサポートするベクトルインデックスタイプのほとんどは、近似最近傍(ANN)検索アルゴリズムを使用しています。多数のANNインデックスがあり、各インデックスは性能、精度、ストレージ要件のトレードオフを伴います。Milvusは量子化ベース、グラフベース、ツリーベースのインデックスをサポートしており、これらは全て異なるアプリケーションシナリオに対応しています。Milvusのインデックス構築に関する詳細や、Milvusがサポートするベクトルインデックスの種類については、Milvusの技術文書を参照してください。
インデックス構築は多くのメタデータを生成する。例えば、200個のデータファイルに保存された1億個の512次元ベクトルにインデックスを作成すると、さらに200個のインデックスファイルが作成されます。ファイルの状態を効率的にチェックし、新しいファイルを削除または挿入するためには、効率的なメタデータ管理システムが必要です。Milvusはオンライントランザクション処理(OLTP)を採用しており、これはデータベース内の少量のデータの更新や削除に適したデータ処理手法である。MilvusはSQLiteまたはMySQLを使用してメタデータを管理します。
Milvusについてもっと知る
Milvusは、Linux Foundationの傘下組織であるLF AI & Dataで現在インキュベーション中のオープンソースのベクトルデータ管理プラットフォームです。Milvusは、プロジェクトを開始したデータサイエンス・ソフトウェア企業であるZillizによって2019年にオープンソース化された。Milvusの詳細については、ウェブサイトで確認できる。ベクトル類似検索や、AIを使って非構造化データの可能性を引き出すことに興味がある方は、GitHubのオープンソースコミュニティにご参加ください。
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word