Mengimplementasikan pengambilan dua menara untuk pembuatan kandidat berskala besar

Last reviewed 2025-01-16 UTC

Dokumen ini menyediakan arsitektur referensi yang menunjukkan cara menerapkan alur kerja pembuatan kandidat dua tower end-to-end dengan Vertex AI. Framework pemodelan dua tower adalah teknik pengambilan yang andal untuk kasus penggunaan personalisasi karena mempelajari kemiripan semantik antara dua entity yang berbeda, seperti kueri web dan item kandidat.

Dokumen ini ditujukan untuk praktisi teknis seperti data scientist dan engineer machine learning yang mengembangkan aplikasi rekomendasi skala besar dengan persyaratan penyaluran latensi rendah. Untuk mengetahui informasi selengkapnya tentang teknik pemodelan, pembingkaian masalah, dan persiapan data untuk membangun model dua tower, lihat Menskalakan deep retrieval dengan Pemberi Rekomendasi TensorFlow dan Vector Search.

Arsitektur

Diagram berikut menunjukkan arsitektur untuk melatih model dua tower dan men-deploy setiap tower secara terpisah untuk tugas deployment dan penyaluran yang berbeda:

Arsitektur untuk melatih model dua menara dan men-deploy setiap menara secara terpisah.

Arsitektur dalam diagram mencakup komponen berikut:

  • Data pelatihan: File pelatihan disimpan di Cloud Storage.
  • Pelatihan dua tower: Model dua tower gabungan dilatih secara offline menggunakan layanan Vertex AI Training; setiap tower disimpan secara terpisah dan digunakan untuk tugas yang berbeda.
  • Kueri terdaftar dan tower kandidat: Setelah tower dilatih, setiap tower diupload secara terpisah ke Vertex AI Model Registry.
  • Tower kueri yang di-deploy: Tower kueri terdaftar di-deploy ke endpoint online Vertex AI.
  • Embedding prediksi batch: Tower kandidat terdaftar digunakan dalam tugas prediksi batch untuk melakukan prakomputasi representasi embedding dari semua item kandidat yang tersedia.
  • JSON embedding: Embedding yang diprediksi disimpan ke file JSON di Cloud Storage.
  • Indeks ANN: Vertex AI Vector Search digunakan untuk membuat indeks penyaluran yang dikonfigurasi untuk penelusuran tetangga terdekat perkiraan (ANN).
  • Indeks yang di-deploy: Indeks ANN di-deploy ke endpoint indeks Vertex AI Vector Search.

Produk yang digunakan

Arsitektur referensi ini menggunakan produk berikut Google Cloud :

  • Vertex AI Training: Layanan pelatihan terkelola sepenuhnya yang memungkinkan Anda mengoperasikan pelatihan model skala besar.
  • Vector Search: Layanan pencocokan kesamaan vektor yang memungkinkan Anda menyimpan, mengindeks, dan menelusuri data yang mirip atau terkait secara semantik.
  • Vertex AI Model Registry: Repositori pusat tempat Anda dapat mengelola siklus proses model ML.
  • Cloud Storage: Penyimpanan objek berbiaya rendah dan tanpa batas untuk beragam jenis data. Data dapat diakses dari dalam dan luar Google Cloud, serta direplikasi di berbagai lokasi untuk redundansi.

Kasus penggunaan

Untuk memenuhi persyaratan penyaluran latensi rendah, pemberi rekomendasi skala besar sering di-deploy ke produksi sebagai sistem dua tahap atau terkadang sebagai sistem multi-tahap. Tujuan tahap pertama, pembuatan kandidat, adalah untuk menyaring koleksi besar item kandidat dan mengambil subset yang relevan dari ratusan item untuk tugas pemfilteran dan peringkat hilir. Untuk mengoptimalkan tugas pengambilan ini, pertimbangkan dua tujuan inti berikut:

  1. Selama pelatihan model, pelajari representasi terbaik dari masalah atau tugas yang akan diselesaikan, dan kompilasi representasi ini ke dalam <query, candidate> embedding.
  2. Selama penyaluran model, ambil item yang relevan dengan cukup cepat untuk memenuhi persyaratan latensi.

Diagram berikut menunjukkan komponen konseptual dari pemberi rekomendasi dua tahap:

Komponen konseptual pemberi rekomendasi dua tahap.

