Infrastruktur untuk aplikasi AI generatif berkemampuan RAG menggunakan GKE

Last reviewed 2024-04-02 UTC

Dokumen ini memberikan arsitektur referensi yang dapat Anda gunakan untuk mendesain infrastruktur guna menjalankan aplikasi AI generatif dengan pembuatan yang ditingkatkan pengambilan (RAG) menggunakan Google Kubernetes Engine (GKE), Cloud SQL, dan alat open source seperti Ray, Hugging Face, dan LangChain. Untuk membantu Anda bereksperimen dengan arsitektur referensi ini, aplikasi contoh dan konfigurasi Terraform disediakan di GitHub.

Dokumen ini ditujukan untuk developer yang ingin membuat dan men-deploy aplikasi AI generatif yang kompatibel dengan RAG dengan cepat menggunakan alat dan model open source. Anda dianggap memiliki pengalaman menggunakan GKE dan Cloud SQL serta memiliki pemahaman konseptual tentang AI, machine learning (ML), dan model bahasa besar (LLM). Dokumen ini tidak memberikan panduan tentang cara mendesain dan mengembangkan aplikasi AI generatif.

Arsitektur

Diagram berikut menunjukkan tampilan tingkat tinggi arsitektur untuk aplikasi AI generatif yang kompatibel dengan RAG di Google Cloud:

Arsitektur tingkat tinggi untuk aplikasi AI generatif berkemampuan RAG di Google Cloud.

Arsitektur ini berisi subsistem penayangan dan subsistem penyematan.

  • Subsistem layanan menangani alur permintaan-respons antara aplikasi dan penggunanya. Subsistem ini mencakup server frontend, server inferensi, dan layanan AI yang bertanggung jawab (RAI). Subsistem penayangan berinteraksi dengan subsistem penyematan melalui database vektor.
  • Subsistem penyematan memungkinkan kemampuan RAG dalam arsitektur. Subsistem ini melakukan hal berikut:
    • Menyerap data dari sumber data di Google Cloud, infrastruktur lokal, dan platform cloud lainnya.
    • Mengonversi data yang diserap menjadi penyematan vektor.
    • Menyimpan embedding dalam database vektor.

Diagram berikut menunjukkan tampilan mendetail tentang arsitektur:

Arsitektur mendetail untuk aplikasi AI generatif berkemampuan RAG di Google Cloud.

Seperti yang ditunjukkan pada diagram sebelumnya, server frontend, server inferensi, dan layanan penyematan di-deploy di cluster GKE regional dalam mode Autopilot. Data untuk RAG diserap melalui bucket Cloud Storage. Arsitektur ini menggunakan instance Cloud SQL untuk PostgreSQL dengan ekstensi pgvector sebagai database vektor untuk menyimpan penyematan dan melakukan penelusuran semantik. Database vektor dirancang untuk menyimpan dan mengambil vektor berdimensi tinggi secara efisien.

Bagian berikut menjelaskan komponen dan aliran data dalam setiap subsistem arsitektur.

Menyematkan subsistem

Berikut adalah alur data dalam subsistem penyematan:

  1. Data dari sumber eksternal dan internal diupload ke bucket Cloud Storage oleh pengguna manusia atau secara terprogram. Data yang diupload mungkin berupa file, database, atau data streaming.
  2. (Tidak ditampilkan dalam diagram arsitektur.) Aktivitas upload data memicu peristiwa yang dipublikasikan ke layanan pesan seperti Pub/Sub. Layanan pesan mengirimkan notifikasi ke layanan penyematan.
  3. Saat menerima notifikasi peristiwa upload data, layanan penyematan akan melakukan hal berikut:
    1. Mengambil data dari bucket Cloud Storage melalui driver CSI Cloud Storage FUSE.
    2. Membaca data yang diupload dan memprosesnya sebelumnya menggunakan Ray Data. Pra-pemrosesan dapat mencakup pengelompokan data dan mengubahnya menjadi format yang sesuai untuk pembuatan penyematan.
    3. Menjalankan tugas Ray untuk membuat penyematan vektor dari data yang telah diproses sebelumnya menggunakan model open source seperti intfloat/multilingual-e5-small yang di-deploy di cluster yang sama.
    4. Menulis penyematan vektor ke database vektor Cloud SQL untuk PostgreSQL.

