Indeks Pada Disk
Artikel ini memperkenalkan algoritme pengindeksan dalam disk yang dinamai DiskANN. Berdasarkan grafik Vamana, DiskANN mendukung pencarian yang efisien dalam kumpulan data yang besar.
Untuk meningkatkan performa kueri, Anda dapat menentukan jenis indeks untuk setiap bidang vektor.
Prasyarat
Untuk menggunakan DiskANN, perhatikan bahwa
- DiskANN dinonaktifkan secara default. Jika Anda lebih memilih indeks dalam memori daripada indeks pada disk, Anda disarankan untuk menonaktifkan fitur ini untuk kinerja yang lebih baik.
- Untuk menonaktifkannya, Anda dapat mengubah
queryNode.enableDisk
menjadifalse
pada berkas konfigurasi milvus Anda. - Untuk mengaktifkannya kembali, Anda dapat mengatur
queryNode.enableDisk
ketrue
.
- Untuk menonaktifkannya, Anda dapat mengubah
- 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
DISKANN
sebagai jenis indeks. Tidak ada parameter indeks yang diperlukan.Parameter pencarian
Parameter Deskripsi Rentang Nilai Default search_list
Ukuran 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
PQCodeBugetGBRatio: 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 |
PQCodeBugetGBRatio | 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-nr
dalam sistem file proc. Parameteraio-max-nr
menentukan jumlah maksimum permintaan bersamaan yang diijinkan.aio-max-nr
defaultnya adalah65535
, Anda dapat mengaturnya ke10485760
.