跳到主要內容
AI News HubLIVE
站內改寫2 分鐘閱讀

什麼是向量量化?

文章摘要

向量量化是一種用於壓縮高維資料的技術,透過減少記憶體佔用同時保留關鍵資訊,實現更高效的儲存和搜尋。本文介紹了三種主要的量化方法:標量量化、二進位制量化和乘積量化,並討論瞭如何平衡精度、速度和壓縮率。

來源Qdrant Blog作者: [email protected] (Andrey Vasnetsov)
什麼是向量量化?
回報錯誤

更正管道尚未開通,可先複製下方文章資訊留存。

查看更正說明
直接讀正文

向量量化(Vector Quantization)是一種資料壓縮技術,旨在減小高維向量的儲存空間,同時儘可能保留重要資訊。在處理由OpenAI等嵌入模型生成的1536維向量時,單個向量需6KB記憶體;100萬個向量則需約6GB。隨著資料集增長至數百萬向量,記憶體和計算需求急劇增加。向量量化透過壓縮向量尺寸,有效降低記憶體佔用並加速搜尋操作。

HNSW索引的挑戰

HNSW(分層可導航小世界)索引透過分層圖結構連線每個向量到其最近鄰。插入新向量時,系統需確定其在圖中的位置,類似搜尋過程。這導致隨機讀取和順序遍歷的高成本,尤其在高維向量數量龐大時更為顯著。量化透過壓縮向量,使得這些操作更加高效。

標量量化(Scalar Quantization)

在Qdrant中,每個維度預設用float32表示(4位元組)。標量量化將向量值對映到int8範圍(1位元組,表示256個值),實現75%的記憶體縮減。例如,[-1.0,1.0]範圍內的值被線性對映到int8的[-128,127]。配置時需在建立集合時新增quantization_config,其中quantile引數(如0.99)排除最極端的1%值,以平衡精度。標量量化在提升速度和壓縮的同時,精度損失最小,適合大多數應用。

二進位制量化(Binary Quantization)

二進位制量化將向量轉換為二進位制表示(0或1),值大於零為1,否則為0。對於1536維向量,記憶體從6KB降至192位元組,實現32倍壓縮,且搜尋速度可提升40倍。Qdrant自動在索引過程中執行二進位制量化。此方法依賴最佳化的CPU指令(如XOR和Popcount)進行快速距離計算。相容模型包括OpenAI text-embedding-ada-002和Cohere embed-english-v2.0,建議至少1024維以獲得良好精度。雖然速度極快,但精度和模型相容性需透過過取樣和重打分技術來維持。

乘積量化(Product Quantization)

乘積量化透過將高維向量拆分為子向量,併為每個子向量建立碼本(codebook)實現壓縮。碼本中的中心點透過K-means聚類(K=256)確定。1024維向量原佔4096位元組,經乘積量化後僅需128位元組(128個索引,每個1位元組),壓縮比最高可達64倍。配置時需指定壓縮率(如x32)。需注意,高壓縮比可能導致精度下降,適合記憶體優先且精度容忍的應用。

重打分、過取樣與重排序

為彌補量化帶來的精度損失,Qdrant支援過取樣和重打分。首先使用量化向量進行初始搜尋,透過過取樣(如限制為4時,取樣因子2則檢索8個候選)擴大候選集。然後利用原始向量對候選集重打分,計算更精確的相似度。最後重排序確定最終top-K結果。這些技術可在保持速度的同時提升準確性。

磁碟與記憶體的資源分配

預設情況下,原始向量和量化向量均儲存在RAM中。為節省記憶體,可將原始向量移動至磁碟(on_disk=True),僅將量化向量保留在RAM。例如,配置binary quantizer並設定original vectors on_disk後,RAM僅儲存量化向量,大幅降低成本。注意,需顯式設定on_disk=True才能獲得RAM節省。

使用io_uring加速重打分

在Linux系統上,io_uring技術允許並行處理多個磁碟操作,顯著降低I/O開銷,尤其在重打分階段需頻繁讀取原始向量時。Qdrant透過配置storage: async_scorer: true啟用io_uring。這能有效提升磁碟上大規模資料集的搜尋效能。

效能對比與切換方法

Qdrant預設使用量化向量進行搜尋。可透過設定ignore: true臨時停用量化,比較結果差異。使用者可隨時修改或移除量化配置,而不影響原始向量。例如,從標量量化切換為二進位制量化,或完全停用量化。

總結

三種量化方法各有優劣:二進位制量化速度最快、最省記憶體,但需相容模型;標量量化精度損失小,是安全的預設選擇;乘積量化壓縮比最高,但精度和索引速度稍遜。根據應用需求,結合過取樣、重打分和io_uring等技術,可在速度、精度和成本間取得理想平衡。

展開要點與分析

文章情報

工程師進階

要點

  • 向量量化可顯著降低記憶體使用並提升搜尋速度,尤其適用於大規模資料集。
  • 標量量化將float32對映到int8,減少75%記憶體,是大多數應用的安全預設選擇。
  • 二進位制量化提供高達32倍壓縮和40倍加速,但需與相容模型(如OpenAI text-embedding-ada-002)搭配使用。
  • 乘積量化最高可實現64倍壓縮,但可能損失精度,適用於記憶體優先的場景。

要點與分析由自動化流程生成,可能有誤,請結合原始來源核實。