GPU_IVF_PQ

Indeks GPU_IVF_PQ dibangun berdasarkan konsep IVF_PQ dengan menggabungkan pengelompokan file terbalik dengan Product Quantization (PQ), yang memecah vektor berdimensi tinggi menjadi subruang yang lebih kecil dan mengkuantifikasinya untuk pencarian kemiripan yang efisien. Didesain khusus untuk lingkungan GPU, GPU_IVF_PQ memanfaatkan pemrosesan paralel untuk mempercepat komputasi dan menangani data vektor berskala besar secara efektif. Untuk informasi lebih lanjut tentang konsep dasar, lihat IVF_PQ.

Membangun indeks

Untuk membangun indeks GPU_IVF_PQ 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_IVF_PQ", # 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={
        "m": 4, # Number of sub-vectors to split eahc vector into
    } # Index building params
)

Dalam konfigurasi ini:

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

  • metric_type: Metode yang digunakan untuk menghitung jarak antara vektor. Nilai yang didukung termasuk COSINE, L2, dan IP. Untuk detailnya, lihat Jenis Metrik.

  • params: Opsi konfigurasi tambahan untuk membangun indeks.

    • m: Jumlah sub-vektor yang akan dibagi menjadi vektor.

    Untuk mempelajari lebih lanjut parameter pembuatan yang tersedia untuk indeks GPU_IVF_PQ, 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": {
        "nprobe": 10, # Number of clusters to 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.

    • nprobe: Jumlah kluster yang akan dicari.

    Untuk mempelajari lebih lanjut parameter pencarian yang tersedia untuk indeks GPU_IVF_PQ, lihat Parameter pencarian khusus indeks.

Parameter indeks

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

Parameter pembangunan indeks

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

Parameter

Deskripsi

Rentang Nilai

Saran Penyetelan

IVF

nlist

Jumlah klaster yang akan dibuat menggunakan algoritme k-means selama pembuatan indeks.

Jenis: Rentang bilangan bulat: [1, 65536]

Nilai default: 128

Nilai nlist yang lebih besar meningkatkan daya ingat dengan membuat klaster yang lebih halus, tetapi meningkatkan waktu pembuatan indeks. Optimalkan berdasarkan ukuran set data dan sumber daya yang tersedia. Dalam kebanyakan kasus, kami sarankan Anda menetapkan nilai dalam kisaran ini: [32, 4096].

PQ

m

Jumlah sub-vektor (digunakan untuk kuantisasi) untuk membagi setiap vektor dimensi tinggi selama proses kuantisasi.

Jenis: Bilangan bulat Rentang: [1, 65536]

Nilai default: Tidak ada

Nilai m yang lebih tinggi dapat meningkatkan akurasi, tetapi juga meningkatkan kompleksitas komputasi dan penggunaan memori. m harus merupakan pembagi dimensi vektor(D) untuk memastikan penguraian yang tepat. Nilai yang umumnya direkomendasikan adalah m = D/2.

Dalam kebanyakan kasus, kami sarankan Anda menetapkan nilai dalam kisaran ini: [D/8, D].

nbits

Jumlah bit yang digunakan untuk merepresentasikan indeks centroid setiap sub-vektor dalam bentuk terkompresi. Ini secara langsung menentukan ukuran setiap codebook. Setiap codebook akan berisi centroid 2nbit. Sebagai contoh, jika nbits diatur ke 8, setiap sub-vektor akan diwakili oleh indeks centroid 8-bit. Hal ini memungkinkan28 (256) kemungkinan centroid dalam codebook untuk sub-vektor tersebut.

Jenis: Rentang Bilangan Bulat: [1, 24]

Nilai default: 8

Nilai nbits yang lebih tinggi memungkinkan codebook yang lebih besar, yang berpotensi menghasilkan representasi yang lebih akurat dari vektor asli. Namun, ini juga berarti menggunakan lebih banyak bit untuk menyimpan setiap indeks, yang menghasilkan kompresi yang lebih sedikit. Dalam kebanyakan kasus, kami sarankan Anda menetapkan nilai dalam kisaran ini: [1, 16].

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.

Jenis: Rentang String: ["true", "false"]

Nilai default: "false"

Mengaturnya ke "true" akan meningkatkan daya ingat dengan menyempurnakan hasil pencarian, tetapi menggunakan lebih banyak memori GPU. Mengaturnya ke "false" akan menghemat memori GPU.

Parameter pencarian khusus indeks

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

Parameter

Deskripsi

Rentang Nilai

Saran Penyetelan

IVF

nprobe

Jumlah cluster untuk mencari kandidat.

Tipe Bilangan bulat Rentang: [1, nlist]

Nilai default: 8

Nilai yang lebih tinggi memungkinkan lebih banyak klaster untuk dicari, meningkatkan daya ingat dengan memperluas cakupan pencarian, namun dengan biaya peningkatan latensi kueri. Tetapkan nprobe secara proporsional dengan nlist untuk menyeimbangkan kecepatan dan akurasi.

Pada kebanyakan kasus, kami menyarankan Anda menetapkan nilai dalam kisaran ini: [1, nlist].

Coba Milvus yang Dikelola secara Gratis

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

Mulai
Umpan balik

Apakah halaman ini bermanfaat?