Vectorデータベースのパフォーマンス検証
このセクションでは、ベクターデータベースで実行されたパフォーマンス検証について説明します。
パフォーマンスの検証
パフォーマンス検証は、ベクターデータベースとストレージシステムの両方で重要な役割を果たし、最適な運用と効率的なリソース使用率を確保するための重要な要素となります。ベクトルデータベースは、高次元データを処理し、類似性検索を実行することで知られており、複雑なクエリを迅速かつ正確に処理するために、高いパフォーマンスレベルを維持する必要があります。パフォーマンス検証は、ボトルネックを特定し、構成を微調整し、サービスを低下させることなく予想される負荷にシステムが対応できることを確認するのに役立ちます。同様に、ストレージシステムにおいても、レイテンシの問題やシステム全体のパフォーマンスに影響を与えるボトルネックが発生することなく、データを効率的に格納、取得するためには、パフォーマンスの検証が不可欠です。また、ストレージインフラのアップグレードや変更に必要な情報に基づいて意思決定を下すのにも役立ちます。したがって、パフォーマンス検証はシステム管理の重要な側面であり、高いサービス品質、運用効率、およびシステム全体の信頼性の維持に大きく貢献します。
このセクションでは、Milvusやpgvecto.RSなどのベクターデータベースのパフォーマンス検証について、LLMライフサイクル内でのRAGおよび推論ワークロードをサポートする際のI/OプロファイルやNetAppストレージコントローラの動作などのストレージパフォーマンス特性に焦点を当てて詳しく説明します。これらのデータベースをONTAPストレージ解決策と組み合わせた場合のパフォーマンスの差別化要因を評価し、特定します。分析は、1秒あたりに処理されるクエリ数(QPS)などの主要パフォーマンス指標に基づいて行われます。
ミルバスに使用されている方法と進捗状況を以下で確認してください。
詳細 |
Milvus(スタンドアロンおよびクラスタ) |
postgres(pgvecto.rs)# |
バージョン |
2.3.2 |
0.2.0 |
ファイルシステム |
iSCSI LUN上のXFS |
|
ワークロードジェネレータ |
"VectorDB -ベンチ" –v0.0.5 |
|
テエタセツト |
LAIONデータセット |
|
ストレージコントローラ |
AFF 800 *バージョン–9.14.1 * 100GbE×4–milvus用、postgres * iSCSI用100GbE×2 |
VectorDB - Milvusスタンドアロンクラスタ付きベンチ
vectorDB-Benchを使用したmilvusスタンドアロンクラスタについて、次のパフォーマンス検証を行いました。
milvusスタンドアロンクラスタのネットワーク接続とサーバ接続を以下に示します。
このセクションでは、Milvusスタンドアロンデータベースのテスト結果を共有します。
。 これらのテストのインデックスタイプとしてDiskANNを選択しました。
。 約100GBのデータセットのインデックスの取り込み、最適化、作成には約5時間かかりました。この期間のほとんどで、20コア(ハイパースレッディングが有効な場合は40 vCPUに相当)を搭載したMilvusサーバーは、最大CPU容量100%で動作していました。システムメモリサイズを超える大規模なデータセットでは、DiskANNが特に重要であることがわかりました。
。 クエリフェーズでは、0.9987のリコールで10.93のQueries Per Second (QPS)率が観察されました。クエリの99パーセンタイルレイテンシは708.2ミリ秒で測定されました。
ストレージに関して言えば、データベースは取り込み、挿入後の最適化、インデックス作成の各フェーズで1秒あたり約1、000ops/secの処理を実行していました。クエリフェーズでは、1秒あたり32、000件の処理が必要でした。
次のセクションでは、ストレージパフォーマンスの指標について説明します。
ワークロードフェーズ | メートル法 | 価値 |
---|---|---|
データの取り込み |
IOPS |
1、000未満 |
レイテンシ |
400 usecs未満 |
|
ワークロード |
読み取り/書き込み混在(主に書き込み) |
|
IOサイズ |
64KB |
|
クエリ |
IOPS |
最大32、000 |
レイテンシ |
400 usecs未満 |
|
ワークロード |
100%キャッシュ読み取り |
|
IOサイズ |
主に8KB |
vectorDB-benchの結果は以下のとおりです。
スタンドアロンMilvusインスタンスのパフォーマンス検証から、次元1536の500万ベクトルのデータセットをサポートするには、現在のセットアップでは不十分であることがわかります。ストレージには十分なリソースがあり、システムのボトルネックになっていないことが確認されました。
VectorDB -ミルバスクラスター付きベンチ
このセクションでは、Kubernetes環境内でのMilvusクラスタの導入について説明します。このKubernetesセットアップは、KubernetesのマスターノードとワーカーノードをホストするVMware vSphere環境の上に構築されました。
VMware vSphere環境とKubernetes環境の詳細については、以降のセクションで説明します。
このセクションでは、Milvusデータベースをテストした結果と観測結果を紹介します。
*使用されたインデックスタイプはDiskANNです。
*次の表は、次元1536で500万のベクトルを使用する場合の、スタンドアロン配置とクラスタ配置の比較を示しています。クラスタ環境では、データの取り込みと挿入後の最適化にかかる時間が短くなっていることがわかりました。クラスタ環境では、クエリの99パー センタイルレイテンシがスタンドアロンセットアップに比べて6分の1に短縮されました。
* Queries Per Second(QPS;1秒あたりのクエリ数)の割合はクラスタ環境では高くなりましたが、望ましいレベルではありませんでした。
次の図は、ストレージクラスタのレイテンシや合計IOPS(1秒あたりの入出力処理数)など、さまざまなストレージ指標を示しています。
次のセクションでは、ストレージパフォーマンスの主要な指標について説明します。
ワークロードフェーズ | メートル法 | 価値 |
---|---|---|
データの取り込み |
IOPS |
1、000未満 |
レイテンシ |
400 usecs未満 |
|
ワークロード |
読み取り/書き込み混在(主に書き込み) |
|
IOサイズ |
64KB |
|
クエリ |
IOPS |
ピーク時147、000 |
レイテンシ |
400 usecs未満 |
|
ワークロード |
100%キャッシュ読み取り |
|
IOサイズ |
主に8KB |
スタンドアロンのMilvusクラスタとMilvusクラスタの両方のパフォーマンス検証に基づいて、ストレージI/Oプロファイルの詳細を提示します。
*スタンドアロン環境とクラスタ環境の両方で、I/Oプロファイルが一貫していることが確認されました。
*ピークIOPSの差は、クラスタ環境内のクライアント数が多いことが原因である可能性があります。
vectorDB - Postgresを使用したベンチ(pgvecto.rs)
VectorDB-Benchを使用して、PostgreSQL(pgvecto.rs)に対して次のアクションを実行しました。
PostgreSQL(特にpgvecto.rs)のネットワーク接続とサーバ接続に関する詳細は次のとおりです。
このセクションでは、pgvecto.rsを使用してPostgreSQLデータベースをテストした結果と結果を共有します。
*テストのインデックスタイプとしてHNSWを選択したのは、テスト時にpgvecto.rsでDiskANNを使用できなかったためです。
*データ取り込みフェーズでは、次元768の1000万ベクトルからなるCohereデータセットをロードしました。このプロセスには約4.5時間かかりました。
*クエリフェーズでは、1秒あたりのクエリ数(QPS)は1,068、リコールは0.6344でした。クエリの99パーセンタイルレイテンシは20ミリ秒で測定されました。ランタイムのほとんどで、クライアントCPUは100%の容量で動作していました。
次の図は、ストレージクラスタの合計IOPS(1秒あたりの入出力処理数)など、さまざまなストレージ指標を示しています。
The following section presents the key storage performance metrics. image:pgvecto_storage_perf_metrics.png["入力/出力ダイアログを示す図、または書き込まれた内容を表す図"]
VECTOR DBベンチでのmilvusとpostgresのパフォーマンス比較
VectorDBBenchを使用したMilvusおよびPostgreSQLのパフォーマンス検証に基づいて、次のことを確認しました。
-
インデックスタイプ:HNSW
-
データセット:768次元で1000万ベクトルのコア
pgvecto.rsは0.6344のリコールで1,068のQPSレートを達成し、Milvusは0.9842のリコールで106のQPSレートを達成しました。
クエリの精度が優先される場合、Milvusはpgvecto.rsよりもパフォーマンスが高く、クエリごとに関連する項目の割合が高くなります。ただし、1秒あたりのクエリ数がより重要な要素である場合、pgvecto.rsはMilvusを超えます。ただし、pgvecto.rsを介して取得されるデータの品質は低く、検索結果の約37%が無関係な項目であることに注意する必要があります。
パフォーマンス検証に基づく観察:
パフォーマンスの検証に基づいて、次のことを確認しました。
MilvusのI/Oプロファイルは、OracleのSLOBなどのOLTPワークロードによく似ています。ベンチマークは、データの取り込み、最適化後、クエリの3つのフェーズで構成されています。初期段階は主に64KBの書き込み処理で特徴付けられますが、クエリフェーズでは8KBの読み取りが主に行われます。ONTAPはMilvusのI/O負荷を適切に処理することを期待しています。
PostgreSQLのI/Oプロファイルでは、困難なストレージワークロードは発生しません。メモリ内の実装が現在進行中であるため、クエリフェーズ中にディスクI/Oを確認することはできませんでした。
DiskANNは、ストレージを差別化するための重要なテクノロジーとして登場しています。これにより、システムメモリ境界を越えたベクターDB検索の効率的なスケーリングが可能になります。ただし、HNSWなどのインメモリベクトルDBインデックスを使用して、ストレージパフォーマンスの差別化を確立することはほとんどありません。
また、インデックスタイプがHSNWの場合、クエリフェーズでストレージが重要な役割を果たしないことも注目に値します。HSNWは、RAGアプリケーションをサポートするベクターデータベースで最も重要な操作フェーズです。つまり、ストレージのパフォーマンスがこれらのアプリケーションの全体的なパフォーマンスに大きく影響することはありません。