馬賽克 AI 向量搜尋是專為快速、可調整的擷取所建置。 向量搜尋效能取決於許多因素,包括 SKU 選擇、索引大小、查詢類型、向量維度、驗證方法,以及您的應用程式如何處理流量尖峰。 大部分的工作負載都表現良好,但針對您需要調整或優化延遲的情況,本指南會提供實用的秘訣和常見模式,以協助您設定系統以獲得最佳向量搜尋效能。
影響效能的因數
效能不是單一數位, 這是一個範圍,取決於工作負載特性、組態選擇和用戶端實作。 本指南旨在協助您建置清楚的心理模型,說明效能的運作方式,讓您可以更有效地使用馬賽克 AI 向量搜尋。
以下是影響系統運作方式的重要因素:
- SKU 選擇:標準或記憶體優化。
- 索引大小:儲存的向量數目。
- 內嵌大小:通常是 384–1536。
- 查詢類型:近似近鄰 (ANN) 或混合式。
- 要求的結果數目:較高的值會增加擷取時間。
- 內嵌類型:受控或自我管理。
- 查詢負載:一段時間后,有多少流量會叫用端點。
- 驗證方法:您的應用程式如何連線到 Databricks。
本文的其餘部分提供微調每個變數的實際秘訣,並說明它們如何影響真實世界部署中的搜尋延遲和查詢輸送量。
挑選正確的 SKU
馬賽克 AI 向量搜尋提供兩個 SKU,其設計目的是根據工作負載來平衡延遲、延展性和成本效益。 為您的應用程式選擇正確的 SKU 是第一個調整效能的槓桿。
通常:
- 當延遲很重要,且您的索引遠低於 320M 向量時,請選擇標準端點。
- 當您使用 10M+ 向量時,請選擇記憶體優化的端點、可以容忍一些額外的延遲,而且需要每個向量更高的成本效益(最高成本 7 倍)。
下表顯示一些預期的效能指導方針。
| SKU | 延遲 | QPS | 索引容量 | 向量搜尋單位 (VSU) 大小 |
|---|---|---|---|---|
| 標準 | 20–50 毫秒 | 30–200+ | 320M 向量 | 2M 向量 |
| 記憶體優化 | 300–500 毫秒 | 30–50 | 1B 向量 | 64M 向量 |
了解索引大小
當您的索引符合單一向量搜尋單位時,效能最高,且額外空間可處理額外的查詢負載。 當工作負載調整超過單一向量搜尋單位時(也就是標準向量 2M+ 向量或 64M+ 以用於儲存優化),延遲增加並關閉 QPS 點選。 最後,QPS 在大約 30 個 QPS (ANN) 上高原。
效能取決於每個工作負載特有的許多因素,例如查詢模式、篩選、向量維度和並行。 下列數位是參考點。
| SKU | Vectors | 尺寸 | 延遲 | QPS | 每月查詢 |
|---|---|---|---|---|---|
| 標準 | 10K | 768 | 20 毫秒 | 200+ | 500M+ |
| 10M | 768 | 40 毫秒 | 30 | 78M | |
| 100M | 768 | 50 毫秒 | 30 | 78M | |
| 記憶體優化 | 10M | 768 | 300 毫秒 | 50 | 130M |
| 100M | 768 | 400 毫秒 | 40 | 100M | |
| 1B | 768 | 500 毫秒 | 30 | 78M |
最小化內嵌大小
向量維度是指每個向量中的特徵數目。 一般值為 384、768、1024 或 1536。 較高的維度提供更具表現力的表示法,可改善品質,但會產生計算成本。 較低維度向量在擷取期間需要較少的計算,這可轉譯成更快的查詢時間和更高的QPS。 相反地,高維度向量會增加計算負載並減少輸送量。
一般規則是選擇最小維度,以保留使用案例的擷取品質。
例如,根據索引大小和查詢模式,將維度減少為 2 倍(例如,從 768 到 384)通常會將 QPS 改善約 1.5 倍,並將延遲減少約 20%。 這些收益在非常低的維度進一步增加。 例如,相較於數據表中顯示的768維度基準檢驗,使用64維度向量可提供大幅更高的QPS和明顯較低的延遲。 這讓 384 個維度和以下維度特別吸引高輸送量、延遲敏感的使用案例,只要擷取品質仍可接受。
使用 ANN 提高效率,並在必要時使用混合式
盡可能使用 ANN 查詢。 它們是最有計算效率且支援最高的 QPS。
必要時使用混合式搜尋。 混合式搜尋可改善某些應用程式中的召回率,尤其是網域特定關鍵詞很重要的地方。 混合式搜尋通常會使用與 ANN 一樣多的兩倍資源,而且可以大幅降低輸送量。
使用 10–100 個結果
每個查詢都包含參數 num_results ,這是要傳回的搜尋結果數目。 此值直接影響效能。 擷取更多結果需要更深入的索引掃描,這會增加延遲並減少QPS。 效果在較高的值上會變得更重要。 例如,增加 num_results 10 倍可能會增加查詢延遲,並根據索引大小和組態,將 QPS 容量減少 3 倍。
最佳做法是,除非您的應用程式特別需要更多,否則請保持在 num_results 10-100 的範圍內。 使用實際查詢來嘗試不同的 num_results 值,以瞭解對工作負載的影響。
避免針對生產環境調整為零
向量搜尋支援兩種具有不同效能取捨的內嵌類型。
受控內嵌是最方便的。 使用 Managed 內嵌,Databricks 會自動為您的數據列和查詢產生內嵌。 在查詢時,查詢文字會傳遞至服務端點的模型,以產生內嵌,這會增加延遲。 如果內嵌模型是外部的,它也會帶來額外的網路負荷。
自我管理內嵌可讓您事先計算內嵌,並在查詢時間直接傳遞向量。 這可避免產生運行時間,並啟用最快的擷取。 本文中包含的所有效能號碼都是以自我管理內嵌為基礎。
針對實時生產使用案例,請避免調整為零的模型端點。 冷啟動可能會延遲幾分鐘的回應,甚至會在查詢到達時造成失敗。
規劃查詢尖峰
本節描述流量增加的情況,以及如何保持在觸發延遲尖峰或 429 個錯誤(太多要求)的重要限制之下。
當負載適中時,延遲會保持低,當您接近最大QPS容量時,會逐漸增加。 當系統達到 100% QPS 容量時,就會開始傳回 429 錯誤。 如果您尚未設定適當的輪詢,應用程式可能會變得沒有回應。
429 錯誤可作為保護系統的安全機制。 它們會指示用戶端稍後回復並重試,讓端點保持狀況良好且回應,即使在突然的流量尖峰下也是如此。
最佳做法是使用 向量搜尋 Python SDK,其中包含內建輪詢和重試處理。
如果您使用 REST API,請使用抖動來實作指數輪詢。 請參閱 Azure 反模式。
搭配 OAuth 令牌使用服務主體
使用有效率的驗證方法獲得最佳效能。 Databricks 建議在所有生產環境中 搭配 OAuth 令牌使用服務主體 。 OAuth 存取令牌可提供更高的安全性,並利用網路優化的基礎結構,讓系統以完整容量運作。
避免使用個人存取令牌 (PAT),因為它們引進網路額外負荷、新增數百毫秒的延遲,並大幅減少端點可維持的 QPS。
使用 Python SDK
使用最新版本的 Python SDK,以受益於內建效能和可靠性優化。
跨查詢重複使用索引物件。 避免在每個要求中呼叫 client.get_index(...).similarity_search(...) ,因為此模式會增加不必要的延遲。
請改為初始化索引一次,並重複使用它:
# Initialize once
index = client.get_index(...)
# Then use it for every query
index.similarity_search(...)
在 MLFlow 環境中使用向量搜尋索引時,這很重要,您可以在端點初始化時建立索引對象,然後針對每個查詢重複使用它。
本指南特別有助於即時、區分延遲的應用程式。 在具有多個索引或 代表使用者授權 流程的 RAG 設定中,索引選取或認證僅在查詢時可用,因此初始化索引物件一次可能不可行。 在這些案例中,不需要此最佳化。
跨端點平行處理
Databricks 建議探索下列策略,以增加系統中的 QPS 總數:
- 跨端點分割索引。 如果您有多個索引,每個索引都會收到相當一部分的流量,請在不同的端點上裝載它們,以達到更高的總頻寬。
- 跨端點複寫索引。 如果大部分的流量達到單一索引,請在多個端點之間複製它。 在用戶端層級平均分割流量,以取得線性 QPS 收益。
利用負載測試來確保端點大小正確
負載測試會衡量向量搜尋端點在不同流量層級下的表現,模擬真實世界的使用情況,並幫助你正確調整端點規模以符合生產需求。 請參閱 「為向量搜尋端點配置負載測試 」,了解如何建立及執行負載測試。