向量檢索的集群規劃
更新時間 2023-12-10 22:59:27
最近更新時間: 2023-12-10 22:59:27
分享文章
本章節主要介紹向量檢索的集群規劃。
向量檢索的索引構建與查詢均使用堆外內存,所以集群容量與索引類型、總堆外內存大小等因素相關。通過預估全量索引所需的堆外內存大小,可以選擇合適的集群規格。
不同類型的索引所需堆外內存大小的預估方式不同,計算公式如下:
- GRAPH索引


說明若有實時更新索引的需求,還需要考慮向量索引構建和自動merge所需的堆外內存開銷,保守估計需要1.5~2倍mem_needs。
- PQ類索引


- FALT 、IVF索引


參數說明
| 參數 | 說明 |
|---|---|
| dim | 向量維度。 |
| neighbors | 圖節點鄰居數,默認值為64。 |
| dim_size | 每一維度值所需的字節數,默認為float類型,需要4字節。 |
| num | 向量總條數。 |
| delta | 元數據大小,該項通常可以忽略。 |
| frag_num | 量化編碼時的向量分段數,創建索引時若未配置該值,則由向量維度“dim”決定。 if dim <= 256: frag_num = dim / 4 elif dim <= 512: frag_num = dim / 8 else : frag_num = 64 |
| frag_size | 量化編碼時中心點編碼的size,默認為1,當“frag_num”大于256時,該值等于2。 |
基于上述計算方法,可預估出完整向量索引所需堆外內存的大小。選擇集群規格時,還需考慮每個節點的堆內存開銷。
節點的堆內存分配策略:每個節點的堆內存大小為節點物理內存的一半,且最大不超過31GB。
例如,基于SIFT10M數據集創建GRAPH索引,其“dim”為“128”,“dim_size”為“4”,“neighbors”采用默認值“64”,“num”為“1000萬”,將各值代入上述公式得到GRAPH索引所需堆外內存大小約為:


同時考慮到堆內存的開銷,單臺“8U 16G”規格的機器可以滿足該場景的需求。如果實際場景還有實時寫入或更新的需求,則需要考慮申請更大的內存規格。