Pilih pendekatan untuk mengoptimalkan penyimpanan dan pemrosesan vektor

Note

Pencarian Azure AI tersedia melalui portal Azure, REST API, dan Azure SDK. Ini juga mendukung Foundry IQ, lapisan pengetahuan terkelola yang mengubah konten perusahaan menjadi pangkalan pengetahuan yang dapat digunakan kembali dan sadar izin untuk agen di portal Microsoft Foundry.

Penyematan, atau representasi numerik dari konten heterogen, adalah dasar beban kerja pencarian vektor. Namun, ukuran embedding membuatnya sulit diperbesar skala dan memiliki biaya pemrosesan yang mahal. Penelitian dan produktifisasi yang signifikan telah menghasilkan beberapa solusi untuk meningkatkan skala dan mengurangi waktu pemrosesan. Pencarian Azure AI memanfaatkan sejumlah kemampuan ini untuk beban kerja vektor yang lebih cepat dan lebih murah.

Artikel ini membahas semua teknik pengoptimalan dalam Pencarian Azure AI yang dapat membantu Anda mengurangi ukuran vektor dan waktu pemrosesan kueri.

Anda menentukan pengaturan pengoptimalan vektor dalam definisi bidang vektor dalam indeks pencarian. Sebagian besar fitur yang dijelaskan dalam artikel ini umumnya tersedia dalam versi REST API latest yang stabil dan paket Azure SDK yang menargetkan versi tersebut.

Evaluasilah opsi

Tinjau pendekatan di Pencarian Azure AI untuk mengurangi jumlah penyimpanan yang digunakan oleh bidang vektor. Pendekatan ini tidak saling eksklusif, sehingga Anda dapat menggabungkannya untuk pengurangan maksimum dalam ukuran vektor.

Kami merekomendasikan kuantisasi bawaan karena mengompresi ukuran vektor dalam memori dan pada disk dengan upaya minimal. Pendekatan ini cenderung memberikan manfaat paling besar dalam sebagian besar skenario. Sebaliknya, jenis tipe data yang lebih sempit (kecuali untuk float16) memerlukan upaya khusus untuk membuatnya, dan stored menghemat penyimpanan disk, yang tidak semahal penyimpanan memori.

Pendekatan Mengapa menggunakan pendekatan ini
Menambahkan kuantisasi skalar atau biner Kompres penyematan float32 atau float16 asli ke int8 (skalar) atau byte (biner). Opsi ini mengurangi penyimpanan dalam memori dan pada disk tanpa penurunan performa kueri. Jenis data yang lebih kecil, seperti int8 atau byte, menghasilkan indeks vektor yang kurang kaya konten daripada yang memiliki penyematan yang lebih besar. Untuk mengimbangi kehilangan informasi, kompresi bawaan mencakup opsi untuk pemrosesan pasca-kueri dengan menggunakan penyematan yang tidak dikompresi dan pengambilan sampel berlebih untuk mengembalikan hasil yang lebih relevan. Reranking dan oversampling adalah fitur khusus dari kuantisasi bawaan bidang float32 atau float16 dan tidak dapat digunakan pada embedding yang menjalani kuantisasi kustom.
Memotong dimensi untuk model penyematan teks dengan kemampuan MRL-3 Gunakan lebih sedikit dimensi pada model text-embedding-3. Pada Azure OpenAI, model-model ini dilatih kembali pada teknik Matryoshka Representation Learning (MRL) yang menghasilkan beberapa representasi vektor pada tingkat kompresi yang berbeda. Pendekatan ini menghasilkan pencarian yang lebih cepat dan mengurangi biaya penyimpanan dengan kehilangan informasi semantik minimal. Dukungan MRL dalam Pencarian Azure AI melengkapi kuantisasi skalar dan biner. Saat Anda menggunakan salah satu metode kuantisasi, Anda juga dapat menentukan truncateDimension properti pada bidang vektor Anda untuk mengurangi dimensi penyematan teks.
Menetapkan jenis data primitif yang lebih kecil ke bidang vektor Jenis data sempit, seperti float16, int16, int8, dan byte (biner), menghabiskan lebih sedikit ruang dalam memori dan pada disk. Namun, Anda harus memiliki model penyematan yang menghasilkan vektor dalam format data sempit. Atau, Anda harus memiliki logika kuantisasi kustom yang menghasilkan data kecil. Kasus penggunaan ketiga yang membutuhkan lebih sedikit upaya adalah mengonversi ulang penyematan float 32 asli yang diproduksi oleh sebagian besar model ke float 16. Untuk informasi tentang vektor biner, lihat Vektor biner indeks.
Menghilangkan penyimpanan opsional vektor yang dapat diambil Vektor yang dikembalikan dalam respons kueri disimpan secara terpisah dari vektor yang digunakan selama eksekusi kueri. Jika Anda tidak perlu mengembalikan vektor, Anda dapat menonaktifkan penyimpanan yang dapat diambil untuk mengurangi penyimpanan disk per bidang secara keseluruhan hingga 50 persen.

Tentukan semua opsi ini pada indeks kosong. Untuk mengimplementasikan salah satunya, gunakan portal Azure, REST API, atau paket Azure SDK yang menargetkan versi API tersebut.

Setelah menentukan indeks, Anda dapat memuat dan mengindeks dokumen sebagai langkah terpisah.

Contoh: Ukuran vektor menurut teknik kompresi vektor

Opsi kuantisasi dan penyimpanan vektor menggunakan Python adalah sampel kode Python yang membuat beberapa indeks pencarian yang bervariasi menurut penggunaan kuantisasi penyimpanan vektor, jenis data sempit, dan properti penyimpanan.

Kode ini membuat dan membandingkan penyimpanan dan ukuran indeks vektor untuk setiap opsi pengoptimalan penyimpanan vektor. Dari hasil ini, Anda dapat melihat bahwa kuantisasi mengurangi ukuran vektor paling banyak, tetapi penghematan penyimpanan terbesar dicapai jika Anda menggunakan beberapa opsi.

Nama indeks Ukuran penyimpanan Ukuran vektor
compressiontest-baseline 21.3613 MB 4,8277 MB
uji-kompresi-scalar-kompresi 17.7604 MB 1.2242 MB
compressiontest-narrow 16.5567 MB 2.4254 MB
pengujiankompresi-tanpa-dipadatkan 10.9224 MB 4,8277 MB
uji kompresi-semua pilihan 4.9192 MB 1.2242 MB

REST API Layanan Pencarian melaporkan penyimpanan dan ukuran vektor di tingkat indeks, jadi Anda harus membandingkan indeks, bukan bidang. Gunakan Indexes - Dapatkan Statistik (REST API) atau API yang setara dalam Azure SDK untuk mendapatkan ukuran vektor.