調整 ScaNN 索引的最佳做法

選取說明文件版本:

本頁提供建議,說明如何調整 AlloyDB Omni 索引參數,在召回率和每秒查詢次數之間取得最佳平衡。可擴充最鄰近 (ScaNN) 索引的建議參數會因您選擇建立兩層或三層樹狀索引而異。

建立 ScaNN 索引

詳情請參閱 ScaNN 索引參考資料

兩層樹狀結構索引

如要套用建議,協助您找出資料集的最佳 num_leavesnum_leaves_to_search 值,請按照下列建議步驟操作:

  1. 如要建立針對下列情況最佳化的 ScaNN 索引,請將 num_leaves 參數設為下列值,其中 rows 是索引資料表中的資料列數:
    • 兼顧索引建構時間和品質:將 num_leaves 設為 sqrt(rows)
    • 品質:將 num_leaves 設為 rows/100。
  2. 執行測試查詢,並提高 scann.num_of_leaves_to_search 的值,直到達到目標召回率範圍 (例如 95%) 為止。如要進一步瞭解如何分析查詢,請參閱「分析查詢」。
  3. 請記下 scann.num_leaves_to_searchnum_leaves 之間的比例,後續步驟會用到。這個比率會提供資料集的近似值,協助您達成目標召回率。

    如果您使用高維度向量 (500 個維度以上),且想提高召回率,請嘗試調整 scann.pre_reordering_num_neighbors 的值。預設值會設為 500 * K 值,其中 K 是您在查詢中設定的限制。
  4. 如果查詢達到目標召回率後,QPS 仍過低,請按照下列步驟操作:
    1. 重新建立索引,並根據下列指引增加 num_leavesscann.num_leaves_to_search 的值:
      • num_leaves 設為大於列數平方根的因數。舉例來說,如果索引的 num_leaves 設為資料列數的平方根,請嘗試將其設為平方根的兩倍。如果值已是兩倍,請嘗試將值設為平方根的三倍。
      • 視需要增加 scann.num_leaves_to_search,以維持與 num_leaves 的比例 (您在步驟 3 中記下)。
      • num_leaves 設為小於或等於資料列數除以 100 的值。
    2. 再次執行測試查詢。 執行測試查詢時,請嘗試降低 scann.num_leaves_to_search,找出可提高每秒查詢次數,同時維持高召回率的值。嘗試使用不同的 scann.num_leaves_to_search 值,不必重建索引。
  5. 重複步驟 4,直到 QPS 和召回範圍都達到可接受的值。

三層樹狀結構索引

除了兩層樹狀結構 ScaNN 索引的建議外,請使用下列指引。

如要套用建議,找出 num_leavesmax_num_levels 索引參數的最佳值,請按照下列步驟操作:

  1. 根據成效目標,使用下列 num_leavesmax_num_levels 組合建立 ScaNN 索引:

    • 平衡索引建構時間和品質:將 max_num_levels 設為 2,並將 num_leaves 設為 power(rows, ⅔)
    • 最佳化品質:將 max_num_levels 設為 2,並將 num_leaves 設為 rows/100
  2. 執行測試查詢。如要進一步瞭解如何分析查詢,請參閱「分析查詢」。

  3. 請記下 scann.num_leaves_to_searchnum_leaves 之間的比例,後續步驟會用到。這個比率會提供資料集的近似值,有助於您達成目標召回率。

如果您處理的是高維度向量 (500 個維度以上),且想提高召回率,請嘗試調整 scann.pre_reordering_num_neighbors 的值。預設值會設為 500 * K 值,其中 K 是您在查詢中設定的限制。

  1. 如果查詢達到目標召回率後,QPS 仍過低,請按照下列步驟操作:

    • 重新建立索引,並根據下列指引增加 num_leavesscann.num_leaves_to_search 的值:
    • num_leaves 設為 power(rows, ⅔) 的較大因數。舉例來說,如果索引的 num_leaves 設為 power(rows, ⅔),請嘗試將其設為 power(rows, ⅔) 的兩倍。如果值已加倍,請試著將 power(rows, ⅔) 設為三倍。
    • 視需要增加 scann.num_leaves_to_search,以維持與 num_leaves 的比例 (您在步驟 3 中記下)。
    • num_leaves 設為小於或等於 rows/100 的值。
    • 再次執行測試查詢。執行測試查詢時,請嘗試降低 scann.num_leaves_to_search,找出可提高每秒查詢次數,同時維持高召回率的值。嘗試使用不同的 scann.num_leaves_to_search 值,不必重建索引。
  2. 重複步驟 4,直到 QPS 和召回範圍都達到可接受的值。

索引維護作業

如果表格經常更新或插入資料,建議您定期重新為現有 ScaNN 索引建立索引,以提高召回準確度。 您可以監控索引指標,查看索引建構後向量分布或向量突變的變化,然後據此重新建立索引。如要進一步瞭解指標,請參閱「向量索引指標」。

後續步驟