Referensi Indeks ScaNN

Halaman ini menyediakan materi referensi untuk Indeks ScaNN.

Parameter penyempurnaan

Parameter indeks dan tanda database berikut digunakan bersama untuk menemukan keseimbangan yang tepat antara recall dan QPS.

Parameter penyesuaian Deskripsi Jenis opsi
max_num_levels Jumlah maksimum tingkat centroid dari hierarki pengelompokan K-means.
  • Indeks hierarki dua tingkat: Tetapkan ke 1 secara default untuk hierarki dua tingkat (1 tingkat centroid + tingkat daun bawah).
  • Indeks hierarki tiga tingkat: Tetapkan ke 2 secara default untuk hierarki tiga tingkat (2 tingkat centroid + tingkat daun bawah)
  • Tetapkan nilai ke 2 jika jumlah baris vektor melebihi 100 juta baris.
  • Tetapkan nilai ke 1 jika jumlah baris vektor kurang dari 10 juta baris.
  • Tetapkan ke 1 atau 2 jika jumlah baris vektor berada di antara 10 juta dan 100 juta baris untuk mengoptimalkan waktu pembuatan indeks (tetapkan ke 2) atau mengoptimalkan recall penelusuran (tetapkan ke 1).
Pembuatan indeks
(opsional)
num_leaves Jumlah partisi yang akan diterapkan ke indeks ini. Jumlah partisi yang Anda terapkan saat membuat indeks memengaruhi performa indeks. Dengan meningkatkan partisi untuk sejumlah vektor yang ditetapkan, Anda akan membuat indeks yang lebih terperinci, yang meningkatkan performa kueri dan recall. Namun, hal ini akan memperpanjang waktu pembuatan indeks.

Karena hierarki tiga tingkat dibuat lebih cepat daripada hierarki dua tingkat, Anda dapat meningkatkan num_leaves_value saat membuat indeks hierarki tiga tingkat untuk mendapatkan performa yang lebih baik.
  • Indeks dua tingkat: Tetapkan nilai ini ke nilai apa pun antara 1 dan 1048576.

    Untuk indeks yang menyeimbangkan pembuatan indeks yang cepat dan performa penelusuran yang baik, gunakan sqrt(ROWS) sebagai titik awal, dengan ROWS adalah jumlah baris vektor. Jumlah vektor yang disimpan setiap partisi dihitung oleh
    ROWS/sqrt(ROWS) = sqrt(ROWS).

    Karena indeks hierarki dua tingkat dapat dibuat pada set data dengan kurang dari 10 juta baris vektor, setiap partisi akan menyimpan kurang dari (sqrt(10M)) vektor, yaitu vektor 3200. Untuk kualitas penelusuran vektor yang optimal, sebaiknya minimalkan jumlah vektor di setiap partisi. Ukuran partisi yang direkomendasikan adalah sekitar 100 vektor per partisi, jadi tetapkan num_leaves ke ROWS/100. Jika memiliki 10 juta vektor,Anda akan menetapkan num_leaves ke 100.000.
  • Indeks tiga tingkat: Tetapkan nilai ini ke nilai apa pun antara 1 dan 1048576.

    Jika Anda tidak yakin untuk memilih nilai yang tepat, gunakan power(ROWS, 2/3) sebagai titik awal, dengan ROWS adalah jumlah baris vektor. Jumlah vektor yang disimpan setiap partisi dihitung oleh
    ROWS/power(ROWS, 2/3) = power(ROWS, 1/3).

    Karena indeks hierarki tiga tingkat dapat dibuat pada set data dengan baris vektor lebih dari 100 juta, setiap partisi akan menyimpan lebih dari
    (power(100M, 1/3)) vektor, yaitu 465 vektor. Untuk kualitas penelusuran vektor yang optimal, sebaiknya minimalkan jumlah vektor di setiap partisi. Ukuran partisi yang direkomendasikan adalah sekitar 100 vektor per partisi, jadi tetapkan num_leaves ke ROWS/100. Jika memiliki 100 juta vektor, Anda akan menetapkan num_leaves ke 1 juta.
Pembuatan indeks
(wajib)
quantizer Jenis quantizer yang ingin Anda gunakan untuk hierarki K-means. Nilai default ditetapkan ke SQ8 yang memberikan performa kueri yang lebih baik dengan kehilangan recall minimal (biasanya kurang dari 1-2%).

Tetapkan ke FLAT jika recall 99% atau lebih tinggi diperlukan.
Pembuatan indeks
(opsional)
scann.enable_pca Mengaktifkan Analisis Komponen Utama (PCA), yang merupakan teknik pengurangan dimensi yang digunakan untuk mengurangi ukuran penyematan secara otomatis jika memungkinkan. Opsi ini diaktifkan secara default.

Tetapkan ke false jika Anda mengamati penurunan dalam recall.
Pembuatan indeks
(opsional)
scann.num_leaves_to_search Flag database ini mengontrol jumlah absolut daun atau partisi yang akan ditelusuri, yang memungkinkan Anda melakukan kompromi antara recall dan QPS. Nilai defaultnya adalah 1% dari nilai yang ditetapkan di num_leaves.

Nilai yang lebih tinggi akan menghasilkan recall yang lebih baik, tetapi QPS yang lebih rendah. Demikian pula, nilai yang lebih rendah akan menghasilkan recall yang lebih rendah, tetapi QPS yang lebih tinggi.
Runtime kueri
(opsional)
scann.pre_reordering_num_neighbors Tanda database, jika ditetapkan, menentukan jumlah kandidat tetangga yang akan dipertimbangkan selama tahap pengurutan ulang setelah penelusuran awal mengidentifikasi sekumpulan kandidat. Tetapkan parameter ini ke nilai yang lebih tinggi dari jumlah tetangga yang ingin ditampilkan kueri.

Nilai yang lebih tinggi akan menghasilkan recall yang lebih baik, tetapi QPS yang lebih rendah. Tetapkan nilai ini ke 0 untuk menonaktifkan pengurutan ulang. Setelan defaultnya adalah 0 jika PCA tidak diaktifkan selama pembuatan indeks. Jika tidak, defaultnya adalah 50 x K, dengan K adalah LIMIT yang ditentukan dalam kueri.
Runtime kueri
(opsional)
scann.num_search_threads Jumlah thread penelusur untuk penelusuran multi-thread. Hal ini dapat membantu mengurangi latensi kueri tunggal dengan menggunakan lebih dari satu thread untuk penelusuran ANN ScaNN dalam aplikasi yang sensitif terhadap latensi. Setelan ini tidak meningkatkan latensi kueri tunggal jika database sudah terikat CPU. Nilai defaultnya adalah 2. Runtime kueri
(opsional)

Langkah selanjutnya