🚀 Coba Zilliz Cloud, Milvus yang sepenuhnya terkelola, secara gratis—rasakan performa 10x lebih cepat! Coba Sekarang>>

milvus-logo
LFAI
Beranda
  • Konsep

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.

performance 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

    ParameterDeskripsiNilai Default
    intermediate_graph_degreeMempengaruhi waktu pemanggilan dan pembangunan dengan menentukan derajat grafik sebelum pemangkasan. Nilai yang disarankan adalah 32 atau 64.128
    graph_degreeMempengaruhi 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_algoMemilih 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_deviceMemutuskan 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_cpuMemutuskan apakah akan menggunakan GPU untuk pembuatan indeks dan CPU untuk pencarian.
    Mengatur parameter ini ke true memerlukan kehadiran parameter ef dalam permintaan pencarian.
    “false”
  • Parameter pencarian

    ParameterDeskripsiNilai Default
    itopk_sizeMenentukan 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_widthMenentukan 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_iterationsMengontrol proses iterasi pencarian. Secara default, nilai ini diatur ke 0, dan CAGRA secara otomatis menentukan jumlah iterasi berdasarkan itopk_size dan search_width. Menyesuaikan nilai ini secara manual dapat membantu menyeimbangkan kinerja dan akurasi.0
    team_sizeMenentukan 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 memilih team_size berdasarkan dimensi vektor.0
    efMenentukan pertukaran waktu/akurasi kueri. Nilai ef yang lebih tinggi akan menghasilkan pencarian yang lebih akurat tetapi lebih lambat.
    Parameter ini wajib diisi jika Anda mengatur adapt_for_cpu ke true ketika Anda membangun indeks.
    [top_k, int_max]
  • Batasan pada pencarian

    ParameterRentang
    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

    ParameterDeskripsiRentangNilai Default
    nlistJumlah unit cluster[1, 65536]128
    cache_dataset_on_deviceMemutuskan 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

      ParameterDeskripsiRentangNilai Default
      nprobeJumlah unit yang akan ditanyakan[1, nlist]8
  • Batas pencarian

    ParameterRentang
    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

    ParameterDeskripsiRentangNilai Default
    nlistJumlah unit cluster[1, 65536]128
    mJumlah faktor kuantisasi produk,dim mod m or = 00
    nbits[Opsional] Jumlah bit tempat penyimpanan setiap vektor dimensi rendah.[1, 16]8
    cache_dataset_on_deviceMemutuskan 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

      ParameterDeskripsiRentangNilai Default
      nprobeJumlah unit yang akan ditanyakan[1, nlist]8
  • Batas pencarian

    ParameterRentang
    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.

Coba Milvus yang Dikelola secara Gratis

Zilliz Cloud bebas masalah, didukung oleh Milvus dan 10x lebih cepat.

Mulai
Umpan balik

Apakah halaman ini bermanfaat?