メインコンテンツまでスキップ

大規模Performance Benchmark

このページでは、単一ノードと分散デプロイメントの両方での大規模ベンチマーク結果をまとめています。これらのテストの目的は、異なるデータスケールでのクエリ動作を示し、Dorisがベクトルクエリ容量を単一ノードワークロードから大規模な分散デプロイメントへとどのように拡張するかを説明することです。

テストマトリックス

  • 単一ノード: FE/BE分離、BEは16C64GBマシン1台
  • 分散: 3つのBEノード、各16C64GB
  • ワークロード:
    • Performance768D10M
    • Performance1536D5M
    • Performance768D100M

単一ノードベンチマーク (16C64GB)

単一ノードの結果は、中規模から大規模データセットでのANNクエリパフォーマンスのベースラインを提供します。

インポートパフォーマンス

項目Performance768D10MPerformance1536D5M
次元数7681536
metric_typeinner_productinner_product
行数10M5M
バッチ設定NUM_PER_BATCH=500000
--stream-load-rows-per-batch 500000
NUM_PER_BATCH=250000
--stream-load-rows-per-batch 250000
インポート時間76m41s41m
show data all56.498 GB (25.354 GB + 31.145 GB)55.223 GB (25.346 GB + 29.878 GB)

Performance768D10Mのインポート時のCPU使用率を以下に示します。チャートは、取り込み全体を通してCPU使用量が比較的安定していることを示しています。

Performance768D10M import CPU

Performance1536D5Mの場合、データセットが小さく、バッチサイズも小さいため、取り込み中にCPU使用率がより頻繁に変動します。

Performance1536D5M import CPU

クエリパフォーマンス

2つの単一ノードワークロードでは、Dorisは高いrecallと低いレイテンシを維持しながら、数百QPSに達しています。

サマリー

データセットBestQPSRecall@100
Performance768D10M481.93560.9207
Performance1536D5M414.73420.9677

Performance768D10M (inner_product, 10M行)

同時実行数QPSP95レイテンシP99レイテンシ平均レイテンシ
10116.20000.09320.09330.0861
40455.94850.11020.12250.0877
80481.93560.23310.26740.1658

Performance1536D5M (inner_product, 5M行)

同時実行数QPSP95レイテンシP99レイテンシ平均レイテンシ
10144.32210.07640.08000.0693
40401.97320.12710.14040.0994
80414.73420.27720.32220.1925

単一ノードクエリテストでは、コールドクエリフェーズで完全なインデックスをメモリに読み込む必要があるため、システムがIOを待っている間のCPU使用率は比較的低くなります。ウォームクエリフェーズでは、CPU使用率が大幅に増加し、100%に近づきます。

Performance768D10M query CPU

分散ベンチマーク (3 x 16C64GB)

分散テストでは、単一の16C64GBノードの実用的なメモリ容量を超える大規模データセットに焦点を当てています。

3BEテストでは、Performance768D100Mが選択されました。単一ノードのメモリが64GBに制限されているため、メモリ使用量を削減するためにベクトル量子化が有効になっています。このテストは、より小さい単一ノードケースとの直接的な1対1比較を提供するためではなく、マルチBEデプロイメントを通じてDorisが100Mスケールでベクトルクエリ機能をどのように維持するかを示すことを目的としています。

インポートパフォーマンス

項目
データセットPerformance768D100M
行数100M
次元数768
バッチ設定NUM_PER_BATCH=500000
--stream-load-rows-per-batch 500000
インデックスプロパティ"dim"="768", "index_type"="hnsw", "metric_type"="l2_distance", "pq_m"="384", "pq_nbits"="8", "quantizer"="pq"
インデックス構築時間4h5min
show data all198.809 GB (137.259 GB + 61.550 GB)

構築後の分散状況:

  • 3つのbucket
  • bucket当たり34個のrowset、各rowsetは約1.99 GB
  • rowset当たり6個のsegment

クエリパフォーマンス

サマリー

メトリック
BestQPS77.6247
Recall@1000.9294

詳細結果 (l2_distance, 100M行)

同時実行数QPSP95レイテンシP99レイテンシ平均レイテンシ
1046.58360.26280.27910.2145
2075.35790.32510.35410.2651
3077.62470.52220.57660.3860
4076.63130.70890.78540.5212

インデックス構築中、CPU使用率は約50%を維持しており、構築プロセスが長期間CPUリソースを飽和させないことを示しています。

Performance768D100M import CPU

以下のチャートは、クエリフェーズ中のCPU使用率を示しています。CPU使用率はノード全体で比較的高いレベルを維持しており、分散クエリワークロードが利用可能な計算リソースを有効活用していることを示しています。

Performance768D100M query CPU

まとめ

  • 数千万のベクトルに対して、Dorisは単一ノードで強力なANNクエリパフォーマンスを提供し、数百QPSと高いrecallを実現しています。
  • 100Mベクトルデータセットでは、DorisはマルチBEデプロイメントを通じてオンラインベクトルクエリ機能を継続して提供しています。
  • テストグループでは異なるデータセットサイズ、距離メトリック、インデックス設定を使用しているため、結果は直接的な1対1パフォーマンス比較ではなく、スケールベンチマークとして読むべきです。

注記

  • 2つのテストグループ間でメトリックタイプが異なるため(inner_product vs l2_distance)、絶対値を直接比較すべきではありません。
  • 単一ノードPerformance768D10Mの同時実行数=10での結果は、コールドクエリの影響を除外するように調整されています。

再現

単一ノード:

export NUM_PER_BATCH=500000
vectordbbench doris ... --case-type Performance768D10M --stream-load-rows-per-batch 500000

export NUM_PER_BATCH=250000
vectordbbench doris ... --case-type Performance1536D5M --stream-load-rows-per-batch 250000

分散 3BE:

export NUM_PER_BATCH=500000
vectordbbench doris ... --case-type Performance768D100M --stream-load-rows-per-batch 500000