Indeks GPU
Milvus mendukung berbagai jenis indeks GPU untuk mempercepat kinerja dan efisiensi pencarian, terutama dalam skenario throughput tinggi dan pemanggilan tinggi. Topik ini memberikan gambaran umum tentang jenis indeks GPU yang didukung oleh Milvus, kasus penggunaan yang sesuai, dan karakteristik kinerja. Untuk informasi tentang membangun indeks dengan GPU, lihat Indeks dengan GPU.
Penting untuk dicatat bahwa menggunakan indeks GPU belum tentu mengurangi latensi dibandingkan dengan menggunakan indeks CPU. Jika Anda ingin memaksimalkan throughput sepenuhnya, Anda memerlukan tekanan permintaan yang sangat tinggi atau vektor kueri dalam jumlah besar.
kinerja
Dukungan GPU Milvus dikontribusikan oleh tim Nvidia RAPIDS. Berikut ini adalah jenis indeks GPU yang saat ini didukung oleh Milvus.
GPU_CAGRA
GPU_CAGRA adalah indeks berbasis grafik yang dioptimalkan untuk GPU, Menggunakan GPU kelas inferensi untuk menjalankan versi GPU Milvus dapat lebih hemat biaya dibandingkan dengan menggunakan GPU kelas pelatihan yang mahal.
Parameter pembuatan indeks
Parameter Deskripsi Nilai Default intermediate_graph_degree
Mempengaruhi waktu pemanggilan dan pembangunan dengan menentukan derajat grafik sebelum pemangkasan. Nilai yang disarankan adalah 32
atau64
.128
graph_degree
Mempengaruhi kinerja pencarian dan pemanggilan dengan mengatur derajat grafik setelah pemangkasan. Perbedaan yang lebih besar antara kedua derajat ini menghasilkan waktu pembangunan yang lebih lama. Nilainya harus lebih kecil dari nilai intermediate_graph_degree. 64
build_algo
Memilih algoritma pembuatan graf sebelum pemangkasan. Nilai yang mungkin: IVF_PQ
: Menawarkan kualitas yang lebih tinggi tetapi waktu pembuatan lebih lambat.NN_DESCENT
: Menyediakan pembuatan yang lebih cepat dengan potensi pemanggilan yang lebih rendah.IVF_PQ
cache_dataset_on_device
Memutuskan apakah akan menyimpan dataset asli dalam memori GPU. Nilai yang mungkin: “true”
: Menyimpan dataset asli untuk meningkatkan pemanggilan dengan menyempurnakan hasil pencarian.“false”
Tidak menyimpan set data asli untuk menghemat memori GPU.“false”
adapt_for_cpu
Memutuskan apakah akan menggunakan GPU untuk pembuatan indeks dan CPU untuk pencarian.
Mengatur parameter ini ketrue
memerlukan kehadiran parameteref
dalam permintaan pencarian.“false”
Parameter pencarian
Parameter Deskripsi Nilai Default itopk_size
Menentukan ukuran hasil perantara yang disimpan selama pencarian. Nilai yang lebih besar dapat meningkatkan daya ingat dengan mengorbankan kinerja pencarian. Setidaknya harus sama dengan nilai top-k (batas) akhir dan biasanya merupakan pangkat 2 (misalnya, 16, 32, 64, 128). Kosong search_width
Menentukan jumlah titik masuk ke dalam grafik CAGRA selama pencarian. Meningkatkan nilai ini dapat meningkatkan daya ingat tetapi dapat memengaruhi kinerja pencarian (misalnya 1, 2, 4, 8, 16, 32). Kosong min_iterations
/max_iterations
Mengontrol proses iterasi pencarian. Secara default, nilai ini diatur ke 0
, dan CAGRA secara otomatis menentukan jumlah iterasi berdasarkanitopk_size
dansearch_width
. Menyesuaikan nilai ini secara manual dapat membantu menyeimbangkan kinerja dan akurasi.0
team_size
Menentukan jumlah thread CUDA yang digunakan untuk menghitung jarak metrik pada GPU. Nilai yang umum adalah pangkat 2 hingga 32 (mis. 2, 4, 8, 16, 32). Hal ini berdampak kecil pada kinerja pencarian. Nilai defaultnya adalah 0
, di mana Milvus secara otomatis memilihteam_size
berdasarkan dimensi vektor.0
ef
Menentukan pertukaran waktu/akurasi kueri. Nilai ef
yang lebih tinggi akan menghasilkan pencarian yang lebih akurat tetapi lebih lambat.
Parameter ini wajib diisi jika Anda mengaturadapt_for_cpu
ketrue
ketika Anda membangun indeks.[top_k, int_max]
Batasan pada pencarian
Parameter Rentang limit
(K atas)<= 1024 limit
(top-K)<=max(( itopk_size
+ 31)// 32,search_width
) * 32
GPU_IVF_FLAT
Serupa dengan IVF_FLAT, GPU_IVF_FLAT juga membagi data vektor ke dalam unit cluster nlist
, dan kemudian membandingkan jarak antara vektor input target dan pusat setiap cluster. Bergantung pada jumlah klaster yang diatur oleh sistem untuk melakukan kueri (nprobe
), hasil pencarian kemiripan dikembalikan berdasarkan perbandingan antara input target dan vektor dalam klaster yang paling mirip saja - secara drastis mengurangi waktu kueri.
Dengan menyesuaikan nprobe
, keseimbangan ideal antara akurasi dan kecepatan dapat ditemukan untuk skenario tertentu. Hasil dari uji kinerja IVF_FLAT menunjukkan bahwa waktu kueri meningkat tajam seiring dengan bertambahnya jumlah vektor input target (nq
), dan jumlah cluster yang dicari (nprobe
).
GPU_IVF_FLAT adalah indeks IVF yang paling dasar, dan data yang disandikan yang disimpan di setiap unit konsisten dengan data asli.
Ketika melakukan pencarian, perhatikan bahwa Anda dapat mengatur K teratas hingga 256 untuk pencarian apa pun terhadap koleksi yang diindeks GPU_IVF_FLAT.
Parameter pembuatan indeks
Parameter Deskripsi Rentang Nilai Default nlist
Jumlah unit cluster [1, 65536] 128
cache_dataset_on_device
Memutuskan apakah akan menyimpan dataset asli dalam memori GPU. Nilai yang mungkin: “true”
: Menyimpan dataset asli untuk meningkatkan daya ingat dengan menyempurnakan hasil pencarian.“false”
Tidak menyimpan set data asli untuk menghemat memori GPU."true"
"flase"
"false"
Parameter pencarian
Pencarian umum
Parameter Deskripsi Rentang Nilai Default nprobe
Jumlah unit yang akan ditanyakan [1, nlist] 8
Batas pencarian
Parameter Rentang limit
(K atas)<= 2048
GPU_IVF_PQ
PQ
(Kuantisasi Produk) secara seragam menguraikan ruang vektor dimensi tinggi asli menjadi produk Cartesian dari ruang vektor dimensi rendah m
, dan kemudian mengkuantisasi ruang vektor dimensi rendah yang telah diuraikan. Alih-alih menghitung jarak antara vektor target dan pusat semua unit, kuantisasi produk memungkinkan perhitungan jarak antara vektor target dan pusat pengelompokan setiap ruang dimensi rendah dan sangat mengurangi kompleksitas waktu dan kompleksitas ruang algoritma.
IVF_PQ melakukan pengelompokan indeks IVF sebelum mengkuantisasi produk vektor. File indeksnya bahkan lebih kecil daripada IVF_SQ8, tetapi juga menyebabkan hilangnya akurasi selama pencarian vektor.
Parameter pembuatan indeks dan parameter pencarian bervariasi dengan distribusi Milvus. Pilih distribusi Milvus Anda terlebih dahulu.
Ketika melakukan pencarian, perhatikan bahwa Anda dapat mengatur top-K hingga 8192 untuk setiap pencarian terhadap koleksi yang diindeks GPU_IVF_FLAT.
Parameter pembuatan indeks
Parameter Deskripsi Rentang Nilai Default nlist
Jumlah unit cluster [1, 65536] 128
m
Jumlah faktor kuantisasi produk, dim mod m or = 0
0
nbits
[Opsional] Jumlah bit tempat penyimpanan setiap vektor dimensi rendah. [1, 16] 8
cache_dataset_on_device
Memutuskan apakah akan menyimpan dataset asli dalam memori GPU. Nilai yang mungkin: “true”
: Menyimpan dataset asli untuk meningkatkan daya ingat dengan menyempurnakan hasil pencarian.“false”
Tidak menyimpan set data asli untuk menghemat memori GPU."true"
"false"
"false"
Parameter pencarian
Pencarian umum
Parameter Deskripsi Rentang Nilai Default nprobe
Jumlah unit yang akan ditanyakan [1, nlist] 8
Batas pencarian
Parameter Rentang limit
(K atas)<= 1024
GPU_BRUTE_FORCE
GPU_BRUTE_FORCE dirancang untuk kasus-kasus di mana pemanggilan yang sangat tinggi sangat penting, menjamin pemanggilan 1 dengan membandingkan setiap kueri dengan semua vektor dalam kumpulan data. Ini hanya membutuhkan tipe metrik (metric_type
) dan top-k (limit
) sebagai parameter pembangunan indeks dan pencarian.
Untuk GPU_BRUTE_FORCE, tidak ada tambahan parameter pembangun indeks atau parameter pencarian yang diperlukan.
Kesimpulan
Saat ini, Milvus memuat semua indeks ke dalam memori GPU untuk operasi pencarian yang efisien. Jumlah data yang dapat dimuat tergantung pada ukuran memori GPU:
- GPU_CAGRA: Penggunaan memori sekitar 1,8 kali lipat dari data vektor asli.
- GPU_IVF_FLAT dan GPU_BRUTE_FORCE: Membutuhkan memori yang sama dengan ukuran data asli.
- GPU_IVF_PQ: Memanfaatkan jejak memori yang lebih kecil, yang bergantung pada pengaturan parameter kompresi.