Praktik terbaik untuk menyesuaikan indeks ScaNN

Pilih versi dokumentasi:

Halaman ini memberikan rekomendasi tentang cara menyesuaikan parameter indeks AlloyDB Omni untuk mendapatkan keseimbangan optimal antara recall dan QPS. Parameter yang direkomendasikan untuk indeks Scalable Nearest Neighbor (ScaNN) berbeda-beda, bergantung pada apakah Anda memilih untuk membuat indeks hierarki dua tingkat atau tiga tingkat.

Pembuatan indeks ScaNN

Untuk mengetahui informasi selengkapnya, lihat referensi Indeks ScaNN.

Indeks hierarki dua tingkat

Untuk menerapkan rekomendasi yang membantu Anda menemukan nilai optimal num_leaves dan num_leaves_to_search untuk set data Anda, ikuti langkah-langkah yang direkomendasikan berikut:

  1. Untuk membuat indeks ScaNN yang dioptimalkan untuk kasus berikut, tetapkan parameter num_leaves ke nilai berikut, dengan baris adalah jumlah baris dalam tabel yang diindeks:
    • waktu dan kualitas build indeks yang seimbang tetapkan num_leaves ke sqrt(rows).
    • kualitas tetapkan num_leaves ke rows/100.
  2. Jalankan kueri pengujian Anda, dengan meningkatkan nilai scann.num_of_leaves_to_search, hingga Anda mencapai rentang recall target, misalnya, 95%. Untuk mengetahui informasi selengkapnya tentang cara menganalisis kueri, lihat Menganalisis kueri.
  3. Catat rasio antara scann.num_leaves_to_search dan num_leaves yang akan digunakan pada langkah berikutnya. Rasio ini memberikan perkiraan di sekitar set data yang akan membantu Anda mencapai recall target.

    Jika Anda menggunakan vektor dimensi tinggi (500 dimensi atau lebih tinggi) dan ingin meningkatkan recall, coba sesuaikan nilai scann.pre_reordering_num_neighbors. Nilai default ditetapkan ke nilai 500 * K dengan K adalah batas yang Anda tetapkan dalam kueri.
  4. Jika QPS Anda terlalu rendah setelah kueri mencapai recall target, ikuti langkah-langkah berikut:
    1. Buat ulang indeks, dengan meningkatkan nilai num_leaves dan scann.num_leaves_to_search sesuai dengan panduan berikut:
      • Tetapkan num_leaves ke faktor yang lebih besar dari akar kuadrat jumlah baris Anda. Misalnya, jika indeks memiliki num_leaves yang ditetapkan ke akar kuadrat jumlah baris Anda, coba tetapkan ke dua kali akar kuadrat. Jika nilainya sudah dua kali lipat, coba tetapkan ke tiga kali akar kuadrat.
      • Tingkatkan scann.num_leaves_to_search sesuai kebutuhan untuk mempertahankan rasionya dengan num_leaves, yang Anda catat di Langkah 3.
      • Tetapkan num_leaves ke nilai yang kurang dari atau sama dengan jumlah baris dibagi 100.
    2. Jalankan kembali kueri pengujian. Saat menjalankan kueri pengujian, lakukan eksperimen dengan mengurangi scann.num_leaves_to_search, temukan nilai yang meningkatkan QPS sekaligus mempertahankan recall Anda tetap tinggi. Coba nilai scann.num_leaves_to_search yang berbeda tanpa membangun ulang indeks.
  5. Ulangi Langkah 4 hingga QPS dan rentang recall mencapai nilai yang dapat diterima.

Indeks hierarki tiga tingkat

Selain rekomendasi untuk indeks ScaNN hierarki dua tingkat, gunakan panduan berikut.

Untuk menerapkan rekomendasi guna menemukan nilai optimal parameter indeks num_leaves dan max_num_levels, ikuti langkah-langkah berikut:

  1. Buat indeks ScaNN dengan kombinasi num_leaves dan max_num_levels berikut berdasarkan sasaran performa Anda:

    • waktu &kualitas build indeks yang seimbang: Tetapkan max_num_levels sebagai 2 dan num_leaves sebagai power(rows, ⅔).
    • optimalkan kualitas: Tetapkan max_num_levels sebagai 2 dan num_leaves sebagai rows/100.
  2. Jalankan kueri pengujian Anda. Untuk mengetahui informasi selengkapnya tentang cara menganalisis kueri, lihat Menganalisis kueri.

  3. Catat rasio antara scann.num_leaves_to_search dan num_leaves yang akan digunakan pada langkah berikutnya. Rasio ini memberikan perkiraan di sekitar set data yang akan membantu Anda mencapai recall target.

Jika Anda menggunakan vektor dimensi tinggi (500 dimensi atau lebih tinggi) dan ingin meningkatkan recall, coba sesuaikan nilai scann.pre_reordering_num_neighbors. Nilai default ditetapkan ke nilai 500 * K dengan K adalah batas yang Anda tetapkan dalam kueri.

  1. Jika QPS Anda terlalu rendah setelah kueri mencapai recall target, ikuti langkah-langkah berikut:

    • Buat ulang indeks, dengan meningkatkan nilai num_leaves dan scann.num_leaves_to_search sesuai dengan panduan berikut:
    • Tetapkan num_leaves ke faktor yang lebih besar dari power(rows, ⅔). Misalnya, jika indeks memiliki num_leaves yang ditetapkan ke power(rows, ⅔), coba tetapkan ke dua kali power(rows, ⅔). Jika nilainya sudah dua kali lipat, coba tetapkan ke tiga kali power(rows, ⅔).
    • Tingkatkan scann.num_leaves_to_search sesuai kebutuhan untuk mempertahankan rasionya dengan num_leaves, yang Anda catat di Langkah 3.
    • Tetapkan num_leaves ke nilai yang kurang dari atau sama dengan rows/100.
    • Jalankan kembali kueri pengujian. Saat menjalankan kueri pengujian, lakukan eksperimen dengan mengurangi scann.num_leaves_to_search, temukan nilai yang meningkatkan QPS sekaligus mempertahankan recall Anda tetap tinggi. Coba nilai scann.num_leaves_to_search yang berbeda tanpa membangun ulang indeks.
  2. Ulangi Langkah 4 hingga QPS dan rentang recall mencapai nilai yang dapat diterima.

Pemeliharaan indeks

Jika tabel Anda rentan terhadap pembaruan atau penyisipan yang sering, sebaiknya indeks ScaNN yang ada diindeks ulang secara berkala untuk meningkatkan akurasi recall. Anda dapat memantau metrik indeks untuk melihat perubahan dalam distribusi vektor atau mutasi vektor sejak indeks dibuat, lalu mengindeks ulang sesuai kebutuhan. Untuk mengetahui informasi selengkapnya tentang metrik, lihat Metrik indeks vektor.

Langkah berikutnya