GPU_CAGRA

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

Membangun indeks

Untuk membangun indeks GPU_CAGRA pada bidang vektor di Milvus, gunakan metode add_index(), tentukan index_type, metric_type, dan parameter tambahan untuk indeks.

from pymilvus import MilvusClient

# Prepare index building params
index_params = MilvusClient.prepare_index_params()

index_params.add_index(
    field_name="your_vector_field_name", # Name of the vector field to be indexed
    index_type="GPU_CAGRA", # Type of the index to create
    index_name="vector_index", # Name of the index to create
    metric_type="L2", # Metric type used to measure similarity
    params={
        "intermediate_graph_degree": 64, # Affects recall and build time by determining the graph’s degree before pruning
        "graph_degree": 32, # Affets search performance and recall by setting the graph’s degree after pruning
        "build_algo": "IVF_PQ", # Selects the graph generation algorithm before pruning
        "cache_dataset_on_device": "true", # Decides whether to cache the original dataset in GPU memory
        "adapt_for_cpu": "false", # Decides whether to use GPU for index-building and CPU for search
    } # Index building params
)

Dalam konfigurasi ini:

  • index_type: Jenis indeks yang akan dibangun. Dalam contoh ini, tetapkan nilainya ke GPU_CAGRA.

  • metric_type: Metode yang digunakan untuk menghitung jarak antara vektor. Untuk detailnya, lihat Jenis Metrik.

  • params: Opsi konfigurasi tambahan untuk membangun indeks. Untuk mempelajari lebih lanjut parameter pembuatan yang tersedia untuk indeks GPU_CAGRA, lihat Parameter pembuatan indeks.

Setelah parameter indeks dikonfigurasi, Anda dapat membuat indeks dengan menggunakan metode create_index() secara langsung atau mengoper parameter indeks dalam metode create_collection. Untuk detailnya, lihat Membuat Koleksi.

Mencari di indeks

Setelah indeks dibuat dan entitas dimasukkan, Anda dapat melakukan pencarian kemiripan pada indeks.

search_params = {
    "params": {
        "itopk_size": 16, # Determines the size of intermediate results kept during the search
        "search_width": 8, # Specifies the number of entry points into the CAGRA graph during the search
    }
}

res = MilvusClient.search(
    collection_name="your_collection_name", # Collection name
    anns_field="vector_field", # Vector field name
    data=[[0.1, 0.2, 0.3, 0.4, 0.5]],  # Query vector
    limit=3,  # TopK results to return
    search_params=search_params
)

Dalam konfigurasi ini:

  • params: Opsi konfigurasi tambahan untuk pencarian pada indeks. Untuk mempelajari lebih lanjut parameter pencarian yang tersedia untuk indeks GPU_CAGRA, lihat Parameter pencarian khusus indeks.

Mengaktifkan pencarian CPU pada saat pemuatanCompatible with Milvus 2.6.4+

Untuk mengaktifkan pencarian CPU secara dinamis pada saat pemuatan, edit konfigurasi berikut ini di milvus.yaml:

# milvus.yaml
knowhere:
  GPU_CAGRA:
    load: 
      adapt_for_cpu: true

Perilaku

  • Ketika load.adapt_for_cpu diatur ke true, Milvus mengubah indeks GPU_CAGRA menjadi format yang dapat dieksekusi CPU (seperti HNSW) selama pemuatan.

  • Operasi pencarian selanjutnya dieksekusi di CPU, meskipun indeks tersebut pada awalnya dibuat untuk GPU.

  • Jika dihilangkan atau salah, indeks tetap berada di GPU dan pencarian dijalankan di GPU.

Gunakan adaptasi CPU waktu muat di lingkungan hibrida atau lingkungan yang sensitif terhadap biaya di mana sumber daya GPU dicadangkan untuk pembuatan indeks, namun pencarian dijalankan di CPU.

Parameter indeks

Bagian ini memberikan gambaran umum tentang parameter yang digunakan untuk membangun indeks dan melakukan pencarian pada indeks.

Parameter pembuatan indeks

Tabel berikut mencantumkan parameter yang dapat dikonfigurasi di params saat membangun indeks.

Parameter

Deskripsi

Nilai Default

intermediate_graph_degree

Mempengaruhi waktu pemanggilan dan pembangunan dengan menentukan derajat grafik sebelum pemangkasan. Nilai yang disarankan adalah 32 atau 64.

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: Memberikan 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 daya ingat 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 ke "true" memerlukan kehadiran parameter ef dalam permintaan pencarian.

"false"

Parameter pencarian khusus indeks

Tabel berikut mencantumkan parameter yang dapat dikonfigurasi di search_params.params saat melakukan pencarian pada indeks.

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 berdasarkan itopk_size dan search_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 memilih team_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 mengatur adapt_for_cpu ke true ketika Anda membangun indeks.

[top_k, int_max]

Coba Milvus yang Dikelola secara Gratis

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

Mulai
Umpan balik

Apakah halaman ini bermanfaat?