GPU 索引概述
在 Milvus 中建立支援 GPU 的索引,可以大幅提升高吞吐量和高召回情境下的搜尋效能。
下圖比較了不同索引配置、硬體設定、向量資料集(Cohere 和 OpenAI)和搜尋批次大小的查詢吞吐量(每秒查詢次),顯示GPU_CAGRA 的表現持續優於其他方法。
GPU 索引效能
為 Milvus 設定 GPU 記憶池
Milvus 支援全域 GPU 記憶體池並在Milvus 配置檔中提供兩個配置參數initMemSize 和maxMemSize 。
gpu:
initMemSize: 0 # set the initial memory pool size.
maxMemSize: 0 # sets the maximum memory usage limit. When the memory usage exceeds initMemSize, Milvus will attempt to expand the memory pool.
當 Milvus 啟動時,預設的initMemSize 通常是一半的 GPU 記憶體,而maxMemSize 則預設為整個 GPU 記憶體。GPU 記憶池大小初始設定為initMemSize ,並會視需要自動擴充至maxMemSize 。
當指定啟用 GPU 的索引時,Milvus 會在搜尋之前將目標集合資料載入 GPU 記憶體,因此maxMemSize 必須至少是資料大小。
限制
對於
GPU_IVF_FLAT,limit的最大值是 1,024 。對於
GPU_IVF_PQ和GPU_CAGRA,limit的最大值為 1,024。雖然
limit沒有設定GPU_BRUTE_FORCE,但建議不要超過 4,096 以避免潛在的效能問題。目前,GPU 索引不支援
COSINE距離。如果需要COSINE距離,應先將資料規格化,然後再使用內積 (IP) 距離作為替代。不完全支援 GPU 索引的載入 OOM 保護,太多資料可能會導致 QueryNode 當機。
支援的 GPU 索引類型
下表列出 Milvus 支援的 GPU 索引類型。
索引類型 |
說明 |
記憶體使用量 |
|---|---|---|
GPU_CAGRA 是針對 GPU 最佳化的圖形索引,使用推理等級的 GPU 來執行 Milvus GPU 版本比使用昂貴的訓練等級 GPU 更具成本效益。 |
記憶體使用量約為原始向量資料的 1.8 倍。 |
|
GPU_IVF_FLAT 是最基本的 IVF 索引,每個單元儲存的編碼資料與原始資料一致。在進行搜尋時,請注意您可以針對 GPU_IVF_FLAT 索引的資料集,將任何搜尋的 top-k ( |
需要相等於原始資料大小的記憶體。 |
|
GPU_IVF_PQ 會在量化向量的乘積之前執行 IVF 索引聚類。進行搜尋時,請注意您可以針對 GPU_IVF_FLAT 索引集合的任何搜尋,將 top-k ( |
利用較小的記憶體佔用空間,這取決於壓縮參數的設定。 |
|
GPU_BRUTE_FORCE 專為需要極高召回率的情況量身打造,透過將每個查詢與資料集中的所有向量進行比較,保證召回率為 1。它只需要度量類型 ( |
需要與原始資料大小相等的記憶體。 |
為 GPU 記憶體控制配置 Milvus 設定
Milvus 使用全局圖形記憶體池來分配 GPU 記憶體。它在Milvus 配置檔中支援兩個參數initMemSize 和maxMemSize 。記憶體池大 小初始設定為initMemSize ,超過此限制後會自動擴充至maxMemSize 。
當 Milvus 啟動時,預設的initMemSize 是可用 GPU 記憶體的 1/2,而預設的maxMemSize 是等於所有可用的 GPU 記憶體。
在 Milvus 2.4.1 之前,Milvus 使用統一的 GPU 記憶池。對於 2.4.1 之前的版本,建議將這兩個值都設定為 0。
gpu:
initMemSize: 0 #set the initial memory pool size.
maxMemSize: 0 #maxMemSize sets the maximum memory usage limit. When the memory usage exceed initMemSize, Milvus will attempt to expand the memory pool.
從 Milvus 2.4.1 起,GPU 記憶體池僅在搜尋時用於臨時 GPU 資料。因此,建議將其設定為 2048 和 4096。
gpu:
initMemSize: 2048 #set the initial memory pool size.
maxMemSize: 4096 #maxMemSize sets the maximum memory usage limit. When the memory usage exceed initMemSize, Milvus will attempt to expand the memory pool.
要瞭解如何建立 GPU 索引,請參閱各索引類型的特定指南。
常見問題
何時適合使用 GPU 索引?
GPU 索引特別適用於需要高吞吐量或高召回率的情況。例如,在處理大量批次時,GPU 索引的吞吐量可比 CPU 索引高出 100 倍之多。在批次較小的情況下,GPU 索引在效能上仍遠遠優於 CPU 索引。此外,如果需要快速插入資料,整合 GPU 可大幅加快建立索引的過程。
GPU 索引(如 GPU_CAGRA、GPU_IVF_PQ、GPU_IVF_FLAT 和 GPU_BRUTE_FORCE)最適合哪些應用場景?
GPU_CAGRAindexes are ideal for scenarios that demand enhanced performance, albeit at the cost of consuming more memory.對於以節省記憶體為優先考量的環境,GPU_IVF_PQ索引可幫助將儲存需求降至最低,儘管這會帶來較高的精確度損失。GPU_IVF_FLAT索引是一個平衡的選擇,在效能與記憶體使用量之間取得折衷。最後,GPU_BRUTE_FORCE索引專為徹底搜尋作業而設計,透過執行遍歷搜尋,保證召回率為 1。