Seperti yang dijelaskan di bagian berikut, saat subsistem penayangan memproses permintaan pengguna, subsistem tersebut menggunakan penyematan dalam database vektor untuk mengambil data khusus domain yang relevan.

Subsistem penayangan

Berikut adalah alur permintaan-respons di subsistem penayangan:

  1. Pengguna mengirimkan permintaan bahasa alami ke server frontend melalui antarmuka chat berbasis web. Server frontend berjalan di GKE.
  2. Server frontend menjalankan proses LangChain yang melakukan hal berikut:
    1. Mengonversi permintaan bahasa alami ke penyematan menggunakan model dan parameter yang sama dengan yang digunakan layanan penyematan.
    2. Mengambil data dasar yang relevan dengan melakukan penelusuran semantik untuk embedding di database vektor. Penelusuran semantik membantu menemukan penyematan berdasarkan intent perintah, bukan konten tekstualnya.
    3. Membuat perintah yang dikontekstualisasikan dengan menggabungkan permintaan asli dengan data dasar yang diambil.
    4. Mengirim perintah yang dikontekstualisasikan ke server inferensi, yang berjalan di GKE.
  3. Server inferensi menggunakan framework penayangan Hugging Face TGI untuk menayangkan LLM open source seperti Mistral-7B-Instruct atau model terbuka Gemma.
  4. LLM menghasilkan respons terhadap perintah, dan server inferensi mengirim respons ke server frontend.

    Anda dapat menyimpan dan melihat log aktivitas permintaan-respons di Cloud Logging, dan Anda dapat menyiapkan pemantauan berbasis log menggunakan Cloud Monitoring. Anda juga dapat memuat respons yang dihasilkan ke dalam BigQuery untuk analisis offline.

  5. Server frontend memanggil layanan RAI untuk menerapkan filter keamanan yang diperlukan ke respons. Anda dapat menggunakan alat seperti Sensitive Data Protection dan Cloud Natural Language API untuk menemukan, memfilter, mengklasifikasikan, dan melakukan de-identifikasi konten sensitif dalam respons.

  6. Server frontend mengirimkan respons yang difilter kepada pengguna.

Produk yang digunakan

Berikut adalah ringkasan produk Google Cloud dan open source yang digunakan arsitektur sebelumnya:

Produk Google Cloud

  • Google Kubernetes Engine (GKE): Layanan Kubernetes yang dapat Anda gunakan untuk men-deploy dan mengoperasikan aplikasi dalam container dalam skala besar menggunakan infrastruktur Google.
  • Cloud Storage: Penyimpanan objek berbiaya rendah tanpa batas untuk berbagai jenis data. Data dapat diakses dari dalam dan luar Google Cloud, serta direplikasi di seluruh lokasi untuk redundansi.
  • Cloud SQL: Layanan database relasional yang terkelola sepenuhnya untuk membantu Anda menyediakan, mengoperasikan, dan mengelola database MySQL, PostgreSQL, dan SQL Server di Google Cloud.

Produk open source

Kasus penggunaan

RAG adalah teknik yang efektif untuk meningkatkan kualitas output yang dihasilkan dari LLM. Bagian ini memberikan contoh kasus penggunaan yang dapat Anda gunakan untuk aplikasi AI generatif yang kompatibel dengan RAG.

Rekomendasi produk yang dipersonalisasi

Situs belanja online mungkin menggunakan chatbot yang didukung LLM untuk membantu pelanggan menemukan produk atau mendapatkan bantuan terkait belanja. Pertanyaan dari pengguna dapat ditingkatkan dengan menggunakan data historis tentang perilaku pembelian pengguna dan pola interaksi situs. Data tersebut mungkin mencakup ulasan dan masukan pengguna yang disimpan di datastore tidak terstruktur atau metrik terkait penelusuran yang disimpan di data warehouse analisis web. Pertanyaan yang ditingkatkan kemudian dapat diproses oleh LLM untuk menghasilkan respons yang dipersonalisasi yang mungkin dianggap lebih menarik dan menarik oleh pengguna.

Sistem bantuan klinis