Dalam diagram, pembuatan kandidat memfilter jutaan item kandidat. Peringkat kemudian memfilter ratusan item kandidat yang dihasilkan untuk menampilkan lusinan item yang direkomendasikan.

Arsitektur referensi dalam dokumen ini melatih model pengambilan berbasis dua tower. Dalam arsitektur, setiap tower adalah jaringan neural yang memproses fitur item kueri atau kandidat, lalu menghasilkan representasi embedding dari fitur tersebut. Setiap tower di-deploy secara terpisah, karena setiap tower akan digunakan untuk tugas yang berbeda dalam produksi:

  • Tower kandidat: Tower kandidat digunakan untuk melakukan prakomputasi embedding untuk semua item kandidat. Embedding yang telah dihitung sebelumnya di-deploy ke endpoint indeks Vertex AI Vector Search yang dioptimalkan untuk pengambilan latensi rendah.
  • Tower yang di-deploy: Selama penyaluran online, tower kueri yang di-deploy mengonversi kueri pengguna mentah menjadi representasi embedding. Representasi embedding kemudian digunakan untuk mencari embedding item serupa dalam indeks yang di-deploy.

Arsitektur dua tower ideal untuk banyak tugas pengambilan karena arsitektur dua tower menangkap hubungan semantik dari entity kueri dan kandidat, serta memetakannya ke ruang embedding bersama. Saat entity dipetakan ke ruang embedding bersama, entity yang mirip secara semantik akan dikelompokkan lebih dekat. Oleh karena itu, jika Anda menghitung embedding vektor dari kueri tertentu, Anda dapat menelusuri ruang embedding untuk item kandidat terdekat (paling mirip). Manfaat utama dari arsitektur tersebut adalah kemampuan untuk memisahkan inferensi representasi kueri dan kandidat. Keuntungan dari pemisahan ini terutama ada dua:

  • Anda dapat menyalurkan item baru (terbaru) tanpa melatih ulang kosakata item baru. Dengan memasukkan kumpulan fitur item ke tower item kandidat, Anda dapat menghitung embedding item untuk kumpulan kandidat apa pun, bahkan yang tidak terlihat selama pelatihan. Melakukan komputasi ini membantu mengatasi masalah cold start.
    • Tower kandidat dapat mendukung kumpulan item kandidat arbitrer, termasuk item yang belum berinteraksi dengan sistem rekomendasi. Dukungan ini dimungkinkan karena arsitektur dua tower memproses fitur konten dan metadata yang kaya tentang setiap <query, candidate> pasangan. Jenis pemrosesan ini memungkinkan sistem mendeskripsikan item yang tidak diketahui dalam hal item yang diketahuinya.
  • Anda dapat mengoptimalkan inferensi pengambilan dengan melakukan prakomputasi semua embedding item kandidat. Embedding yang telah dihitung sebelumnya ini dapat diindeks dan di-deploy ke infrastruktur penyaluran yang dioptimalkan untuk pengambilan latensi rendah.
    • Pembelajaran bersama dari tower memungkinkan Anda mendeskripsikan item dalam hal kueri dan sebaliknya. Jika Anda memiliki satu bagian dari pasangan, seperti kueri, dan Anda perlu mencari item lain yang sesuai, Anda dapat melakukan prakomputasi setengah dari persamaan terlebih dahulu. Prakomputasi memungkinkan Anda membuat sisa keputusan secepat mungkin.

Pertimbangan desain

Bagian ini memberikan panduan untuk membantu Anda mengembangkan arsitektur pembuatan kandidat yang memenuhi kebutuhan keamanan dan performa Anda. Google Cloud Panduan di bagian ini tidak lengkap. Bergantung pada persyaratan spesifik Anda, Anda dapat memilih untuk mempertimbangkan faktor desain dan pertukaran tambahan.

Keamanan

Vertex AI Vector Search mendukung deployment endpoint publik dan Virtual Private Cloud (VPC). Jika Anda ingin menggunakan jaringan VPC, mulai dengan mengikuti Menyiapkan koneksi Peering Jaringan VPC. Jika indeks Vector Search di-deploy dalam perimeter VPC, pengguna harus mengakses resource terkait dari dalam jaringan VPC yang sama. Misalnya, jika Anda mengembangkan dari Vertex AI Workbench, Anda harus membuat instance workbench dalam jaringan VPC yang sama dengan endpoint indeks yang di-deploy. Demikian pula, pipeline apa pun yang diharapkan untuk membuat endpoint, atau men-deploy indeks ke endpoint, harus berjalan dalam jaringan VPC yang sama.

