選購向量檢索版執行個體前,通過規格計算機可擷取推薦的查詢節點和資料節點配置。本文還提供了 HNSW 和 IVF_SQ8 演算法在不同資料規模下的 Benchmark 資料,作為規格選型的效能參考。
使用規格計算機
在向量檢索版購買頁面,單擊規格計算機。
開啟OpenSearch向量檢索版規格計算機對話方塊,包含基礎情況、向量資料情況和查詢情況三個配置地區,填寫完成後單擊進行運算擷取推薦規格。
基礎情況
執行個體所在地區:需要建立引擎的地區。
是否有容災需求:是否需要容災,可下拉選擇有或無。
向量資料情況
向量資料條數:寫入引擎的向量資料條數。
向量維度:寫入引擎的向量維度。
向量演算法:根據需求選擇,目前支援以下三種演算法。
HNSW:基於圖的向量檢索演算法,召回率極高且效能好,記憶體及儲存佔用與 Linear 相當,在低維度和高維度向量資料集上均有很好的表現,適用於大多數向量檢索情境。
QC:基於量化聚類的向量檢索演算法,召回結果正確率極高,佔用資源較少,效能較好。在低維度向量資料集上有更好表現,記憶體及儲存佔用一般只有 Linear 和 HNSW 的 1/4,適用於對召回率沒有嚴苛要求的巨量資料量檢索情境。
Linear:線性檢索(暴力檢索),召回結果完全正確,但佔用資源多且效能較差,通常適用於小資料集(1 萬條資料量以內)的精確檢索。
查詢情況
平均 QPS:接入引擎的流量 QPS。
期望搜尋平均回應時間:期望的召回結果平均耗時,單位可選 s 或 ms。
填寫完成後,單擊進行運算。
推薦結果包括查詢節點規格類型系列、查詢節點數量、查詢節點規格、資料節點規格類型系列、資料節點數量、資料節點規格以及單資料節點儲存空間/磁碟空間等參數,根據推薦結果購買對應規格的資源。
HNSW Benchmark 資料
以下測試資料基於公開資料集,使用引擎版本 vector_service 1.5.9,採用 1 個查詢節點 + 1 個雲端硬碟型資料節點的配置組合。建圖參數:M = 100,ef-construction = 500。
資料集 | 規格 | 參數 | recall@k(串列) | P95 延遲(串列) | 峰值 QPS(並發) | 峰值並發 | 查詢節點 CPU/Mem | 資料節點 CPU/Mem | 索引記憶體佔用 |
OpenAI 1536D 50K | 2C8G 查詢節點 + 2C16G 資料節點 | ef=20, k=10 | 0.9793 | 20ms | 643 | 10 | 89%/12% | 61%/10% | 311MB |
ef=200, k=100 | 0.9991 | — | — | — | — | — | |||
4C16G 查詢節點 + 4C32G 資料節點 | ef=20, k=10 | 0.9805 | 27ms | 1035 | 20 | 99%/7% | 38%/18% | ||
ef=200, k=100 | 0.9989 | 35ms | 744 | 20 | 88%/7% | 88%/18% | |||
Cohere 768D 1M | 4C16G 查詢節點 + 4C32G 資料節點 | ef=20, k=10 | 0.9560 | 18ms | 1413 | 20 | 96%/7% | 48%/18% | 3.13GB |
ef=200, k=100 | 0.9919 | 131ms | 745 | 80 | 68%/7% | 91%/18% | |||
4C16G 查詢節點 + 8C64G 資料節點 | ef=20, k=10 | 0.9598 | 26ms | 1601 | 30 | 99%/8% | 29%/8% | ||
ef=200, k=100 | 0.9921 | 25ms | 1527 | 30 | 97%/7% | 93%/8% | |||
Cohere 768D 10M | 8C32G 查詢節點 + 8C64G 資料節點 | ef=20, k=10 | 0.9429 | 24ms | 1534 | 30 | 70%/3% | 95%/55% | 33GB |
ef=200, k=100 | 0.9552 | 55ms | 662 | 30 | 40%/5% | 95%/55% |
資料節點記憶體水位與效能的關係
以下測試使用 Cohere 768D 資料集,搭配 4C16G 查詢節點 + 4C32G 雲端硬碟型資料節點,索引結構為 HNSW(InnerProduct,ef-construction = 500,M = 100)。通過分步插入資料(每次 1M 條)觀察記憶體水位對 QPS 的影響。
資料量 | 索引記憶體佔用 | 進程記憶體使用量率 | QPS(k=10, ef=20) | QPS(k=100, ef=200) |
2M | 6.3GB | 26.6% | 1368 | 647 |
4M | 12.5GB | 47.8% | 1324 | 378 |
5M | 15.6GB | 59.2% | 1068 | 334 |
6M | 18.8GB | 69% | 1112 | 341 |
7M | 21.8GB | 80% | 幾乎不可用 | |
8M | — | — | — | — |
典型配置會將向量索引、PK 索引和倒排索引以 mlock 方式鎖定在實體記憶體中,以獲得最低的檢索延遲。其他資料(attribute、summary 等)不做 mlock,依賴 OS page cache 按需載入。當記憶體水位上升,page cache 被壓縮,讀取 attribute 時頻繁觸發缺頁中斷,導致延遲上升:
水位 > 70%:QPS 急劇下降。
水位 > 80%:服務近乎不可用。
IVF_SQ8 Benchmark 資料
以下測試使用 Cohere 768D 10M 資料集,搭配 4C16G 查詢節點 + 4C32G 雲端硬碟型資料節點。
建圖參數:
{
"proxima.qc.builder.quantizer_class": "Int8QuantizerConverter",
"proxima.qc.builder.quantize_by_centroid": true,
"proxima.qc.builder.optimizer_class": "BruteForceBuilder",
"proxima.qc.builder.thread_count": 10,
"proxima.qc.builder.optimizer_params": {
"proxima.linear.builder.column_major_order": true
},
"proxima.qc.builder.store_original_features": false,
"proxima.qc.builder.train_sample_count": 3000000,
"proxima.qc.builder.train_sample_ratio": 0.5
}串列測試:召回率和延遲
Scan ratio | 召回率 | 延遲(P99) | 延遲(P95) |
0.01 | 0.9123 | 39.5ms | 35.7ms |
0.05 | 0.9454 | 84ms | 75ms |
並發效能測試:分步插入
將 10M 條 768 維向量資料分步插入執行個體,觀察不同資料量對應的索引大小和查詢 QPS 的變化。
資料量 | 索引記憶體佔用 | 記憶體使用量率 | QPS(scan ratio 0.01, k=100) | QPS(scan ratio 0.05, k=100) |
1M | 2.25GB | 7.4% | 1000 | 558 |
2M | 3.11GB | 10.4% | 766 | 258 |
4M | 4.95GB | 16% | 408 | 122 |
10M | 9.9GB | 32.4% | 131 | 46 |