Dokter di rumah sakit perlu menganalisis dan mendiagnosis kondisi kesehatan pasien dengan cepat untuk membuat keputusan tentang perawatan dan pengobatan yang sesuai. Aplikasi AI generatif yang menggunakan LLM medis seperti Med-PaLM dapat digunakan untuk membantu dokter dalam proses diagnosis klinis mereka. Respons yang dihasilkan aplikasi dapat didasarkan pada rekam medis pasien historis dengan memberikan konteks pada perintah dokter dengan data dari database rekam medis elektronik (EHR) rumah sakit atau dari pusat informasi eksternal seperti PubMed.

Riset hukum yang didukung AI generatif memungkinkan pengacara membuat kueri dengan cepat untuk sejumlah besar statuta dan hukum kasus untuk mengidentifikasi preseden hukum yang relevan atau meringkas konsep hukum yang kompleks. Output riset tersebut dapat ditingkatkan dengan meningkatkan perintah pengacara dengan data yang diambil dari korpus kontrak eksklusif firma hukum, komunikasi hukum sebelumnya, dan catatan kasus internal. Pendekatan desain ini memastikan bahwa respons yang dihasilkan relevan dengan domain hukum yang menjadi spesialisasi pengacara.

Pertimbangan desain

Bagian ini memberikan panduan untuk membantu Anda mengembangkan dan menjalankan arsitektur AI generatif yang kompatibel dengan RAG dan dihosting GKE yang memenuhi persyaratan khusus Anda terkait keamanan dan kepatuhan, keandalan, biaya, dan performa. Panduan di bagian ini tidak lengkap. Bergantung pada persyaratan khusus aplikasi Anda serta produk dan fitur Google Cloud yang Anda gunakan, Anda mungkin perlu mempertimbangkan faktor desain dan kompromi tambahan.

Untuk panduan desain yang terkait dengan alat open source dalam arsitektur referensi ini, seperti Hugging Face TGI, lihat dokumentasi untuk alat tersebut.

Keamanan, privasi, dan kepatuhan:

Bagian ini menjelaskan faktor yang harus Anda pertimbangkan saat mendesain dan mem-build aplikasi AI generatif yang kompatibel dengan RAG di Google Cloud yang memenuhi persyaratan keamanan, privasi, dan kepatuhan Anda.

Produk Pertimbangan desain
GKE

Dalam mode operasi Autopilot, GKE mengonfigurasi cluster Anda terlebih dahulu dan mengelola node sesuai dengan praktik terbaik keamanan, yang memungkinkan Anda berfokus pada keamanan khusus workload. Untuk informasi selengkapnya, lihat referensi berikut:

Untuk memastikan kontrol akses yang ditingkatkan untuk aplikasi yang berjalan di GKE, Anda dapat menggunakan Identity-Aware Proxy (IAP). IAP terintegrasi dengan resource GKE Ingress dan memastikan bahwa hanya pengguna terautentikasi dengan peran Identity and Access Management (IAM) yang benar yang dapat mengakses aplikasi. Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan IAP untuk GKE.

Secara default, data Anda di GKE dienkripsi saat dalam penyimpanan dan saat dalam pengiriman menggunakan kunci milik dan dikelola Google. Sebagai lapisan keamanan tambahan untuk data sensitif, Anda dapat mengenkripsi data di lapisan aplikasi menggunakan kunci yang Anda miliki dan kelola dengan Cloud KMS. Untuk mengetahui informasi selengkapnya, lihat Mengenkripsi secret di lapisan aplikasi.

Jika menggunakan cluster GKE Standard, Anda dapat menggunakan kemampuan enkripsi data tambahan berikut:

Cloud SQL

Instance Cloud SQL dalam arsitektur tidak perlu dapat diakses dari internet publik. Jika akses eksternal ke instance Cloud SQL diperlukan, Anda dapat mengenkripsi koneksi eksternal menggunakan SSL/TLS atau konektor Proxy Auth Cloud SQL. Konektor Auth Proxy memberikan otorisasi koneksi menggunakan IAM. Konektor ini menggunakan koneksi TLS 1.3 dengan cipher AES 256-bit untuk memverifikasi identitas klien dan server serta mengenkripsi traffic data. Untuk koneksi yang dibuat menggunakan Java, Python, Go, atau Node.js, gunakan Konektor Bahasa yang sesuai, bukan konektor Proxy Auth.