Pengoptimalan performa

Bagian ini menjelaskan faktor-faktor yang perlu dipertimbangkan saat Anda menggunakan arsitektur referensi ini untuk mendesain topologi yang memenuhi Google Cloud persyaratan performa workload Anda.

Tugas pelatihan profil

Untuk mengoptimalkan pipeline input data dan grafik pelatihan secara keseluruhan, sebaiknya buat profil performa pelatihan dengan Cloud Profiler. Profiler adalah implementasi terkelola dari TensorBoard Profiler open source .

Dengan meneruskan argumen –profiler dalam tugas pelatihan, Anda mengaktifkan callback TensorFlow untuk membuat profil sejumlah batch untuk setiap epoch. Profil ini menangkap pelacakan dari CPU host dan dari hardware GPU atau TPU perangkat. Pelacakan ini memberikan informasi tentang konsumsi resource tugas pelatihan. Untuk menghindari error kehabisan memori, sebaiknya mulai dengan durasi profil antara 2 dan 10 langkah pelatihan, lalu tingkatkan sesuai kebutuhan.

Untuk mempelajari cara menggunakan Profiler dengan Vertex AI Training dan Vertex AI TensorBoard, lihat Membuat profil performa pelatihan model. Untuk mengetahui praktik terbaik dalam proses debug, lihat Mengoptimalkan performa GPU. Untuk mengetahui informasi tentang cara mengoptimalkan performa, lihat Mengoptimalkan performa TensorFlow menggunakan Profiler.

Memanfaatkan akselerator sepenuhnya

Saat Anda melampirkan akselerator pelatihan seperti GPU NVIDIA atau Cloud TPU, penting untuk memastikan akselerator tersebut digunakan sepenuhnya. Penggunaan akselerator pelatihan secara penuh adalah praktik terbaik untuk pengelolaan biaya karena akselerator adalah komponen termahal dalam arsitektur. Penggunaan akselerator pelatihan secara penuh juga merupakan praktik terbaik untuk efisiensi tugas karena tidak adanya waktu idle akan menghasilkan konsumsi resource yang lebih sedikit secara keseluruhan.

Untuk memastikan akselerator digunakan sepenuhnya, Anda biasanya melakukan beberapa iterasi untuk menemukan bottleneck, mengoptimalkan bottleneck, lalu mengulangi langkah-langkah ini hingga penggunaan perangkat akselerator dapat diterima. Karena banyak set data untuk kasus penggunaan ini terlalu besar untuk dimuat ke dalam memori, bottleneck biasanya ditemukan antara penyimpanan, VM host, dan akselerator.

Diagram berikut menunjukkan tahapan konseptual dari pipeline input pelatihan ML:

Tahapan konseptual pipeline input pelatihan ML.

Dalam diagram, data dibaca dari penyimpanan dan diproses sebelumnya. Setelah data diproses sebelumnya, data akan dikirim ke perangkat. Untuk mengoptimalkan performa, mulailah dengan menentukan apakah performa keseluruhan dibatasi oleh CPU host atau oleh perangkat akselerator (GPU atau TPU). Perangkat bertanggung jawab untuk mempercepat loop pelatihan, sedangkan host bertanggung jawab untuk memasukkan data pelatihan ke perangkat dan menerima hasil dari perangkat. Bagian berikut menjelaskan cara mengatasi bottleneck dengan meningkatkan performa pipeline input dan performa perangkat.

Meningkatkan performa pipeline input
  • Membaca data dari penyimpanan: Untuk meningkatkan pembacaan data, coba caching, prefetching, pola akses berur5utan, dan I/O paralel.
  • Memproses data sebelumnya: Untuk meningkatkan pra-pemrosesan data, konfigurasikan pemrosesan paralel untuk ekstraksi dan transformasi data, serta sesuaikan interleave transformasi dalam pipeline input data.
  • Mengirim data ke perangkat: Untuk mengurangi waktu tugas secara keseluruhan, transfer data dari host ke beberapa perangkat secara paralel.
