選擇一種優化向量儲存與處理的方法

Note

Azure AI 搜尋服務 可透過 Azure 入口網站REST APIAzure SDK 取得。 它同時也是 Foundry IQ 的基礎,這是一個管理式知識層,能將企業內容轉化為可重複使用、權限感知的知識庫,供 Microsoft Foundry 入口網站中的代理使用。

嵌入,或異質內容的數值表示,是向量搜尋工作負載的基礎。 然而,嵌入尺寸使其難以放大且處理成本高昂。 大量的研究與產品化已產生多種解決方案,以提升規模化並縮短處理時間。 Azure AI 搜尋服務 利用多項這些功能,提供更快速且更便宜的向量工作負載。

本文涵蓋了 Azure AI 搜尋服務 中所有能幫助你減少向量大小與查詢處理時間的優化技巧。

你可以在搜尋索引的向量場定義中指定向量優化設定。 本文描述的大多數功能通常可在 latest stable REST API 版本及針對該版本的Azure SDK套件中提供。

評估各種選項

檢視 Azure AI 搜尋服務 中減少向量場儲存空間的方法。 這些方法並不互斥,因此你可以將它們結合起來,最大化 向量大小的縮減。

我們推薦內建量化,因為它能以最小的努力壓縮記憶體 磁碟上的向量大小。 這種做法在大多數情況下往往能帶來最大的效益。 相較之下,窄型類型(除了 float16)需要特別努力才能建立,而 stored 在磁碟儲存空間上的花費較少,並且磁碟儲存成本不像記憶體那麼昂貴。

方法 為什麼要用這種方法
加入純量或二元量化 將原生 float32 或 float16 內嵌壓縮為 int8 (純量) 或 byte (二進位)。 此選項可減少記憶體與磁碟儲存空間,且不影響查詢效能。 較小的資料型態,如 int8 或 byte,所產生的向量索引,其內容豐富度較低,相較之下,較大的嵌入則提供更豐富的內容。 為了抵銷資訊損失,內建壓縮機制包含了在查詢後處理過程中使用未壓縮的嵌入和過取樣的選項,以回傳更相關的結果。 重新排序與過取樣是 float32 或 float16 欄位內建量化的特性,無法用於經過自訂量化的嵌入。
為支援 MRL 的 text-embedding-3 模型截斷維度 在文字嵌入三號模型上使用較少的維度。 在 Azure OpenAI 上,這些模型會以 Matryoshka Representation Learning (MRL) 技術重新訓練,該技術會在不同壓縮層級產生多個向量表示法。 此方法能加快搜尋速度並降低儲存成本,且語意資訊損失最小。 在 Azure AI 搜尋服務 中,MRL 支援補充純量與二元量化。 使用任一量化方法時,你也可以在向量場上指定 truncateDimension 屬性,降低文字嵌入的維度。
將較小的原始資料型態指派給向量場 狹窄的資料型態,如 float16、int16、int8 和位元組(二進位),在記憶體和磁碟上佔用的空間都更少。 不過,你必須有一個嵌入模型,能以狹窄的資料格式輸出向量。 或者,你必須有自訂的量化邏輯,輸出小資料。 第三種需要較少精力的使用情境是將大多數模型產生的原生 float32 嵌入轉換為 float16。 關於二元向量的資訊,請參見 索引二元向量
取消可檢索向量的選擇性儲存 查詢回應中回傳的向量會與查詢執行時使用的向量分開儲存。 如果你不需要檢索向量,可以關閉可檢索儲存,將每個欄位的整體磁碟儲存量減少多達 50%。

在一個空的索引上定義所有這些選項。 要實作其中任何一個,請使用 Azure 入口網站、REST API,或針對該 API 版本的 Azure SDK 套件。

定義好索引後,你可以將文件載入並索引為獨立步驟。

範例:向量壓縮技術下的向量大小

Vector quantization and storage options using Python 是一個 Python 範例程式碼,能建立多個搜尋索引,這些索引會依向量儲存量化的使用、窄數據類型 以及 儲存屬性 而有所不同。

此程式碼會為每個向量儲存優化選項建立並比較儲存與向量索引大小。 從這些結果可見, 量化 最大程度地減少向量大小,但使用多種選項能達成最大的儲存節省。

索引名稱 儲存空間 向量大小
壓縮測試基準線 21.3613 MB 4.8277 MB
壓縮測試-標量壓縮 17.7604 MB 1.2242 MB
compressiontest-narrow 16.5567 MB 2.4254 MB
壓縮測試-無儲存 10.9224 MB 4.8277 MB
壓縮測試-所有選項 4.9192 MB 1.2242 MB

Search Service REST API 在索引層級報告儲存和向量大小,所以你必須比較索引,而不是欄位。 使用 Indexes - Get Statistics(REST API)或Azure SDK中等效的 API 來取得向量大小。