ScaNN 索引參考資料

本頁面提供 ScaNN 索引的參考資料。

調整參數

下列索引參數和資料庫標記會一併使用,以找出合適的召回率和 QPS 平衡點。

調整參數 說明 選項類型
max_num_levels K-means 分群樹的質心層級數量上限。
  • 兩層樹狀結構索引:預設為 1,適用於兩層樹狀結構 (1 個質心層級 + 底層葉節點層級)。
  • 三層樹狀結構索引:預設為三層樹狀結構 (2 個質心層級 + 底層葉節點層級) 設定 2
  • 如果向量資料列數超過 1 億列,請將值設為 2
  • 如果向量資料列數少於 1 千萬列,請將值設為 1
  • 如果向量列數介於 1 千萬到 1 億列之間,請設為 12,以最佳化索引建構時間 (設為 2) 或最佳化搜尋召回率 (設為 1)。
建立索引
(選用)
num_leaves 要套用至這個索引的分區數量。建立索引時套用的分區數量會影響索引效能。增加一組向量的分區數量,即可建立更精細的索引,進而提升查詢效能和召回率。不過,這樣會導致索引建立時間變長。

由於三層樹狀結構的建構速度比兩層樹狀結構快,因此建立三層樹狀結構索引時,您可以增加 num_leaves_value 來提升效能。
  • 兩層索引:將這個值設為 11048576 之間的任何值。

    如要建立索引,並在索引建構速度和搜尋效能之間取得平衡,請以 sqrt(ROWS) 做為起點,其中 ROWS 是向量資料列的數量。每個分區所含的向量數量會以
    ROWS/sqrt(ROWS) = sqrt(ROWS).

    計算。由於可以在向量列數少於 1 千萬的資料集上建立雙層樹狀結構索引,因此每個分區所含的向量數量會少於 (sqrt(10M)) 個,也就是 3200 個向量。為獲得最佳向量搜尋品質,建議盡量減少每個分割區中的向量數量。建議每個分區約有 100 個向量,因此請將 num_leaves 設為 ROWS/100。如果您有 1 千萬個向量,請將 num_leaves 設為 100,000。
  • 三層索引:將這個值設為 11048576 之間的任何值。

    如果不確定要選取哪個確切值,請使用 power(ROWS, 2/3) 做為起點,其中 ROWS 是向量列數。每個分區所含的向量數量會由
    ROWS/power(ROWS, 2/3) = power(ROWS, 1/3).

    計算。由於您可以在向量列超過 1 億的資料集上建立三層樹狀索引,因此每個分區會包含超過
    (power(100M, 1/3)) 個向量,也就是 465 個向量。為獲得最佳向量搜尋品質,建議盡量減少每個分割區中的向量數量。建議每個分區約有 100 個向量,因此請將 num_leaves 設為 ROWS/100。如果您有 1 億個向量,請將 num_leaves 設為 100 萬。
建立索引
(必填)
quantizer 您想用於 K 平均值樹狀結構的量化器類型。預設值為 SQ8,可提供更優異的查詢效能,同時將喚回率損失降到最低 (通常低於 1-2%)。

如需 99% 以上的喚回率,請設為 FLAT
建立索引
(選用)
scann.enable_inline_filtering 支援內建篩選功能,可查詢資料並直接在向量相似度搜尋作業中套用篩選條件。這些向量相似度查詢會對相同資料庫表格使用篩選器,並在計算距離以找出最鄰近項目時,完成篩選器評估。這個選項預設為停用。

如要啟用內嵌篩選功能,請將這個參數設為 true。如果發現效能變差,請設為 false

這個選項適用於預先發布版
查詢執行階段
(選用)
scann.enable_pca 啟用主成分分析 (PCA),這是一種降維技術,可盡可能自動縮減嵌入的大小。這個選項預設為啟用。

如果發現召回率下降,請設為 false
建立索引
(選用)
scann.num_leaves_to_search 這個資料庫標記可控制要搜尋的分葉或分割區絕對數量,讓您在召回率和 QPS 之間取捨。預設值為 num_leaves 中設定值的 1%。

值越高,喚回度就越好,但 QPS 會降低。同樣地,如果值較低,喚回度就會較低,但 QPS 會較高。
查詢執行階段
(選用)
scann.pre_reordering_num_neighbors 設定資料庫標記後,系統會在初始搜尋找出候選項目後,於重新排序階段考慮指定數量的候選鄰點。將這個參數設為大於查詢要傳回的鄰居數。

值越高,喚回度就越好,但 QPS 會越低。將這個值設為 0,即可停用重新排序功能。如果建立索引時未啟用 PCA,則預設值為 0。否則預設值為 50 x K,其中 K 是查詢中指定的 LIMIT。
查詢執行階段
(選用)
scann.num_search_threads 多執行緒搜尋的搜尋者執行緒數量。在對延遲時間較為敏感的應用程式中,使用多個執行緒進行 ScaNN ANN 搜尋,有助於縮短單一查詢的延遲時間。如果資料庫已受 CPU 限制,這項設定不會改善單一查詢延遲。預設值為 2 查詢執行階段
(選用)

後續步驟