Secara default, Cloud SQL menggunakan kunci enkripsi data (DEK) dan kunci enkripsi kunci (KEK) yang dimiliki dan dikelola Google untuk mengenkripsi data dalam penyimpanan. Jika perlu menggunakan KEK yang Anda kontrol dan kelola, Anda dapat menggunakan kunci enkripsi yang dikelola pelanggan (CMEK).

Untuk mencegah akses tidak sah ke Cloud SQL Admin API, Anda dapat membuat perimeter layanan menggunakan Kontrol Layanan VPC.

Untuk informasi tentang cara mengonfigurasi Cloud SQL guna membantu memenuhi persyaratan residensi data, lihat Ringkasan residensi data.

Cloud Storage

Secara default, data yang disimpan di Cloud Storage dienkripsi menggunakan kunci milik dan dikelola Google. Jika diperlukan, Anda dapat menggunakan CMEK atau kunci Anda sendiri yang dikelola menggunakan metode pengelolaan eksternal seperti kunci enkripsi yang disediakan pelanggan (CSEK). Untuk mengetahui informasi selengkapnya, lihat Opsi enkripsi data.

Cloud Storage mendukung dua metode untuk mengontrol akses pengguna ke bucket dan objek Anda: IAM dan daftar kontrol akses (ACL). Dalam sebagian besar kasus, sebaiknya gunakan IAM, yang memungkinkan Anda memberikan izin di tingkat bucket dan project. Untuk mengetahui informasi selengkapnya, lihat Ringkasan kontrol akses.

Data yang Anda muat ke subsistem penyerapan data melalui Cloud Storage mungkin menyertakan data sensitif. Untuk melindungi data tersebut, Anda dapat menggunakan Perlindungan Data Sensitif untuk menemukan, mengklasifikasikan, dan melakukan de-identifikasi data. Untuk mengetahui informasi selengkapnya, lihat Menggunakan Perlindungan Data Sensitif dengan Cloud Storage.

Untuk memitigasi risiko pemindahan data yang tidak sah dari Cloud Storage, Anda dapat membuat perimeter layanan menggunakan Kontrol Layanan VPC.

Cloud Storage membantu Anda memenuhi persyaratan residensi data. Data disimpan atau direplikasi dalam region yang Anda tentukan.

Semua produk dalam arsitektur ini

Log audit Aktivitas Admin diaktifkan secara default untuk semua layanan Google Cloud yang digunakan dalam arsitektur referensi ini. Anda dapat mengakses log melalui Cloud Logging dan menggunakan log untuk memantau panggilan API atau tindakan lain yang mengubah konfigurasi atau metadata resource Google Cloud.

Log audit Akses Data juga diaktifkan secara default untuk semua layanan Google Cloud dalam arsitektur ini. Anda dapat menggunakan log ini untuk memantau hal berikut:

  • Panggilan API yang membaca konfigurasi atau metadata resource.
  • Permintaan pengguna untuk membuat, mengubah, atau membaca data resource yang disediakan pengguna.

Untuk panduan umum tentang prinsip keamanan yang perlu dipertimbangkan untuk aplikasi AI, lihat Memperkenalkan Framework AI Aman Google.

Keandalan

Bagian ini menjelaskan faktor desain yang harus Anda pertimbangkan untuk mem-build dan mengoperasikan infrastruktur yang andal untuk aplikasi AI generatif yang kompatibel dengan RAG di Google Cloud.

Produk Pertimbangan desain
GKE

Dengan mode operasi Autopilot yang digunakan dalam arsitektur ini, GKE menyediakan kemampuan keandalan bawaan berikut:

  • Beban kerja Anda menggunakan cluster GKE regional. Bidang kontrol dan node pekerja tersebar di tiga zona berbeda dalam suatu region. Workload Anda tahan terhadap pemadaman layanan zona. Cluster GKE regional memiliki SLA waktu beroperasi yang lebih tinggi daripada cluster zona.
  • Anda tidak perlu membuat node atau mengelola node pool. GKE akan otomatis membuat node pool dan menskalakannya secara otomatis berdasarkan persyaratan workload Anda.

