Milvus 2.2 ベンチマークテストレポート
本レポートは、Milvus 2.2.0の主なテスト結果を示すものであり、Milvus 2.2.0の検索性能、特にスケールアップとスケールアウトの能力を示すことを目的としています。
この度、Milvus 2.2.3に対するベンチマークを実施し、以下の主要な結果を得ました:
- 検索レイテンシーの2.5倍削減
- 4.5倍のQPS向上
- 10億件規模の類似検索でも性能劣化はほとんどなし
- 複数のレプリカを使用した場合の線形スケーラビリティ
詳細については、このホワイトペーパーと 関連するベンチマーク・テスト・コードをご参照ください。
概要
- Milvus 2.1と比較すると、Milvus 2.2.0のQPSはクラスタモードで48%以上、スタンドアロンモードで75%以上向上しています。
- Milvus2.2.0は、スケールアップとスケールアウトが可能である:
- CPUコアを8から32に拡張すると、QPSは直線的に増加する。
- QPSは、Querynodeレプリカを1から8まで拡張することで直線的に増加します。
用語解説
テストで使用した用語の詳細を見るにはクリックしてください。
用語
説明
nq
1回の検索要求で検索されるベクトルの数
topk
1回の検索要求で、各ベクトル(nq)に対して検索される最も近いベクトルの数
ef
HNSW インデックスに固有の検索パラメータ
RT
リクエストを送信してから応答を受信するまでの応答時間
QPS
1秒間に正常に処理された検索リクエスト数
テスト環境
すべてのテストは以下の環境で実施した。
ハードウェア環境
ハードウェア | スペック |
---|---|
CPU | インテル® Xeon® Gold 6226R CPU @ 2.90GHz |
メモリ | 16*32 GB RDIMM、3200 MT/秒 |
SSD | SATA 6 Gbps |
ソフトウェア環境
ソフトウェア | バージョン |
---|---|
milvus | v2.2.0 |
Milvus GO SDK | v2.2.0 |
デプロイ方式
- Milvusインスタンス(スタンドアロンまたはクラスタ)は、物理マシンまたは仮想マシンをベースとしたKubernetesクラスタ上にHelmを介してデプロイされる。
- テストによってCPUコア数、メモリサイズ、レプリカ(ワーカーノード)数が異なるだけで、Milvusクラスタにのみ適用されます。
- 未指定の構成はデフォルトの構成と同じである。
- Milvusの依存関係(MinIO、Pulsar、Etcd)は、各ノードのローカルSSDにデータを保存します。
- 検索リクエストは、Milvus GO SDKを介してMilvusインスタンスに送信されます。
データセット
テストでは、ANN-BenchmarksのオープンソースデータセットSIFT(128次元)を使用する。
テストパイプライン
- HelmでMilvusインスタンスを起動し、各テストに記載されているサーバ設定を行う。
- Milvus GO SDK経由でMilvusインスタンスに接続し、対応するテスト結果を取得する。
- コレクションを作成する。
- 100万個のSIFTベクトルを挿入する。HNSW インデックスを構築し、
M
を8
に、efConstruction
を200
に設定してインデックスパラメータを構成する。 - コレクションをロードする。
- 検索パラメータ
nq=1, topk=1, ef=64
を使用して、異なる同時実行数で検索する。
テスト結果
Milvus 2.2.0 v.s. Milvus 2.1.0
クラスタ
サーバー構成(クラスタ)
yaml queryNode: replicas: 1 resources: limits: cpu: "12.0" memory: 8Gi requests: cpu: "12.0" memory: 8Gi
検索パフォーマンス
Milvus | QPS | RT(TP99) / ms | RT(TP50) / ms | フェール/秒 |
---|---|---|---|---|
2.1.0 | 6904 | 59 | 28 | 0 |
2.2.0 | 10248 | 63 | 24 | 0 |
クラスタ検索のパフォーマンス
スタンドアロン
サーバー構成(スタンドアロン)
yaml standalone: replicas: 1 resources: limits: cpu: "12.0" memory: 16Gi requests: cpu: "12.0" memory: 16Gi
検索パフォーマンス
Milvus | QPS | RT(TP99) / ms | RT(TP50) / ms | フェール/秒 |
---|---|---|---|---|
2.1.0 | 4287 | 104 | 76 | 0 |
2.2.0 | 7522 | 127 | 79 | 0 |
スタンドアロン検索のパフォーマンス
Milvus 2.2.0 スケールアップ
1つのQuerynodeのCPUコアを拡張し、スケールアップ能力を確認する。
サーバ構成(クラスタ)
yaml queryNode: replicas: 1 resources: limits: cpu: "8.0" /"12.0" /"16.0" /"32.0" memory: 8Gi requests: cpu: "8.0" /"12.0" /"16.0" /"32.0" memory: 8Gi
検索パフォーマンス
CPUコア | 同時実行数 | QPS | RT(TP99) / ms | RT(TP50) / ms | フェール/秒 |
---|---|---|---|---|---|
8 | 500 | 7153 | 127 | 83 | 0 |
12 | 300 | 10248 | 63 | 24 | 0 |
16 | 600 | 14135 | 85 | 42 | 0 |
32 | 600 | 20281 | 63 | 28 | 0 |
QuerynodeのCPUコアによる検索パフォーマンス
Milvus 2.2.0 スケールアウト
より多くのQuerynodeでより多くのレプリカを拡張し、スケールアウト能力をチェックします。
注: Querynodeの数は、コレクションをロードするときのreplica_number
。
サーバー構成 (クラスタ)
yaml queryNode: replicas: 1 / 2 / 4 / 8 resources: limits: cpu: "8.0" memory: 8Gi requests: cpu: "8.0" memory: 8Gi
レプリカ数 | 同時実行数 | QPS | RT(TP99) / ms | RT(TP50) / ms | フェール/秒 |
---|---|---|---|---|---|
1 | 500 | 7153 | 127 | 83 | 0 |
2 | 500 | 15903 | 105 | 27 | 0 |
4 | 800 | 19281 | 109 | 40 | 0 |
8 | 1200 | 30655 | 93 | 38 | 0 |
Querynodeレプリカによる検索パフォーマンス