1. index_file_size
Dalam Praktik Terbaik untuk Konfigurasi Milvus, beberapa praktik terbaik untuk konfigurasi Milvus 0.6.0 telah diperkenalkan. Dalam artikel ini, kami juga akan memperkenalkan beberapa praktik terbaik untuk mengatur parameter kunci dalam klien Milvus untuk operasi termasuk membuat tabel, membuat indeks, dan pencarian. Parameter-parameter ini dapat mempengaruhi kinerja pencarian.
1. index_file_size
Ketika membuat tabel, parameter index_file_size digunakan untuk menentukan ukuran, dalam MB, dari satu file untuk penyimpanan data. Nilai standarnya adalah 1024. Ketika data vektor diimpor, Milvus secara bertahap menggabungkan data ke dalam file. Ketika ukuran file mencapai index_file_size, file ini tidak menerima data baru dan Milvus menyimpan data baru ke file lain. Ini semua adalah file data mentah. Ketika sebuah indeks dibuat, Milvus membuat sebuah berkas indeks untuk setiap berkas data mentah. Untuk jenis indeks IVFLAT, ukuran file indeks kurang lebih sama dengan ukuran file data mentah yang bersangkutan. Untuk indeks SQ8, ukuran file indeks kira-kira 30 persen dari file data mentah yang sesuai.
Selama pencarian, Milvus mencari setiap file indeks satu per satu. Berdasarkan pengalaman kami, ketika index_file_size berubah dari 1024 menjadi 2048, kinerja pencarian meningkat 30 persen hingga 50 persen. Namun, jika nilainya terlalu besar, file yang besar mungkin gagal dimuat ke memori GPU (atau bahkan memori CPU). Sebagai contoh, jika memori GPU adalah 2 GB dan index_file_size adalah 3 GB, file indeks tidak dapat dimuat ke memori GPU. Biasanya, kami mengatur index_file_size ke 1024 MB atau 2048 MB.
Tabel berikut ini menunjukkan pengujian menggunakan sift50m untuk index_file_size. Tipe indeks adalah SQ8.
1-hasil-pengujian-sift50m-milvus.png
Kita dapat melihat bahwa pada mode CPU dan mode GPU, ketika index_file_size adalah 2048 MB dan bukan 1024 MB, kinerja pencarian meningkat secara signifikan.
2. nlist
dan nprobe
Parameter nlist
digunakan untuk pembuatan indeks dan parameter nprobe
digunakan untuk pencarian. IVFLAT dan SQ8 menggunakan algoritma pengelompokan untuk membagi sejumlah besar vektor ke dalam kelompok, atau ember. nlist
adalah jumlah ember selama pengelompokan.
Saat mencari menggunakan indeks, langkah pertama adalah menemukan sejumlah ember yang paling dekat dengan vektor target dan langkah kedua adalah menemukan k vektor yang paling mirip dari ember-ember tersebut berdasarkan jarak vektor. nprobe
adalah jumlah ember pada langkah pertama.
Secara umum, meningkatkan nlist
akan menghasilkan lebih banyak bucket dan lebih sedikit vektor dalam satu bucket selama pengelompokan. Hasilnya, beban komputasi berkurang dan kinerja pencarian meningkat. Namun, dengan lebih sedikit vektor untuk perbandingan kemiripan, hasil yang benar mungkin terlewatkan.
Meningkatkan nprobe
akan menghasilkan lebih banyak ember untuk dicari. Akibatnya, beban komputasi meningkat dan kinerja pencarian memburuk, tetapi presisi pencarian meningkat. Situasi ini mungkin berbeda untuk setiap set data dengan distribusi yang berbeda. Anda juga harus mempertimbangkan ukuran set data saat menetapkan nlist
dan nprobe
. Umumnya, disarankan agar nlist
dapat menjadi 4 * sqrt(n)
, di mana n adalah jumlah total vektor. Sedangkan untuk nprobe
, Anda harus melakukan trade-off antara presisi dan efisiensi dan cara terbaik adalah dengan menentukan nilai melalui uji coba.
Tabel berikut ini menunjukkan pengujian menggunakan sift50m untuk nlist
dan nprobe
. Jenis indeksnya adalah SQ8.
sq8-index-test-sift50m.png
Tabel ini membandingkan kinerja pencarian dan presisi menggunakan nilai yang berbeda dari nlist
/nprobe
. Hanya hasil GPU yang ditampilkan karena tes CPU dan GPU memiliki hasil yang serupa. Pada pengujian ini, ketika nilai nlist
/nprobe
meningkat dengan persentase yang sama, presisi pencarian juga meningkat. Ketika nlist
= 4096 dan nprobe
adalah 128, Milvus memiliki performa pencarian terbaik. Kesimpulannya, ketika menentukan nilai untuk nlist
dan nprobe
, Anda harus membuat trade-off antara kinerja dan presisi dengan mempertimbangkan set data dan persyaratan yang berbeda.
Ringkasan
index_file_size
: Ketika ukuran data lebih besar dari index_file_size
, semakin besar nilai index_file_size
, semakin baik kinerja pencarian.nlist
dan nprobe
: Anda harus membuat trade-off antara kinerja dan presisi.
- 2. nlist dan nprobe
- Ringkasan
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word