Untuk memastikan kapasitas GPU yang memadai tersedia saat diperlukan untuk menskalakan cluster GKE secara otomatis, Anda dapat membuat dan menggunakan reservasi. Reservasi memberikan kapasitas yang pasti di zona tertentu untuk resource yang ditentukan. Reservasi dapat bersifat khusus untuk satu project, atau dibagikan di beberapa project. Anda dikenai biaya untuk resource yang direservasi meskipun resource tersebut tidak disediakan atau digunakan. Untuk informasi selengkapnya, lihat Menggunakan resource zona yang dicadangkan.

Cloud SQL

Untuk memastikan database vektor tahan terhadap kegagalan database dan pemadaman layanan zona, gunakan instance Cloud SQL yang dikonfigurasi HA. Jika terjadi kegagalan database utama atau pemadaman layanan zona, Cloud SQL akan otomatis gagal terhubung ke database standby di zona lain. Anda tidak perlu mengubah alamat IP untuk endpoint database.

Untuk memastikan bahwa instance Cloud SQL Anda tercakup dalam SLA, ikuti panduan operasional yang direkomendasikan. Misalnya, pastikan CPU dan memori memiliki ukuran yang sesuai untuk workload, dan aktifkan peningkatan penyimpanan otomatis. Untuk mengetahui informasi selengkapnya, lihat Panduan operasional.

Cloud Storage Anda dapat membuat bucket Cloud Storage di salah satu dari tiga jenis lokasi: regional, dual-region, atau multi-region. Data yang disimpan di bucket regional direplikasi secara sinkron di beberapa zona dalam satu region. Untuk ketersediaan yang lebih tinggi, Anda dapat menggunakan bucket region ganda atau multi-region, tempat data direplikasi secara asinkron di seluruh region.

Pengoptimalan biaya

Bagian ini berisi panduan untuk membantu Anda mengoptimalkan biaya penyiapan dan operasi aplikasi AI generatif yang kompatibel dengan RAG di Google Cloud.

Produk Pertimbangan desain
GKE

Dalam mode Autopilot, GKE mengoptimalkan efisiensi infrastruktur cluster Anda berdasarkan persyaratan beban kerja. Anda tidak perlu terus memantau penggunaan resource atau mengelola kapasitas untuk mengontrol biaya.

Jika dapat memprediksi penggunaan CPU, memori, dan penyimpanan sementara cluster GKE Autopilot, Anda dapat menghemat uang dengan mendapatkan diskon untuk penggunaan yang dikomitmenkan. Untuk informasi selengkapnya, lihat Diskon abonemen GKE.

Untuk mengurangi biaya menjalankan aplikasi, Anda dapat menggunakan VM Spot untuk node GKE. Harga Spot VM lebih rendah daripada VM standar, tetapi tidak memberikan jaminan ketersediaan. Untuk mengetahui informasi tentang manfaat node yang menggunakan Spot VM, cara kerjanya di GKE, dan cara menjadwalkan beban kerja di node tersebut, lihat Spot VM.

Untuk panduan pengoptimalan biaya lainnya, lihat Praktik terbaik untuk menjalankan aplikasi Kubernetes yang hemat biaya di GKE.

Cloud SQL

Konfigurasi ketersediaan tinggi (HA) membantu mengurangi periode nonaktif untuk database Cloud SQL saat zona atau instance menjadi tidak tersedia. Namun, biaya instance yang dikonfigurasi dengan HA lebih tinggi daripada biaya instance mandiri. Jika tidak memerlukan HA untuk database vektor, Anda dapat mengurangi biaya dengan menggunakan instance mandiri, yang tidak tahan terhadap pemadaman zona.

Anda dapat mendeteksi apakah instance Cloud SQL Anda disediakan secara berlebih dan mengoptimalkan penagihan dengan menggunakan insight dan rekomendasi biaya Cloud SQL yang didukung oleh Active Assist. Untuk informasi selengkapnya, lihat Mengurangi instance Cloud SQL yang disediakan secara berlebihan.

Jika dapat memprediksi persyaratan CPU dan memori instance Cloud SQL, Anda dapat menghemat uang dengan mendapatkan diskon untuk penggunaan terpakai. Untuk informasi selengkapnya, lihat Diskon abonemen Cloud SQL.

