介紹 Milvus 中的 AISAQ:十億級向量搜尋在記憶體上的成本降低了 3,200 倍
向量資料庫已經成為關鍵任務 AI 系統的核心基礎架構,而且其資料量正以指數級的速度成長 - 通常會達到數十億個向量。在這樣的規模下,一切都變得更困難:維持低延遲、保持精確度、確保可靠性,以及跨複本和區域運作。但有一項挑戰往往很早就會浮現,並且主導架構決策 - 成本。
為了提供快速搜尋,大多數向量資料庫將關鍵索引結構保留在 DRAM (動態隨機存取記憶體),也就是最快、最昂貴的記憶體層級。這種設計對於效能來說很有效,但擴充性卻很差。DRAM 的使用量會隨資料大小而擴充,而不是隨查詢流量而擴充,而且即使有壓縮或部分 SSD 卸載,索引的大部分仍必須保留在記憶體中。隨著資料集的成長,記憶體成本很快就會成為限制因素。
Milvus 已支援DISKANN,這是一種以磁碟為基礎的 ANN 方法,可將大部分索引移至 SSD 上,從而降低記憶體壓力。然而,DISKANN 在搜尋過程中使用的壓縮表示法仍依賴 DRAM。Milvus 2.6在DISKANN 的啟發下,進一步採用AISAQ 這個以磁碟為基礎的向量索引。AiSAQ 由 KIOXIA 開發,其架構設計採用「零 DRAM 足跡架構」,將所有搜尋關鍵資料儲存在磁碟上,並最佳化資料放置位置,以盡量減少 I/O 作業。在十億向量的工作負載中,記憶體使用量從32 GB 減少 到約 10 MB,減少了3,200 倍,同時維持實際效能。
在接下來的幾節中,我們將解釋基於圖的向量搜尋如何運作、記憶體成本從何而來,以及 AISAQ 如何重塑十億向量搜尋的成本曲線。
傳統圖形向量搜尋的運作方式
向量搜尋是在高維空間中尋找其數值表示最接近查詢的資料點的過程。"最接近」的意思是根據距離函數,例如余弦距離或 L2 距離,找出最小的距離。在小規模的情況下,這是很直接的:計算查詢與每個向量之間的距離,然後傳回最接近的向量。然而,在大規模的情況下,例如十億規模,這種方法很快就會變得太慢而不切實際。
為了避免鉅細無遺的比較,現代的近似近鄰搜尋 (ANNS) 系統依賴於圖表索引。索引不是將查詢與每個向量進行比較,而是將向量組織成圖。每個節點代表一個向量,而邊則連接數字上接近的向量。這種結構可讓系統大幅縮小搜尋空間。
圖形是事先建立的,完全基於向量之間的關係。它不取決於查詢。當查詢到達時,系統的任務就是有效率地瀏覽圖表,找出與查詢距離最小的向量,而無需掃描整個資料集。
搜尋從圖形中預先定義的入口點開始。這個起點可能遠離查詢點,但演算法會朝離查詢點較近的向量移動,逐步改善其位置。在這個過程中,搜尋會維護兩個共同運作的內部資料結構:一個候選清單和一個結果清單。
在這個過程中,最重要的兩個步驟是擴充候選列表和更新結果列表。
擴充候選清單
候選清單代表搜尋的下一步。它是一組根據與查詢的距離排列的優先圖形節點。
在每次迭代時,演算法會
選擇目前發現的最接近的候選人。從候選清單中,選擇與查詢距離最小的向量。
從圖表中擷取向量的鄰居。這些鄰居是在索引建構過程中被識別為接近目前向量的向量。
評估未訪問的鄰居,並將其加入候選清單中。對於每個尚未探索過的鄰居,演算法會計算其與查詢的距離。之前造訪過的鄰居會被跳過,而新的鄰居如果看起來很有希望,就會被插入候選清單。
透過反覆擴大候選清單,搜尋會探索圖表中越來越多的相關區域。這可讓演算法在僅檢查所有向量的一小部分時,就能穩定地獲得更好的答案。
更新結果清單
與此同時,演算法會維護一個結果清單,記錄目前為止找到的最佳候選人,作為最終輸出。隨著搜尋的進行
追蹤遍歷過程中遇到的最接近向量。這些向量包括選定用來擴充的向量,以及沿途評估的其他向量。
儲存它們與查詢的距離。這樣就可以對候選向量進行排序,並維持目前的前 K 最近鄰向量。
隨著時間的推移,當更多的候選項被評估,而發現的改進較少時,結果清單就會穩定下來。一旦進一步的圖探索不太可能產生更接近的向量,搜尋就會終止,並返回結果清單作為最終答案。
簡單來說,候選清單會控制探索,而結果 清單則會捕捉到目前發現的最佳答案。
基於圖表的向量搜尋中的權衡
這種以圖表為基礎的方法首先使得大規模向量搜尋變得實用。透過瀏覽圖形而不是掃描每個向量,系統可以找到高品質的結果,而只需碰觸資料集的一小部分。
然而,這種效率並不是免費的。基於圖形的搜尋暴露了精確度與成本之間的基本權衡。
探索更多的鄰居可以涵蓋圖表中更大的部分,減少遺漏真正近鄰的機會,從而提高精確度。
同時,每一次額外的擴充都會增加工作量:更多的距離計算、更多的圖形結構存取,以及更多的向量資料讀取。隨著搜尋的深入或擴大,這些成本就會累積起來。視索引的設計方式而定,它們會顯示為更高的 CPU 使用率、更大的記憶體壓力或額外的磁碟 I/O。
在高召回率與資源使用效率之間取得平衡,是圖搜尋設計的核心。
DISKANN和AISAQ都是圍繞著相同的張力而建立的,但它們對於如何以及在何處支付這些成本做了不同的架構選擇。
DISKANN 如何優化基於磁碟的向量搜尋
DISKANN 是迄今最有影響力的磁碟式 ANN 解決方案,也是 NeurIPS Big ANN 大賽的官方基準,是十億規模向量搜尋的全球基準。它的重要性不僅在於效能,更在於它證明:基於圖表的 ANN 搜尋不一定要完全使用記憶體才能快速。
DISKANN 將固態硬碟機儲存與精心挑選的記憶體結構結合,證明大規模向量搜尋可以在商品硬體上達到高準確度與低延遲,而不需要大量的 DRAM 足跡。它是透過重新思考哪些部分的搜尋必須快速,哪些部分可以容忍較慢的存取速度來實現這一目標的。
在高層級上,DISKANN 將存取最頻繁的資料保留在記憶體中,而將較大、存取較不頻繁的結構移到磁碟上。這種平衡是透過幾個關鍵的設計選擇來達成的。
1.使用 PQ 距離來擴大候選清單
擴充候選清單是基於圖的搜尋中最常見的作業。每次擴充都需要估計查詢向量與候選節點的鄰居之間的距離。如果使用完整的高維向量來執行這些計算,就需要頻繁地從磁碟隨機讀取資料,無論在計算上或 I/O 上都是昂貴的作業。
DISKANN 將向量壓縮成乘積量化 (PQ) 代碼,並將它們保存在記憶體中,從而避免了這種成本。PQ 碼比完整向量小很多,但仍保留足夠的資訊來近似估計距離。
在擴充候選向量時,DISKANN 會使用這些記憶體內的 PQ 代碼來計算距離,而不是從 SSD 讀取完整向量。這大幅降低了圖形遍歷過程中的磁碟 I/O,允許搜尋快速且有效率地擴充候選,同時將大部分 SSD 流量保持在關鍵路徑之外。
2.將完整向量與鄰居清單共置於磁碟上
並非所有資料都能近似壓縮或存取。一旦識別出有潛力的候選項目,搜尋仍然需要存取兩種類型的資料,才能得到精確的結果:
鄰居清單,以繼續圖形遍歷
完整(未壓縮)向量,用於最終重排
這些結構的存取頻率比 PQ 代碼低,因此 DISKANN 將它們儲存在 SSD 上。為了最小化磁碟開銷,DISKANN 將每個節點的鄰居列表和完整向量放在磁碟上的同一個實體區域。這可確保單一 SSD 讀取可同時擷取兩者。
透過共置相關資料,DISKANN 可減少搜尋期間所需的隨機磁碟存取次數。這項優化改善了擴充和重新排序的效率,尤其是在大規模的情況下。
3.並行節點擴展以提高 SSD 利用率
基於圖形的 ANN 搜尋是一個迭代過程。如果每次迭代只擴充一個候選節點,系統每次只會發出單次磁碟讀取,導致 SSD 的大部分平行頻寬未被使用。為了避免這種低效率的情況,DISKANN 會在每次迭代中擴展多個候選節點,並向 SSD 傳送平行讀取請求。這種方法可以更好地利用可用頻寬,並減少所需的總迭代次數。
beam_width_ratio參數控制並行擴展的候選數:波束寬度 = CPU 核心數 × beam_width_ratio。較高的比率會擴大搜尋範圍,可能會提高精確度,但也會增加計算量和磁碟 I/O。
為了抵銷這個問題,DISKANN 引進了search_cache_budget_gb_ratio ,保留記憶體以快取頻繁存取的資料,減少 SSD 重複讀取的次數。這些機制共同幫助 DISKANN 在精確度、延遲和 I/O 效率之間取得平衡。
為什麼這很重要?
DISKANN 的設計是磁碟式向量搜尋的一大進步。藉由將 PQ 代碼保留在記憶體中,並將較大的結構推送到 SSD,相較於完全在記憶體中的圖索引,DISKANN 大幅減少了記憶體佔用量。
與此同時,此架構仍依賴永遠在線的 DRAM來處理搜尋的關鍵資料。PQ 代碼、快取記憶體和控制結構必須保持駐留在記憶體中,以保持遍歷的效率。當資料集增加到數十億向量,部署也增加複本或區域時,記憶體需求仍可能成為限制因素。
這就是AISAQ所要解決的缺口。
AISAQ 如何運作及其重要性
AISAQ 直接建基於 DISKANN 背後的核心理念,但引入了一個關鍵的轉變:它不再需要在 DRAM 中保留 PQ 資料。AISAQ 將壓縮向量移至 SSD,並重新設計圖形資料在磁碟上的佈局,以維持有效率的遍歷,而非將壓縮向量視為搜尋關鍵、永遠在記憶體中的結構。
為了實現這一目標,AISAQ 重組了節點儲存,使圖表搜尋時所需的資料 (完整向量、鄰居清單和 PQ 資訊) 以最佳化存取位置的模式排列在磁碟上。我們的目標不只是將更多資料推送到更經濟的磁碟,而是在不破壞前面所述的搜尋程序的情況下做到這一點。
為了滿足不同的應用需求,AISAQ 提供了兩種基於磁碟的儲存模式:效能與規模。從技術角度來看,這兩種模式的差異主要在於 PQ 壓縮資料在搜尋過程中的儲存與存取方式。從應用程式的角度來看,這些模式可滿足兩種不同類型的需求:低延遲需求(線上語義搜尋和推薦系統的典型需求)和超高規模需求(RAG 的典型需求)。
AISAQ 效能:速度最佳化
AISAQ-performance 將所有資料保留在磁碟上,同時透過資料代管維持低 I/O 開銷。
在此模式下:
每個節點的完整向量、邊緣列表及其鄰居的 PQ 代碼都一起儲存在磁碟上。
造訪節點仍然只需要讀取一次 SSD,因為候選人擴充和評估所需的所有資料都是集中在一起的。
從搜尋演算法的角度來看,這非常接近 DISKANN 的存取模式。儘管所有關鍵搜尋資料現在都存放在磁碟上,候選人擴充仍然很有效率,而執行時間效能也不相上下。
取捨是儲存開銷。由於鄰居的 PQ 資料可能會出現在多個節點的磁碟頁中,因此此佈局會引入冗餘,並大幅增加整體索引大小。
因此,AISAQ-Performance 模式將低 I/O 延遲優先於磁碟效率。從應用程式的角度來看,AiSAQ-Performance 模式可以提供線上語意搜尋所需的 10 mSec 範圍內的延遲。
AISAQ 規模:儲存效率最佳化
AISAQ-Scale 採用相反的方法。它的設計目的是在 SSD 上保留所有資料的同時,將磁碟使用量降至最低。
在此模式下:
PQ 資料會單獨儲存於磁碟上,沒有冗餘。
這可以消除冗餘,並大幅減少索引大小。
權衡之下,存取節點及其鄰居的 PQ 代碼可能需要多次讀取 SSD,增加候選人擴充時的 I/O 作業。如果不加以優化,搜尋速度會大幅減慢。
為了控制這個開銷,AISAQ-Scale 模式引入了兩個額外的最佳化:
PQ 資料重新排列,依存取優先順序排列 PQ 向量,以改善位置性並減少隨機讀取。
DRAM 中的 PQ 快取記憶體(
pq_read_page_cache_size),可儲存經常存取的 PQ 資料,避免重複讀取磁碟上的熱門項目。
透過這些最佳化,AISAQ-Scale 模式達到比 AISAQ-Performance 更佳的儲存效率,同時維持實際的搜尋效能。該效能仍低於 DISKANN,但沒有儲存開銷 (索引大小與 DISKANN 相似),且記憶體佔用量大幅減少。從應用的角度來看,AiSAQ 提供了在超高規模下滿足 RAG 要求的方法。
AISAQ 的主要優勢
AISAQ 將所有關鍵搜尋資料移至磁碟,並重新設計資料的存取方式,從根本上改變了以圖表為基礎的向量搜尋的成本與擴充性。它的設計提供了三個顯著的優勢。
1.DRAM 使用量最多可降低 3,200 倍
乘積量化 (Product Quantization) 可顯著縮小高維向量的大小,但在十億級的規模下,記憶體佔用量仍相當可觀。在傳統設計中,即使經過壓縮,PQ 代碼在搜尋過程中仍必須保留在記憶體中。
舉例來說,在SIFT1B 這個擁有十億個 128 維向量的基準上,光是 PQ 代碼就需要大約30-120 GB 的 DRAM,視配置而定。儲存完整、未壓縮的向量則需要額外的~480 GB。雖然 PQ 將記憶體使用量降低了 4-16倍,但剩餘的佔用空間仍然大到足以支配基礎架構成本。
AISAQ 完全消除了這個需求。透過將 PQ 代碼儲存於 SSD 而非 DRAM,記憶體不再被持久性索引資料所消耗。DRAM 僅用於輕量、暫態結構,例如候選清單及控制元資料。實際上,這可將記憶體使用量從數十 GB 減少到約 10 MB。在具有代表性的十億級配置中,DRAM 從32 GB 降至 10 MB,降低了 3,200 倍。
鑑於 SSD 儲存的單位容量成本約為 DRAM的 1/30,因此這種轉變對總系統成本有直接且顯著的影響。
2.無額外 I/O 開銷
將 PQ 代碼從記憶體移至磁碟通常會增加搜尋期間的 I/O 作業。AISAQ 透過仔細控制資料佈局和存取模式來避免這個問題。AISAQ 並未將相關資料分散到磁碟上,而是將 PQ 代碼、完整向量和鄰居清單共置一處,以便一起檢索。這可確保候選人擴充不會帶來額外的隨機讀取。
為了讓使用者控制索引大小與 I/O 效率之間的取捨,AISAQ 引進了inline_pq 參數,決定每個節點內嵌儲存多少 PQ 資料:
較低的 inline_pq:較小的索引大小,但可能需要額外的 I/O
較高的 inline_pq:索引大小較大,但可保留單讀取存取。
當配置為inline_pq = max_degree,AISAQ 會在一次磁碟操作中讀取節點的完整向量、鄰居清單和所有 PQ 代碼,符合 DISKANN 的 I/O 模式,同時將所有資料保留在 SSD 上。
3.順序 PQ 存取提高計算效率
在 DISKANN 中,擴充候選節點需要 R 次隨機存取記憶體,以取得其 R 個鄰居的 PQ 代碼。AISAQ 透過單次 I/O 擷取所有 PQ 代碼,並將它們依序儲存在磁碟上,消除了這種隨機性。
順序佈局提供了兩個重要的優點:
順序的 SSD 讀取比分散的隨機讀取快得多。
連續資料對快取記憶體較為友善,可讓 CPU 更有效率地計算 PQ 距離。
這可提高 PQ 距離計算的速度和可預測性,並有助於抵銷在 SSD 而非 DRAM 上儲存 PQ 代碼的效能成本。
AISAQ vs. DISKANN:效能評估
瞭解 AISAQ 與 DISKANN 在架構上的差異之後,下一個問題就很直接了:這些設計選擇在實際上對效能和資源使用有何影響?本評估將比較 AISAQ 和 DISKANN 在搜尋效能、記憶體消耗和磁碟使用量這三個在十億規模上最重要的層面。
我們特別檢視 AISAQ 在內嵌 PQ 資料數量 (INLINE_PQ) 變化時的表現。這個參數直接控制索引大小、磁碟 I/O 和執行效率之間的權衡。我們也在低維和高維向量工作負載上評估這兩種方法,因為維度會強烈影響距離計算的成本和儲存需求。
實驗設定
所有實驗都在單結點系統上進行,以隔離索引行為,避免網路或分散式系統效應的干擾。
硬體配置:
CPU:Intel® Xeon® Platinum 8375C CPU @ 2.90GHz
記憶體:速度: 3200 MT/秒, 類型:DDR4, 大小: 32 GB
磁碟:500 GB NVMe SSD
索引建立參數
{
"max_degree": 48,
"search_list_size": 100,
"inline_pq": 0/12/24/48, // AiSAQ only
"pq_code_budget_gb_ratio": 0.125,
"search_cache_budget_gb_ratio": 0.0,
"build_dram_budget_gb": 32.0
}
查詢參數
{
"k": 100,
"search_list_size": 100,
"beamwidth": 8
}
基準方法
DISKANN 和 AISAQ 都使用 Milvus 使用的開放原始碼向量搜尋引擎Knowhere 進行測試。本次評估使用了兩個資料集:
SIFT128D (1M 向量):著名的 128 維基準,常用於影像描述符搜尋。(原始資料集大小 ≈ 488 MB)
Cohere768D (1M vectors):一個 768 維嵌入集,典型用於基於轉換器的語意搜尋。(原始資料集大小 ≈ 2930 MB)
這些資料集反映了兩個截然不同的真實世界情境:小巧的視覺特徵和大型的語意嵌入。
結果
Sift128D1M (全向量 ~488MB)
Cohere768D1M (完整向量 ~2930MB)
分析結果
SIFT128D 資料集
在 SIFT128D 資料集上,當所有 PQ 資料都內嵌到單一 4 KB SSD 頁面時 (INLINE_PQ = 48),AISAQ 的效能可媲美 DISKANN。在此配置下,搜尋過程中所需的每項資訊都是共址的:
全向量:512B
鄰居列表:48 × 4 + 4 = 196B
鄰居的 PQ 代碼:48 × (512B × 0.125) ≈ 3072B
總計:3780B
由於整個節點可容納在一個頁面內,因此每次存取只需要一次 I/O,而且 AISAQ 可避免隨機讀取外部 PQ 資料。
然而,當只有部分 PQ 資料內嵌時,其餘的 PQ 代碼必須從磁碟上的其他地方取得。這會引入額外的隨機 I/O 作業,大幅增加 IOPS 需求,導致效能大幅下降。
Cohere768D 資料集
在 Cohere768D 資料集上,AISAQ 的效能比 DISKANN 差。原因是 768 維向量根本無法放入一個 4 KB 的 SSD 頁面:
完整向量:3072B
鄰居列表:48 × 4 + 4 = 196B
鄰居的 PQ 代碼:48 × (3072B × 0.125) ≈ 18432B
總計:21,700 B (≈ 6 頁)
在這種情況下,即使所有 PQ 代碼都內嵌,每個節點仍會跨越多個頁面。雖然 I/O 作業的次數保持一致,但每次 I/O 必須傳輸更多資料,因此 SSD 頻寬的消耗速度會更快。一旦頻寬成為限制因素,AISAQ 就無法跟上 DISKANN 的步伐,尤其是在高維工作負載上,每個節點的資料足跡會快速增加。
請注意:
AISAQ 的儲存配置通常會將磁碟上的索引大小增加4 到 6 倍。這是刻意權衡的結果:全向量、鄰接列表和 PQ 代碼都集中在磁碟上,以便在搜尋時進行有效率的單頁存取。雖然這會增加 SSD 的使用量,但磁碟容量比 DRAM 便宜得多,而且在大量資料時更容易擴充。
實際上,使用者可透過調整INLINE_PQ 和 PQ 壓縮比率來調整這種取捨。這些參數可根據工作負載需求,平衡搜尋效能、磁碟佔用空間和整體系統成本,而不是受限於固定的記憶體限制。
結論
現代硬體的經濟效益正在改變。DRAM 價格居高不下,而固態硬碟機的效能卻突飛猛進 -CIe 5.0 硬碟機現在的頻寬已超過14 GB/秒。因此,將搜索關鍵資料從昂貴的 DRAM 轉移到更經濟實惠的 SSD 儲存的架構,正變得越來越有吸引力。固態硬碟機容量的每 GB成本不到DRAM 的30 倍,這些差異不再是微不足道,而是會影響系統設計。
AISAQ 反映了這一轉變。AISAQ 不需要大量永遠開啟的記憶體分配,因此向量搜尋系統可以根據資料大小和工作負載需求而非 DRAM 限制進行擴充。此方法符合「全儲存」架構的大趨勢,在此架構中,快速固態硬碟機不僅在持久性方面扮演核心角色,在主動運算和搜尋方面也是如此。AiSAQ 提供效能與規模兩種作業模式,可滿足語意搜尋 (需要最低延遲) 與 RAG (需要極高規模,但延遲適中) 的需求。
這種轉變不太可能僅限於向量資料庫。類似的設計模式已經出現在圖表處理、時序分析,甚至是傳統關係系統的某些部分,因為開發人員重新思考長久以來的假設:資料必須存放在何處才能達到可接受的效能。隨著硬體經濟的持續發展,系統架構也會跟著改變。
有關本文所討論設計的詳細資訊,請參閱說明文件:
對最新 Milvus 的任何功能有問題或想要深入瞭解?加入我們的 Discord 頻道或在 GitHub 上提出問題。您也可以透過 Milvus Office Hours 預約 20 分鐘的一對一課程,以獲得深入的了解、指導和問題解答。
進一步了解 Milvus 2.6 功能
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word



