Tutorial ini menunjukkan cara men-deploy dan mengelola aplikasi AI/ML agentik dalam container menggunakan Google Kubernetes Engine (GKE). Dengan menggabungkan Google Agent Development Kit (ADK) dengan model bahasa besar (LLM) yang dihosting sendiri seperti Llama 3.1 yang ditayangkan oleh vLLM, Anda dapat mengoperasionalkan agen AI secara efisien dan dalam skala besar sambil mempertahankan kontrol penuh atas stack model. Tutorial ini memandu Anda melalui proses end-to-end untuk membawa agen berbasis Python dari pengembangan ke deployment produksi di cluster GKE Autopilot dengan akselerasi GPU.
Tutorial ini ditujukan untuk Engineer machine learning (ML), Developer, dan Arsitek cloud yang tertarik untuk menggunakan kemampuan orkestrasi container Kubernetes untuk menyajikan aplikasi AI/ML agentik. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam Google Cloud konten, lihat Peran dan tugas pengguna GKE Enterprise umum.
Sebelum memulai, pastikan Anda memahami hal-hal berikut:
Latar belakang
Bagian ini menjelaskan teknologi utama yang digunakan dalam tutorial ini.
Agent Development Kit (ADK)
Agent Development Kit (ADK) adalah framework fleksibel dan modular untuk mengembangkan dan men-deploy agen AI. Meskipun dioptimalkan untuk Gemini dan ekosistem Google, ADK tidak mengharuskan Anda menggunakan model atau deployment tertentu, dan dibuat agar kompatibel dengan framework lain. ADK dirancang agar pengembangan agen terasa lebih seperti pengembangan software, sehingga memudahkan developer membuat, men-deploy, dan mengorkestrasi arsitektur agentic yang berkisar dari tugas dasar hingga alur kerja yang kompleks.
Untuk mengetahui informasi selengkapnya, lihat dokumentasi ADK.
Layanan Kubernetes terkelola GKE
Google Cloud menawarkan berbagai layanan, termasuk GKE, yang sangat cocok untuk men-deploy dan mengelola workload AI/ML. GKE adalah layanan Kubernetes terkelola yang menyederhanakan deployment, penskalaan, dan pengelolaan aplikasi dalam container. GKE menyediakan infrastruktur yang diperlukan, termasuk resource yang skalabel, komputasi terdistribusi, dan jaringan yang efisien, untuk menangani permintaan komputasi LLM.
Untuk mengetahui informasi selengkapnya tentang konsep utama Kubernetes, lihat Mulai mempelajari Kubernetes. Untuk mengetahui informasi selengkapnya tentang GKE dan cara GKE membantu Anda melakukan penskalaan, mengotomatiskan, dan mengelola Kubernetes, lihat Ringkasan GKE.
vLLM
vLLM adalah framework penayangan LLM open source yang sangat dioptimalkan yang dapat meningkatkan throughput penayangan di GPU, dengan fitur seperti berikut:
- Implementasi transformer yang dioptimalkan dengan PagedAttention.
- Batch berkelanjutan untuk meningkatkan throughput penayangan secara keseluruhan.
- Paralelisme tensor dan inferensi terdistribusi pada beberapa GPU.
Untuk mengetahui informasi selengkapnya, lihat dokumentasi vLLM.
Menyiapkan lingkungan
Tutorial ini menggunakan Cloud Shell untuk mengelola resource yang dihosting di Google Cloud.
Cloud Shell telah diinstal dengan software yang Anda perlukan untuk tutorial ini, termasuk kubectl
, terraform
, dan Google Cloud CLI
.
Untuk menyiapkan lingkungan Anda dengan Cloud Shell, ikuti langkah-langkah berikut:
- Di Google Cloud konsol, luncurkan sesi Cloud Shell dan klik
Activate Cloud Shell. Tindakan ini meluncurkan sesi di panel konsol Google Cloud .
Tetapkan variabel lingkungan default:
gcloud config set project PROJECT_ID export GOOGLE_CLOUD_REGION=REGION export PROJECT_ID=PROJECT_ID
Ganti nilai berikut:
- PROJECT_ID: Google Cloud project ID Anda.
- REGION: Google Cloud region
(misalnya,
us-east4
) untuk menyediakan cluster GKE, Artifact Registry, dan resource regional lainnya. Pastikan untuk menentukan region yang mendukung GPU L4 dan instance jenis mesin G2. Untuk memeriksa ketersediaan region, lihat Region dan zona GPU dalam dokumentasi Compute Engine.
Meng-clone project contoh
Dari terminal Cloud Shell, clone repositori kode contoh tutorial:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
Buka direktori tutorial:
cd kubernetes-engine-samples/ai-ml/adk-vllm
Membuat dan mengonfigurasi resource Google Cloud
Untuk men-deploy agen, Anda harus melakukan provisioning resource Google Cloud yang diperlukan terlebih dahulu. Anda dapat membuat cluster GKE dan repositori Artifact Registry menggunakan gcloud CLI atau Terraform.
gcloud
Bagian ini menyediakan perintah gcloud CLI untuk menyiapkan cluster GKE dan Artifact Registry.
Buat cluster GKE: Anda dapat men-deploy aplikasi agentik yang di-containerisasi di cluster GKE Autopilot atau Standard. Gunakan cluster Autopilot untuk pengalaman Kubernetes yang terkelola sepenuhnya. Untuk memilih mode operasi GKE yang paling sesuai dengan workload Anda, lihat Tentang mode operasi GKE.
Autopilot
Jalankan perintah berikut di Cloud Shell:
gcloud container clusters create-auto CLUSTER_NAME \ --location=$GOOGLE_CLOUD_REGION
Ganti CLUSTER_NAME dengan nama cluster GKE Anda.
Dengan Autopilot, GKE secara otomatis menyediakan node berdasarkan permintaan resource workload Anda. GPU yang diperlukan untuk LLM diminta dalam manifes
deploy-llm.yaml
dengan menggunakannodeSelector
.Untuk menambahkan permintaan
nodeSelector
ke GPUnvidia-l4
, ikuti langkah-langkah berikut:- Buka
kubernetes-engine-samples/ai-ml/adk-vllm/deploy-llm/deploy-llm.yaml
di editor. Tambahkan
nodeSelector
berikut di bagianspec.template.spec
:nodeSelector: cloud.google.com/gke-accelerator: nvidia-l4
Standar
Di Cloud Shell, buat cluster Standard dengan menjalankan perintah berikut:
gcloud container clusters create CLUSTER_NAME \ --location=$GOOGLE_CLOUD_REGION
Ganti CLUSTER_NAME dengan nama cluster GKE Anda.
Buat node pool yang mendukung GPU untuk cluster Anda dengan menjalankan perintah berikut:
gcloud container node-pools create gpu-node-pool \ --cluster=CLUSTER_NAME \ --location=$GOOGLE_CLOUD_REGION \ --machine-type=g2-standard-8 \ --accelerator=type=nvidia-l4,count=1 \ --enable-gvnic
File
deploy-llm.yaml
menentukan GPUnvidia-l4
, yang tersedia di seri mesin G2. Untuk mengetahui informasi selengkapnya tentang jenis mesin ini, lihat Jenis mesin GPU dalam dokumentasi Compute Engine.
- Buka
Buat repositori Artifact Registry: Buat repositori Artifact Registry untuk menyimpan dan mengelola image container Docker agen Anda secara aman.
gcloud artifacts repositories create REPO_NAME \ --repository-format=docker \ --location=$GOOGLE_CLOUD_REGION
Ganti REPO_NAME dengan nama repositori Artifact Registry yang ingin Anda gunakan (misalnya,
adk-repo
).Dapatkan URL repositori: Untuk memverifikasi jalur lengkap ke repositori Anda, jalankan perintah ini. Anda akan menggunakan format ini untuk memberi tag pada image Docker saat membangun image agen.
gcloud artifacts repositories describe REPO_NAME \ --location $GOOGLE_CLOUD_REGION
Terraform
Bagian ini menjelaskan cara menggunakan konfigurasi Terraform yang disertakan dalam repositori contoh untuk menyediakan resource Google Cloud Anda secara otomatis.
Buka direktori Terraform: Direktori
\terraform
berisi semua file konfigurasi yang diperlukan untuk membuat cluster GKE dan resource lain yang diperlukan.cd terraform
Buat file variabel Terraform: Salin contoh file variabel (
example_vars.tfvars
) yang disediakan untuk membuat filevars.tfvars
Anda sendiri.cp example_vars.tfvars vars.tfvars
Buka file
vars.tfvars
di editor dan ganti nilai placeholder dengan konfigurasi spesifik Anda. Minimal, Anda harus mengganti PROJECT_ID dengan ID project Google Cloud Anda dan CLUSTER_NAME dengan nama cluster GKE Anda.Lakukan inisialisasi Terraform: Untuk mendownload plugin penyedia yang diperlukan untuk Google Cloud, jalankan perintah ini.
terraform init
Tinjau rencana eksekusi: Perintah ini menunjukkan perubahan infrastruktur yang akan dilakukan Terraform.
terraform plan -var-file=vars.tfvars
Terapkan konfigurasi: Untuk membuat resource di project Google Cloud , jalankan rencana Terraform. Konfirmasi dengan
yes
saat diminta.terraform apply -var-file=vars.tfvars
Setelah Anda menjalankan perintah ini, Terraform akan menyediakan cluster GKE dan repositori Artifact Registry, serta mengonfigurasi peran dan akun layanan IAM yang diperlukan, termasuk Federasi Workload Identity untuk GKE.
Untuk mempelajari lebih lanjut cara menggunakan Terraform, lihat Menyediakan resource GKE dengan Terraform.
Konfigurasi kubectl
untuk berkomunikasi dengan cluster Anda
Untuk mengonfigurasi kubectl
agar dapat berkomunikasi dengan cluster Anda, jalankan perintah
berikut:
gcloud container clusters get-credentials CLUSTER_NAME \
--location=${GOOGLE_CLOUD_REGION}
Ganti CLUSTER_NAME dengan nama cluster GKE Anda.
Membangun image agen
Setelah Anda membuat infrastruktur menggunakan gcloud CLI atau Terraform, ikuti langkah-langkah berikut untuk membangun aplikasi agen Anda.
Berikan peran IAM yang diperlukan untuk Cloud Build: Layanan Cloud Build memerlukan izin untuk mengirim image container agen ke Artifact Registry. Berikan peran
roles/artifactregistry.writer
ke akun layanan default Compute Engine, yang digunakan oleh Cloud Build.Buat email untuk akun layanan default Compute Engine:
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)") export COMPUTE_SA_EMAIL=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com
Berikan peran
roles/artifactregistry.writer
ke akun layanan:gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:${COMPUTE_SA_EMAIL} \ --role=roles/artifactregistry.writer
Bangun dan kirim image container agen: Dari direktori root project (
adk/llama/vllm
), bangun image Docker Anda dan kirim ke Artifact Registry dengan menjalankan perintah berikut.export IMAGE_URL="${GOOGLE_CLOUD_REGION}-docker.pkg.dev/${PROJECT_ID}/REPO_NAME/adk-agent:latest" gcloud builds submit --tag $IMAGE_URL
Verifikasi bahwa image telah dikirim: Setelah proses build berhasil diselesaikan, verifikasi bahwa image container agen Anda telah dikirim ke Artifact Registry dengan mencantumkan image di repositori Anda.
gcloud artifacts docker images list ${GOOGLE_CLOUD_REGION}-docker.pkg.dev/${PROJECT_ID}/REPO_NAME
Anda akan melihat output yang mencantumkan gambar yang baru saja Anda kirim dan diberi tag sebagai
latest
.
Men-deploy model
Setelah menyiapkan cluster GKE dan membuat image agen, langkah berikutnya adalah men-deploy model Llama 3.1 yang dihosting sendiri ke cluster Anda. Untuk melakukannya, deploy server inferensi vLLM yang telah dikonfigurasi sebelumnya yang menarik model dari Hugging Face dan menyajikannya secara internal dalam cluster.
Buat secret Kubernetes untuk kredensial Hugging Face: Untuk mengizinkan cluster GKE mendownload model Llama 3.1 yang dibatasi, Anda harus memberikan token Hugging Face sebagai secret Kubernetes. Manifes
deploy-llm.yaml
dikonfigurasi untuk menggunakan rahasia ini untuk autentikasi.kubectl create secret generic hf-secret \ --from-literal=hf-token-secret=HUGGING_FACE_TOKEN
Ganti HUGGING_FACE_TOKEN dengan token Anda.
Lihat manifes: Dari direktori root project (
adk/llama/vllm
), buka direktori/deploy-llm
yang berisi manifes Deployment model.cd deploy-llm
Terapkan manifes: Jalankan perintah berikut untuk menerapkan manifes
deploy-llm.yaml
ke cluster Anda.kubectl apply -f deploy-llm.yaml
Perintah ini akan membuat tiga resource Kubernetes:
- Deployment yang menjalankan server vLLM, yang dikonfigurasi untuk menggunakan model
meta-llama/Llama-3.1-8B-Instruct
. - Layanan bernama
vllm-llama3-service
yang mengekspos server vLLM di alamat IP cluster internal, sehingga memungkinkan agen ADK berkomunikasi dengannya. - ConfigMap yang berisi template chat Jinja yang diperlukan oleh model Llama 3.1.
- Deployment yang menjalankan server vLLM, yang dikonfigurasi untuk menggunakan model
Verifikasi Deployment model: Server vLLM menarik file model dari Hugging Face. Proses ini dapat memerlukan waktu beberapa menit. Anda dapat memantau status Pod untuk memastikan kesiapannya.
Tunggu hingga Deployment tersedia.
kubectl wait --for=condition=available --timeout=600s deployment/vllm-llama3-deployment
Lihat log dari Pod yang sedang berjalan untuk mengonfirmasi bahwa server berhasil dimulai.
export LLM_POD=$(kubectl get pods -l app=vllm-llama3 -o jsonpath='{.items[0].metadata.name}') kubectl logs -f $LLM_POD
Deployment siap saat Anda melihat output log yang mirip dengan berikut ini, yang menunjukkan bahwa server LLM telah dimulai dan rute API tersedia:
INFO 07-16 14:15:16 api_server.py:129] Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
Kirim permintaan langsung ke server model untuk mengonfirmasi bahwa LLM sudah siap. Untuk melakukannya, buka terminal Cloud Shell baru dan jalankan perintah berikut untuk meneruskan
vllm-llama3-service
ke komputer lokal Anda:kubectl port-forward service/vllm-llama3-service 8000:8000
Di terminal lain, kirim permintaan sampel ke endpoint API model menggunakan
curl
. Contoh:curl -X POST http://localhost:8000/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "meta-llama/Llama-3.1-8B-Instruct", "prompt": "Hello!", "max_tokens": 10 }'
Jika perintah menampilkan respons JSON yang berhasil, LLM Anda sudah siap. Anda kini dapat menghentikan proses penerusan port dengan kembali ke jendela terminalnya dan menekan
Ctrl+C
, lalu melanjutkan untuk men-deploy agen.
Men-deploy aplikasi agen
Langkah berikutnya adalah men-deploy aplikasi agen berbasis ADK.
Buka direktori
/deploy-agent
: Dari direktori root project Anda (adk/llama/vllm
), buka direktori/deploy-agent
yang berisi kode sumber dan manifes deployment agen.cd ../deploy-agent
Perbarui manifes deployment agen:
File manifes
deploy-agent.yaml
sampel berisi placeholder untuk project ID Anda di URL image container. Anda harus mengganti placeholder dengan project ID Google Cloud Anda.image: us-central1-docker.pkg.dev/PROJECT_ID/adk-repo/adk-agent:latest
Untuk melakukan penggantian ini di tempat, Anda dapat menjalankan perintah berikut:
sed -i "s/<PROJECT_ID>/$PROJECT_ID/g" deploy-agent.yaml
Pastikan jalur
readinessProbe
disetel ke/
, bukan/dev-ui
. Untuk melakukan penggantian ini di tempat, Anda dapat menjalankan perintah berikut:sed -i "s|path: /dev-ui/|path: /|g" deploy-agent.yaml
Terapkan manifes: Jalankan perintah berikut untuk menerapkan manifes
deploy-agent.yaml
ke cluster Anda.kubectl apply -f deploy-agent.yaml
Perintah ini akan membuat dua resource Kubernetes:
- Deployment bernama
adk-agent
yang menjalankan image container agen buatan kustom Anda. - Layanan bernama
adk-agent
jenis NodePort yang mengekspos aplikasi agen sehingga dapat diakses untuk pengujian.
- Deployment bernama
Verifikasi deployment agen: Periksa status Pod untuk memastikan Pod berjalan dengan benar.
Tunggu hingga Deployment tersedia:
kubectl wait --for=condition=available --timeout=300s deployment/adk-agent
Lihat log dari Pod agen yang sedang berjalan:
export AGENT_POD=$(kubectl get pods -l app=adk-agent -o jsonpath='{.items[0].metadata.name}') kubectl logs -f $AGENT_POD
Deployment berhasil jika Anda melihat output log yang mirip dengan berikut, yang menunjukkan bahwa server Uvicorn sedang berjalan dan siap menerima permintaan:
INFO: Uvicorn running on http://0.0.0.0:8001 (Press CTRL+C to quit)
Menguji agen yang di-deploy
Setelah berhasil men-deploy server vLLM dan aplikasi agen, Anda dapat menguji fungsi end-to-end dengan berinteraksi dengan UI web agen.
Teruskan layanan agen ke komputer lokal Anda: Layanan
adk-agent
berjenisNodePort
, tetapi cara paling langsung untuk mengaksesnya dari lingkungan Cloud Shell Anda adalah dengan menggunakan perintahkubectl port-forward
. Buat tunnel yang aman ke Pod agen dengan menjalankan perintah ini.kubectl port-forward $AGENT_POD 8001:8001
Akses UI web agen: Di Cloud Shell, klik tombol Web Preview, lalu pilih Preview on port 8001. Tab browser baru akan terbuka dan menampilkan antarmuka chat agen.
Berinteraksi dengan agen: Ajukan pertanyaan kepada agen yang akan memanggil alat
get_weather
-nya. Contoh:What's the weather like in Tokyo?
Agen akan terlebih dahulu memanggil LLM untuk memahami maksud dan mengidentifikasi kebutuhan untuk menggunakan alat
get_weather
. Kemudian, alat ini akan menjalankan "Tokyo" sebagai parameter. Terakhir, output alat akan digunakan untuk membuat respons. Anda akan melihat respons seperti berikut:The weather in Tokyo is 25°C and sunny.
(Opsional) Verifikasi panggilan alat dalam log: Anda dapat mengamati interaksi agen dengan LLM dan eksekusi alat dengan melihat log Pod yang relevan.
Log Pod agen: Di terminal baru, lihat log Pod
adk-agent
. Anda akan melihat panggilan alat dan hasilnya.kubectl logs -f $AGENT_POD
Output menunjukkan alat yang dipanggil dan hasil yang diproses.
Log Pod LLM: Lihat log Pod
vllm-llama3-deployment
untuk melihat permintaan masuk dari agen.kubectl logs -f $LLM_POD
Log menampilkan perintah lengkap yang dikirim oleh agen ke LLM, termasuk pesan sistem, kueri Anda, dan definisi alat
get_weather
.
Setelah selesai menguji, Anda dapat menghentikan proses port-forward
dengan kembali ke jendela terminalnya dan menekan Ctrl+C
.