Pertanyaan Umum tentang Kinerja
Bagaimana cara mengatur nlist
dan nprobe
untuk indeks IVF?
Menyetel nlist
bersifat spesifik untuk setiap skenario. Sebagai patokan, nilai yang disarankan untuk nlist
adalah 4 Ă— sqrt(n)
, di mana n
adalah jumlah total entitas dalam sebuah segmen.
Ukuran setiap segmen ditentukan oleh parameter datacoord.segment.maxSize
, yang disetel ke 512 MB secara default. Jumlah total entitas dalam segmen n dapat diperkirakan dengan membagi datacoord.segment.maxSize
dengan ukuran masing-masing entitas.
Pengaturan nprobe
khusus untuk dataset dan skenario, dan melibatkan pertukaran antara akurasi dan kinerja kueri. Kami merekomendasikan untuk menemukan nilai ideal melalui eksperimen berulang kali.
Grafik berikut ini adalah hasil dari uji coba yang dilakukan pada dataset sift50m dan indeks IVF_SQ8, yang membandingkan performa recall dan kueri dari pasangan nlist
/nprobe
yang berbeda.
Uji akurasi
Uji kinerja
Mengapa kueri terkadang membutuhkan waktu lebih lama pada set data yang lebih kecil?
Operasi kueri dilakukan pada segmen. Indeks mengurangi jumlah waktu yang diperlukan untuk melakukan kueri pada sebuah segmen. Jika sebuah segmen belum diindeks, Milvus menggunakan pencarian brute-force pada data mentah - meningkatkan waktu kueri secara drastis.
Oleh karena itu, biasanya diperlukan waktu lebih lama untuk melakukan kueri pada kumpulan data yang kecil (koleksi) karena belum membangun indeks. Hal ini karena ukuran segmen-segmennya belum mencapai ambang batas pembangunan indeks yang ditetapkan oleh rootCoord.minSegmentSizeToEnableindex
. Hubungi create_index()
untuk memaksa Milvus mengindeks segmen yang telah mencapai ambang batas tetapi belum diindeks secara otomatis, sehingga secara signifikan meningkatkan kinerja kueri.
Faktor-faktor apa saja yang memengaruhi penggunaan CPU?
Penggunaan CPU meningkat ketika Milvus membangun indeks atau menjalankan kueri. Secara umum, pembuatan indeks menggunakan CPU yang intensif kecuali ketika menggunakan Annoy, yang berjalan pada satu thread.
Ketika menjalankan kueri, penggunaan CPU dipengaruhi oleh nq
dan nprobe
. Ketika nq
dan nprobe
kecil, konkurensi rendah dan penggunaan CPU tetap rendah.
Apakah memasukkan data dan pencarian secara bersamaan memengaruhi kinerja kueri?
Operasi penyisipan tidak menggunakan CPU secara intensif. Namun, karena segmen baru mungkin belum mencapai ambang batas untuk pembuatan indeks, Milvus menggunakan pencarian brute-force - yang secara signifikan memengaruhi kinerja kueri.
Parameter rootcoord.minSegmentSizeToEnableIndex
menentukan ambang batas pembuatan indeks untuk sebuah segmen, dan diatur ke 1024 baris secara default. Lihat Konfigurasi Sistem untuk informasi lebih lanjut.
Apakah mengindeks bidang VARCHAR dapat meningkatkan kecepatan penghapusan?
Mengindeks bidang VARCHAR dapat mempercepat operasi "Hapus Berdasarkan Ekspresi", tetapi hanya dalam kondisi tertentu:
- Indeks Terbalik: Indeks ini membantu untuk ekspresi
IN
atau==
pada field VARCHAR non-kunci utama. - Indeks Trie: Indeks ini membantu untuk kueri awalan (misalnya,
LIKE prefix%
) pada bidang VARCHAR non-kunci utama.
Namun, mengindeks bidang VARCHAR tidak mempercepat:
- Menghapus berdasarkan ID: Ketika bidang VARCHAR adalah kunci utama.
- Ekspresi yang tidak terkait: Ketika bidang VARCHAR bukan bagian dari ekspresi penghapusan.
Masih memiliki pertanyaan?
Anda bisa:
- Lihat Milvus di GitHub. Jangan ragu untuk bertanya, berbagi ide, dan membantu orang lain.
- Bergabunglah dengan Saluran Slack kami untuk mendapatkan dukungan dan terlibat dengan komunitas sumber terbuka kami.