🚀 Coba Zilliz Cloud, Milvus yang sepenuhnya terkelola, secara gratis—rasakan performa 10x lebih cepat! Coba Sekarang>>

milvus-logo
LFAI

1. index_file_size

  • Engineering
February 26, 2020
milvus

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-sift50m-test-results-milvus.png 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 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.

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

Terus Baca