Parameter yang direkomendasikan untuk indeksScaNN
akan berbeda-beda, bergantung pada apakah Anda memilih untuk membuat indeks hierarki dua tingkat atau tiga tingkat. Halaman ini memberikan rekomendasi tentang cara menyesuaikan parameter indeks untuk keseimbangan yang optimal antara recall dan QPS.
Pembuatan indeks ScaNN
Untuk informasi selengkapnya, lihat referensi Indeks ScaNN.
Indeks hierarki dua tingkat
Untuk menerapkan rekomendasi guna membantu Anda menemukan nilai num_leaves
dan num_leaves_to_search
yang optimal untuk set data,
ikuti langkah-langkah yang direkomendasikan berikut:
- Untuk membuat indeks
ScaNN
yang dioptimalkan untuk kasus berikut, tetapkan parameternum_leaves
ke nilai berikut, dengan baris adalah jumlah baris dalam tabel yang diindeks:- waktu dan kualitas build indeks seimbang menetapkan
num_leaves
kesqrt(rows)
. - quality menetapkan num_leaves ke baris/100.
- waktu dan kualitas build indeks seimbang menetapkan
- Jalankan kueri pengujian, 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. - Perhatikan rasio antara
scann.num_leaves_to_search
dannum_leaves
yang akan digunakan pada langkah berikutnya. Rasio ini memberikan perkiraan di sekitar set data yang akan membantu Anda mencapai target recall.
Jika Anda menggunakan vektor dimensi tinggi (500 dimensi atau lebih tinggi) dan ingin meningkatkan recall, coba sesuaikan nilaiscann.pre_reordering_num_neighbors
. Nilai default ditetapkan ke nilai500 * K
denganK
adalah batas yang Anda tetapkan dalam kueri. - Jika QPS Anda terlalu rendah setelah kueri mencapai recall target, ikuti langkah-langkah berikut:
- Buat ulang indeks, dengan meningkatkan nilai
num_leaves
danscann.num_leaves_to_search
sesuai panduan berikut:- Tetapkan
num_leaves
ke faktor yang lebih besar dari akar kuadrat jumlah baris Anda. Misalnya, jika indeks memilikinum_leaves
yang ditetapkan ke akar kuadrat jumlah baris, coba tetapkan ke dua kali akar kuadrat. Jika nilainya sudah dua kali lipat, coba tetapkan nilai tersebut untuk melipatgandakan akar kuadrat. - Tingkatkan
scann.num_leaves_to_search
sesuai kebutuhan untuk mempertahankan rasionya dengannum_leaves
, yang Anda catat pada Langkah 3. - Tetapkan
num_leaves
ke nilai yang kurang dari atau sama dengan jumlah baris dibagi 100.
- Tetapkan
- Jalankan lagi kueri pengujian.
Saat menjalankan kueri pengujian, lakukan eksperimen dengan mengurangi
scann.num_leaves_to_search
, menemukan nilai yang meningkatkan QPS sekaligus menjaga perolehan tetap tinggi. Coba nilaiscann.num_leaves_to_search
yang berbeda tanpa membuat ulang indeks.
- Buat ulang indeks, dengan meningkatkan nilai
- 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:
Buat indeks
ScaNN
dengan kombinasinum_leaves
danmax_num_levels
berikut berdasarkan sasaran performa Anda:- balance index build time & quality: Tetapkan
max_num_levels
sebagai2
dannum_leaves
sebagaipower(rows, ⅔)
. - optimalkan kualitas: Tetapkan
max_num_levels
sebagai2
dannum_leaves
sebagairows/100
.
- balance index build time & quality: Tetapkan
Jalankan kueri pengujian Anda. Untuk mengetahui informasi selengkapnya tentang cara menganalisis kueri, lihat Menganalisis kueri.
Perhatikan rasio antara
scann.num_leaves_to_search
dannum_leaves
yang akan digunakan di langkah berikutnya. Rasio ini memberikan perkiraan seputar set data yang akan membantu Anda mencapai target recall.
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.
Jika QPS Anda terlalu rendah setelah kueri mencapai target recall, ikuti langkah-langkah berikut:
- Buat ulang indeks, dengan meningkatkan nilai
num_leaves
danscann.num_leaves_to_search
sesuai dengan panduan berikut: - Tetapkan
num_leaves
ke faktorpower(rows, ⅔)
yang lebih besar. Misalnya, jika indeks memilikinum_leaves
yang ditetapkan kepower(rows, ⅔)
, coba tetapkan untuk menggandakanpower(rows, ⅔)
. Jika nilainya sudah dua kali lipat, coba tetapkan nilainya menjadi tiga kali lipatpower(rows, ⅔)
. - Tingkatkan
scann.num_leaves_to_search
sesuai kebutuhan untuk mempertahankan rasionya dengannum_leaves
, yang Anda catat pada Langkah 3. - Tetapkan
num_leaves
ke nilai yang kurang dari atau sama denganrows/100
. - Jalankan lagi kueri pengujian. Saat menjalankan kueri pengujian, lakukan eksperimen dengan mengurangi
scann.num_leaves_to_search
, menemukan nilai yang meningkatkan QPS sekaligus menjaga perolehan tetap tinggi. Coba nilaiscann.num_leaves_to_search
yang berbeda tanpa membuat ulang indeks.
- Buat ulang indeks, dengan meningkatkan nilai
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 ulang indeks ScaNN
yang ada secara berkala untuk meningkatkan akurasi recall.
Anda dapat memantau metrik indeks untuk melihat perubahan pada distribusi vektor atau mutasi vektor sejak indeks dibuat, lalu mengindeks ulang sesuai kebutuhan. Untuk mengetahui informasi selengkapnya tentang metrik, lihat Melihat metrik indeks Vektor.