Meningkatkan performa perangkat
  • Meningkatkan ukuran mini-batch. Mini-batch adalah jumlah sampel pelatihan yang digunakan oleh setiap perangkat dalam satu iterasi loop pelatihan. Dengan meningkatkan ukuran mini-batch, Anda meningkatkan paralelisme antara operasi dan meningkatkan penggunaan ulang data. Namun, mini-batch harus dapat dimuat ke dalam memori bersama dengan program pelatihan lainnya. Jika Anda meningkatkan ukuran mini-batch terlalu banyak, Anda dapat mengalami error kehabisan memori dan divergensi model.
  • Memvektorisasi fungsi yang ditentukan pengguna. Biasanya, transformasi data dapat dinyatakan sebagai fungsi yang ditentukan pengguna yang menjelaskan cara mengubah setiap elemen set data input. Untuk memvektorisasi fungsi ini, Anda menerapkan operasi transformasi pada batch input sekaligus, bukan mengubah satu elemen pada satu waktu. Fungsi yang ditentukan pengguna memiliki overhead yang terkait dengan penjadwalan dan eksekusi. Saat Anda mengubah batch input, Anda akan dikenai overhead sekali per batch, bukan sekali per elemen set data.
Melakukan penskalaan sebelum melakukan penskalaan horizontal

Saat Anda mengonfigurasi resource komputasi untuk tugas pelatihan, sebaiknya lakukan penskalaan sebelum melakukan penskalaan horizontal. Artinya, Anda harus memilih perangkat yang lebih besar dan lebih canggih sebelum menggunakan beberapa perangkat yang kurang canggih. Sebaiknya lakukan penskalaan dengan cara berikut:

  1. Satu pekerja + satu perangkat
  2. Satu pekerja + perangkat yang lebih canggih
  3. Satu pekerja + beberapa perangkat
  4. Pelatihan terdistribusi

Untuk mengevaluasi manfaat penelusuran ANN, Anda dapat mengukur latensi dan perolehan kueri tertentu. Untuk membantu penyesuaian indeks, Vertex AI Vector Search menyediakan kemampuan untuk membuat indeks brute-force. Indeks brute-force akan melakukan penelusuran menyeluruh, dengan mengorbankan latensi yang lebih tinggi, untuk menemukan tetangga terdekat yang sebenarnya untuk vektor kueri tertentu. Penggunaan indeks brute-force tidak ditujukan untuk penggunaan produksi, tetapi memberikan dasar yang baik saat Anda menghitung perolehan selama penyesuaian indeks.

Untuk mengevaluasi perolehan terhadap latensi, Anda men-deploy embedding kandidat yang telah dihitung sebelumnya ke satu indeks yang dikonfigurasi untuk penelusuran ANN dan ke indeks lain yang dikonfigurasi untuk penelusuran brute-force. Indeks brute-force akan menampilkan tetangga terdekat absolut, tetapi biasanya akan membutuhkan waktu lebih lama daripada penelusuran ANN. Anda mungkin bersedia mengorbankan beberapa perolehan pengambilan untuk mendapatkan latensi pengambilan, tetapi pertukaran ini harus dievaluasi. Karakteristik tambahan yang memengaruhi perolehan dan latensi mencakup hal berikut:

  • Parameter pemodelan: Banyak keputusan pemodelan memengaruhi ruang embedding, yang pada akhirnya menjadi indeks penyaluran. Bandingkan kandidat yang diambil untuk indeks yang dibangun dari model pengambilan dangkal dan mendalam.
  • Dimensi: Dimensi adalah aspek lain yang pada akhirnya ditentukan oleh model. Dimensi indeks ANN harus cocok dengan dimensi vektor tower kueri dan kandidat.
  • Tag pengelompokan dan pemfilteran: Tag dapat memberikan kemampuan yang andal untuk menyesuaikan hasil untuk berbagai kasus penggunaan produksi. Sebaiknya pahami pengaruh tag terhadap kandidat yang diambil dan dampaknya terhadap performa.
  • Jumlah ANN: Meningkatkan nilai ini akan meningkatkan perolehan dan dapat meningkatkan latensi secara proporsional.
  • Persentase node daun yang akan ditelusuri: Persentase node daun yang akan ditelusuri adalah opsi paling penting untuk mengevaluasi pertukaran perolehan terhadap latensi Meningkatkan nilai ini akan meningkatkan perolehan dan dapat meningkatkan latensi secara proporsional.

Langkah berikutnya

Untuk mengetahui lebih banyak tentang arsitektur referensi, diagram, dan praktik terbaik lainnya, jelajahi Pusat Arsitektur Cloud.

Kontributor

Penulis:

Kontributor lainnya: Kaz Sato | Staff Developer Advocate