Ikhtisar Indeks GPU
Membangun indeks dengan dukungan GPU di Milvus dapat secara signifikan meningkatkan performa pencarian dalam skenario throughput dan recall tinggi.
Gambar berikut ini membandingkan throughput kueri (kueri per detik) di seluruh konfigurasi indeks, pengaturan perangkat keras, kumpulan data vektor (Cohere dan OpenAI), dan ukuran kumpulan pencarian, yang menunjukkan bahwa GPU_CAGRA secara konsisten mengungguli metode lainnya.
Kinerja Indeks Gpu
Mengonfigurasi kumpulan memori GPU untuk Milvus
Milvus mendukung kumpulan memori GPU global dan menyediakan dua parameter konfigurasi, initMemSize dan maxMemSize, dalam file konfigurasi Milvus.
gpu:
initMemSize: 0 # set the initial memory pool size.
maxMemSize: 0 # sets the maximum memory usage limit. When the memory usage exceeds initMemSize, Milvus will attempt to expand the memory pool.
Default initMemSize biasanya setengah dari memori GPU ketika Milvus dimulai, dan maxMemSize default untuk seluruh memori GPU. Ukuran pool memori GPU pada awalnya diatur ke initMemSize dan secara otomatis akan diperluas ke maxMemSize sesuai kebutuhan.
Ketika indeks yang mendukung GPU ditentukan, Milvus memuat data koleksi target ke dalam memori GPU sebelum melakukan pencarian, sehingga maxMemSize harus berukuran minimal sama dengan ukuran data.
Batas
Untuk
GPU_IVF_FLAT, nilai maksimum untuklimitadalah 1.024.Untuk
GPU_IVF_PQdanGPU_CAGRA, nilai maksimum untuklimitadalah 1.024.Meskipun tidak ada batasan
limituntukGPU_BRUTE_FORCE, disarankan untuk tidak melebihi 4.096 untuk menghindari potensi masalah kinerja.Saat ini, indeks GPU tidak mendukung jarak
COSINE. Jika jarakCOSINEdiperlukan, data harus dinormalisasi terlebih dahulu, dan kemudian jarak inner product (IP) dapat digunakan sebagai pengganti.Memuat perlindungan OOM untuk indeks GPU tidak sepenuhnya didukung, terlalu banyak data dapat menyebabkan QueryNode mengalami crash.
Indeks GPU tidak mendukung fungsi pencarian seperti pencarian rentang dan pencarian pengelompokan.
Jenis indeks GPU yang didukung
Tabel berikut mencantumkan jenis indeks GPU yang didukung oleh Milvus.
Jenis Indeks |
Deskripsi |
Penggunaan Memori |
|---|---|---|
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. |
Penggunaan memori sekitar 1,8 kali lipat dari data vektor asli. |
|
GPU_IVF_FLAT adalah indeks IVF yang paling dasar, dan data yang disandikan yang disimpan di setiap unit konsisten dengan data asli. Saat melakukan pencarian, perhatikan bahwa Anda dapat mengatur top-k ( |
Memerlukan memori yang sama dengan ukuran data asli. |
|
GPU_IVF_PQ melakukan pengelompokan indeks IVF sebelum mengkuantisasi hasil perkalian vektor. Saat melakukan pencarian, perhatikan bahwa Anda dapat mengatur top-k ( |
Memanfaatkan jejak memori yang lebih kecil, yang bergantung pada pengaturan parameter kompresi. |
|
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. Hanya membutuhkan tipe metrik ( |
Membutuhkan memori yang sama dengan ukuran data asli. |
Mengonfigurasi pengaturan Milvus untuk kontrol memori GPU
Milvus menggunakan kumpulan memori grafis global untuk mengalokasikan memori GPU. Ini mendukung dua parameter initMemSize dan maxMemSize dalam file konfigurasi Milvus. Ukuran pool pada awalnya diatur ke initMemSize, dan akan secara otomatis diperluas ke maxMemSize setelah melebihi batas ini.
Default initMemSize adalah 1/2 dari memori GPU yang tersedia saat Milvus dijalankan, dan default maxMemSize sama dengan semua memori GPU yang tersedia.
Hingga Milvus 2.4.1, Milvus menggunakan kumpulan memori GPU terpadu. Untuk versi sebelum 2.4.1, direkomendasikan untuk mengatur kedua nilai tersebut ke 0.
gpu:
initMemSize: 0 #set the initial memory pool size.
maxMemSize: 0 #maxMemSize sets the maximum memory usage limit. When the memory usage exceed initMemSize, Milvus will attempt to expand the memory pool.
Mulai Milvus 2.4.1 dan seterusnya, kumpulan memori GPU hanya digunakan untuk data GPU sementara selama pencarian. Oleh karena itu, disarankan untuk mengaturnya ke 2048 dan 4096.
gpu:
initMemSize: 2048 #set the initial memory pool size.
maxMemSize: 4096 #maxMemSize sets the maximum memory usage limit. When the memory usage exceed initMemSize, Milvus will attempt to expand the memory pool.
Untuk mempelajari cara membuat indeks GPU, lihat panduan khusus untuk setiap jenis indeks.
PERTANYAAN UMUM
Kapan waktu yang tepat untuk menggunakan indeks GPU?
Indeks GPU sangat bermanfaat dalam situasi yang menuntut throughput tinggi atau recall tinggi. Misalnya, saat menangani batch besar, throughput pengindeksan GPU dapat melampaui throughput pengindeksan CPU sebanyak 100 kali lipat. Dalam skenario dengan batch yang lebih kecil, indeks GPU masih secara signifikan mengungguli indeks CPU dalam hal kinerja. Selain itu, jika ada persyaratan untuk penyisipan data yang cepat, menggabungkan GPU dapat mempercepat proses pembuatan indeks secara substansial.
Dalam skenario apa indeks GPU seperti GPU_CAGRA, GPU_IVF_PQ, GPU_IVF_FLAT, dan GPU_BRUTE_FORCE paling cocok?
GPU_CAGRAIndeks ini ideal untuk skenario yang menuntut peningkatan performa, meskipun dengan mengorbankan konsumsi memori yang lebih besar. Untuk lingkungan di mana konservasi memori menjadi prioritas, indeksGPU_IVF_PQdapat membantu meminimalkan kebutuhan penyimpanan, meskipun hal ini disertai dengan kehilangan presisi yang lebih tinggi. IndeksGPU_IVF_FLATberfungsi sebagai opsi yang seimbang, menawarkan kompromi antara kinerja dan penggunaan memori. Terakhir, indeksGPU_BRUTE_FORCEdirancang untuk operasi pencarian yang lengkap, menjamin tingkat recall 1 dengan melakukan pencarian traversal.