Indeks di dalam disk
Artikel ini memperkenalkan DiskANN, sebuah algoritme pengindeksan dalam disk untuk pencarian vektor yang dioptimalkan untuk disk. Berdasarkan grafik Vamana, DiskANN mendukung pencarian vektor dalam disk yang efisien dalam kumpulan data yang besar.
Untuk meningkatkan kinerja kueri, Anda dapat menentukan jenis indeks untuk setiap bidang vektor.
Prasyarat
Untuk menggunakan DiskANN di Milvus, perhatikan bahwa
- Instance Milvus berjalan pada Ubuntu 18.04.6 atau rilis yang lebih baru.
- Jalur data Milvus harus dipasang ke SSD NVMe untuk performa penuh:
- Untuk instans Milvus Standalone, jalur data harus berada di /var/lib/milvus/data di dalam kontainer tempat instans berjalan.
- Untuk instans Milvus Cluster, jalur data harus /var/lib/milvus/data di wadah tempat QueryNodes dan IndexNodes berjalan.
Batasan
Untuk menggunakan DiskANN, pastikan Anda
- Gunakan hanya vektor float dengan setidaknya 1 dimensi dalam data Anda.
- Gunakan hanya Euclidean Distance (L2), Inner Product (IP), atau COSINE untuk mengukur jarak antar vektor.
Pengaturan indeks dan pencarian
Parameter pembuatan indeks
Saat membuat indeks DiskANN, gunakan
DISKANNsebagai jenis indeks. Tidak ada parameter indeks yang diperlukan.Parameter pencarian
Parameter Deskripsi Rentang Nilai Default search_listUkuran daftar kandidat, ukuran yang lebih besar menawarkan tingkat penarikan yang lebih tinggi dengan kinerja yang menurun. [topk, int32_max] 16
Konfigurasi Milvus yang terkait dengan DiskANN
DiskANN dapat disetel. Anda dapat memodifikasi parameter terkait DiskANN di ${MILVUS_ROOT_PATH}/configs/milvus.yaml untuk meningkatkan kinerjanya.
...
DiskIndex:
MaxDegree: 56
SearchListSize: 100
PQCodeBudgetGBRatio: 0.125
SearchCacheBudgetGBRatio: 0.125
BeamWidthRatio: 4.0
...
| Parameter | Deskripsi | Rentang Nilai | Nilai Default |
|---|---|---|---|
MaxDegree | Derajat maksimum grafik Vamana. Nilai yang lebih besar menawarkan tingkat penarikan yang lebih tinggi tetapi meningkatkan ukuran dan waktu untuk membangun indeks. | [1, 512] | 56 |
SearchListSize | Ukuran daftar kandidat. Nilai yang lebih besar meningkatkan waktu yang dihabiskan untuk membangun indeks tetapi menawarkan tingkat penarikan yang lebih tinggi. Tetapkan ke nilai yang lebih kecil dari MaxDegree kecuali jika Anda perlu mengurangi waktu pembuatan indeks. | [1, int32_max] | 100 |
PQCodeBudgetGBRatio | Batas ukuran pada kode PQ. Nilai yang lebih besar menawarkan tingkat pemanggilan yang lebih tinggi tetapi meningkatkan penggunaan memori. | (0.0, 0.25] | 0.125 |
SearchCacheBudgetGBRatio | Rasio nomor simpul yang di-cache terhadap data mentah. Nilai yang lebih besar meningkatkan kinerja pembuatan indeks dengan peningkatan penggunaan memori. | [0.0, 0.3) | 0.10 |
BeamWidthRatio | Rasio antara jumlah maksimum permintaan IO per iterasi pencarian dan nomor CPU. | [1, max(128 / nomor CPU, 16)] | 4.0 |
Pemecahan masalah
Bagaimana cara mengatasi kesalahan
io_setup() failed; returned -11, errno=11:Resource temporarily unavailable?Kernel Linux menyediakan fitur Asynchronous non-blocking I/O (AIO) yang memungkinkan sebuah proses memulai beberapa operasi I/O secara bersamaan tanpa harus menunggu sampai operasi tersebut selesai. Hal ini membantu meningkatkan kinerja untuk aplikasi yang dapat tumpang tindih antara pemrosesan dan I/O.
Performa dapat disetel menggunakan file virtual
/proc/sys/fs/aio-max-nrdalam sistem file proc. Parameteraio-max-nrmenentukan jumlah maksimum permintaan bersamaan yang diijinkan.aio-max-nrdefaultnya adalah65535, Anda dapat mengaturnya ke10485760.