Cloud Storage Untuk bucket Cloud Storage yang Anda gunakan untuk memuat data ke dalam subsistem penyerapan data, pilih kelas penyimpanan yang sesuai. Saat memilih kelas penyimpanan, pertimbangkan persyaratan retensi data dan frekuensi akses workload Anda. Misalnya, untuk mengontrol biaya penyimpanan, Anda dapat memilih class Standar dan menggunakan Object Lifecycle Management. Tindakan ini memungkinkan downgrade otomatis objek ke kelas penyimpanan berbiaya lebih rendah atau penghapusan objek berdasarkan kondisi yang Anda tetapkan.

Untuk memperkirakan biaya resource Google Cloud, gunakan Kalkulator Harga Google Cloud.

Pengoptimalan performa

Bagian ini menjelaskan faktor-faktor yang harus Anda pertimbangkan saat mendesain dan mem-build aplikasi AI generatif yang kompatibel dengan RAG di Google Cloud yang memenuhi persyaratan performa Anda.

Produk Pertimbangan desain
GKE Pilih class komputasi yang sesuai untuk Pod Anda berdasarkan persyaratan performa beban kerja. Untuk Pod yang menjalankan server inferensi dan layanan penyematan, sebaiknya gunakan jenis mesin GPU seperti nvidia-l4.
Cloud SQL

Untuk mengoptimalkan performa instance Cloud SQL, pastikan CPU dan memori yang dialokasikan ke instance memadai untuk beban kerja. Untuk informasi selengkapnya, lihat Mengoptimalkan instance Cloud SQL yang tidak disediakan.

Untuk meningkatkan waktu respons penelusuran vektor perkiraan tetangga terdekat (ANN), gunakan indeks Inverted File with Flat Compression (IVFFlat) atau indeks Hierarchical Navigable Small World (HNSW)

Untuk membantu Anda menganalisis dan meningkatkan performa kueri database, Cloud SQL menyediakan alat Query Insights. Anda dapat menggunakan alat ini untuk memantau performa dan melacak sumber kueri yang bermasalah. Untuk informasi selengkapnya, lihat Menggunakan Insight kueri untuk meningkatkan performa kueri.

Untuk mendapatkan ringkasan status dan performa database Anda serta melihat metrik mendetail seperti koneksi puncak dan penggunaan disk, Anda dapat menggunakan dasbor Insight Sistem. Untuk mengetahui informasi selengkapnya, lihat Menggunakan Insight sistem untuk meningkatkan performa sistem.

Cloud Storage Untuk mengupload file besar, Anda dapat menggunakan metode yang disebut upload komposit paralel. Dengan strategi ini, file besar dibagi menjadi beberapa bagian. Potongan diupload ke Cloud Storage secara paralel, lalu data direkomposisi di cloud. Jika bandwidth jaringan dan kecepatan disk bukan merupakan faktor pembatas, upload komposit paralel dapat lebih cepat daripada operasi upload reguler. Namun, strategi ini memiliki beberapa keterbatasan dan implikasi biaya. Untuk mengetahui informasi selengkapnya, lihat Upload gabungan paralel.

Deployment

Untuk men-deploy topologi yang didasarkan pada arsitektur referensi ini, Anda dapat mendownload dan menggunakan kode contoh open source yang tersedia di repositori di GitHub. Kode contoh tidak dimaksudkan untuk kasus penggunaan produksi. Anda dapat menggunakan kode ini untuk bereksperimen dengan menyiapkan infrastruktur AI untuk aplikasi AI generatif yang mendukung RAG.

Kode contoh menjalankan hal berikut:

  1. Menyediakan instance Cloud SQL untuk PostgreSQL yang berfungsi sebagai database vektor.
  2. Men-deploy Ray, JupyterHub, dan Hugging Face TGI ke cluster GKE yang Anda tentukan.
  3. Men-deploy aplikasi chatbot berbasis web sampel ke cluster GKE Anda agar Anda dapat memverifikasi kemampuan RAG.

Untuk petunjuk cara menggunakan kode contoh, lihat README untuk kode tersebut. Jika terjadi error saat Anda menggunakan kode contoh, dan jika tidak ada masalah GitHub yang terbuka untuk error tersebut, buat masalah di GitHub.

Kode contoh men-deploy resource Google Cloud yang dapat ditagih. Setelah selesai menggunakan kode, hapus resource yang tidak lagi Anda perlukan.

Langkah selanjutnya

Kontributor

Penulis: Kumar Dhanagopal | Developer Solusi Lintas Produk

Kontributor lainnya: