Tutorial ini menjelaskan cara menskalakan otomatis layanan Cloud Run yang menayangkan LLM dengan vLLM berdasarkan metrik GPU kustom menggunakan Penskalaan Otomatis Metrik Eksternal Cloud Run (CREMA).
Meskipun Cloud Run menskalakan otomatis menggunakan pemakaian CPU dan konkurensi secara default, workload inferensi yang menggunakan GPU secara intensif sering kali memerlukan penskalaan otomatis berdasarkan metrik antrean, seperti jumlah permintaan yang berjalan atau pemakaian cache KV. CREMA mengintegrasikan Penskalaan Otomatis Berbasis Peristiwa (KEDA) berbasis Kubernetes dengan Cloud Run untuk mengaktifkan penskalaan dinamis yang didorong oleh metrik Prometheus. vLLM mengekspos metrik Prometheus dan mengirimkannya ke Cloud Monitoring.
Tujuan
Dalam tutorial ini, Anda akan:
- Mendownload dan mengupload bobot model ke Cloud Storage
- Mengirim image container vLLM ke Artifact Registry
- Men-deploy layanan autoscaler CREMA
- Mengonfigurasi izin layanan vLLM
- Men-deploy layanan vLLM dengan file bantuan OpenTelemetry
- Memeriksa log layanan CREMA
- Menjalankan uji beban
- Mempelajari metrik vLLM di Cloud Monitoring
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang dapat ditagih berikut Google Cloud:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
- Login keakun Anda. Google Cloud Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Aktifkan Cloud Run, Parameter Manager, Artifact Registry, Cloud Build, Secret Manager, dan Cloud Monitoring API.
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan izin
serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Admin Service Usage (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.- Instal dan lakukan inisialisasi gcloud CLI.
- Tetapkan variabel lingkungan yang digunakan di seluruh tutorial ini:
Ganti PROJECT_ID dengan Google Cloud project ID Anda.export PROJECT_ID=PROJECT_ID export REGION=us-central1 export VLLM_SERVICE_NAME=vllm-service export MODEL_NAME=gemma-2-2b-it export REPO_NAME=vllm-repo export BUCKET_NAME=my-vllm-models-${PROJECT_ID} export CREMA_SERVICE_NAME=crema-service
- Tetapkan konfigurasi project Anda:
gcloud config set project $PROJECT_ID
- Jika belum punya, buat akun di Hugging Face. Kemudian, buat token baca di situs Hugging Face. Hugging Face hanya menampilkan token satu kali. Simpan di lokasi yang aman, Anda tidak akan dapat melihatnya lagi.
- Buka halaman model gemma-2-2b-it di Hugging Face dan setujui persyaratan perjanjian model.
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan tutorial, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:
- Administrator Repositori Artifact Registry (
roles/artifactregistry.repoAdmin) - Admin Cloud Run (
roles/run.admin) - Admin IAM (
roles/resourcemanager.projectIamAdmin) - Buat Akun Layanan (
roles/iam.serviceAccountCreator) - Pengguna Akun Layanan (
roles/iam.serviceAccountUser) - Admin Parameter Manager (
roles/parametermanager.admin) - Monitoring Viewer (
roles/monitoring.viewer)
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Mendownload dan mengupload bobot model ke Cloud Storage
Download bobot model dari Hugging Face dan transfer ke bucket Cloud Storage agar tersedia untuk penayangan model:
Instal Hugging Face CLI:
pip install -U "huggingface_hub[cli]"Download bobot model secara lokal menggunakan Hugging Face CLI:
export HF_TOKEN="HF_TOKEN" export LOCAL_DIR="/tmp/$MODEL_NAME" HF_HOME=/tmp/huggingface python -m huggingface_hub.cli.hf download google/$MODEL_NAME --token $HF_TOKEN --local-dir=$LOCAL_DIRGanti HF_TOKEN dengan token akses pengguna Hugging Face Anda. Token harus dimulai dengan
hf_diikuti dengan 35 karakter alfanumerik acak (misalnya,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).Buat bucket Cloud Storage dan salin bobot yang didownload:
gcloud storage buckets create gs://$BUCKET_NAME \ --project=$PROJECT_ID \ --location=$REGION \ --uniform-bucket-level-access gcloud storage cp -r $LOCAL_DIR gs://$BUCKET_NAME/
Mengirim image container vLLM ke Artifact Registry
Tarik image container penayangan model Anda dan kirim ke repositori di Artifact Registry:
Buat repositori Docker di Artifact Registry:
gcloud artifacts repositories create $REPO_NAME \ --repository-format=docker \ --location=$REGION \ --description="vLLM Docker Images"Autentikasi daemon Docker lokal dengan registry:
gcloud auth configure-docker ${REGION}-docker.pkg.devTarik image vLLM, beri tag, dan kirim ke Artifact Registry:
docker pull docker.io/vllm/vllm-openai:latest docker tag docker.io/vllm/vllm-openai:latest ${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}/vllm-openai:latest docker push ${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}/vllm-openai:latest
Men-deploy layanan autoscaler CREMA
Konfigurasi peran akun layanan dan manifes parameter untuk CREMA sebelum men-deploy layanan autoscaler.
Membuat akun layanan kustom
Buat akun layanan kustom dengan izin minimum yang diperlukan untuk menggunakan resource yang disediakan. Akun layanan ini bertindak sebagai identitas untuk autoscaler. Jalankan perintah berikut untuk membuat akun layanan CREMA:
export CREMA_SA="crema-autoscaler@${PROJECT_ID}.iam.gserviceaccount.com"
gcloud iam service-accounts create crema-autoscaler \
--description="Service account for Cloud Run CREMA to read metrics and scale workloads" \
--display-name="CREMA Autoscaler System"
Memberikan izin tambahan ke akun layanan kustom Anda
Untuk menskalakan layanan, berikan izin berikut pada akun layanan kustom:
Beri akun layanan CREMA Anda izin untuk membaca dari Parameter Manager:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA" \ --role="roles/parametermanager.parameterViewer"Beri akun layanan CREMA Anda izin untuk menskalakan layanan:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA" \ --role="roles/run.developer"Beri akun layanan CREMA Anda peran pengguna akun layanan:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA" \ --role="roles/iam.serviceAccountUser"Beri akun layanan CREMA Anda izin untuk melihat metrik:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA" \ --role="roles/monitoring.viewer"
Membuat dan mendaftarkan konfigurasi CREMA
Tentukan aturan dan nilai minimum penskalaan dalam manifes konfigurasi CREMA dan daftarkan di Parameter Manager:
Simpan konfigurasi berikut sebagai
my-crema-config.yaml. Konfigurasi ini memicu penskalaan saat jumlah permintaan yang berjalan (vllm:num_requests_running) melebihi 2:apiVersion: crema/v1 kind: CremaConfig spec: pollingInterval: 15 triggerAuthentications: - metadata: name: adc-trigger-auth spec: podIdentity: provider: gcp scaledObjects: - spec: scaleTargetRef: name: projects/PROJECT_ID/locations/us-central1/services/vllm-service minReplicaCount: 1 maxReplicaCount: 5 triggers: - type: prometheus authenticationRef: name: adc-trigger-auth metadata: serverAddress: https://monitoring.googleapis.com/v1/projects/PROJECT_ID/location/global/prometheus metric: vllm:num_requests_running query: sum(vllm:num_requests_running) threshold: '2'Daftarkan file konfigurasi di Parameter Manager:
gcloud parametermanager parameters create crema-config \ --location=global \ --parameter-format=YAML gcloud parametermanager parameters versions create 1 \ --location=global \ --parameter=crema-config \ --payload-data-from-file=my-crema-config.yaml
Men-deploy layanan CREMA
Deploy image CREMA sebagai layanan latar belakang internal di Cloud Run:
gcloud run deploy $CREMA_SERVICE_NAME \
--image=us-central1-docker.pkg.dev/cloud-run-oss-images/crema-v1/autoscaler:1.0 \
--region=$REGION \
--service-account="$CREMA_SA" \
--no-allow-unauthenticated \
--no-cpu-throttling \
--cpu=1 \
--memory=1Gi \
--min-instances=1 \
--max-instances=1 \
--ingress=internal \
--base-image=us-central1-docker.pkg.dev/serverless-runtimes/google-24/runtimes/java25 \
--set-env-vars="CREMA_CONFIG=projects/$PROJECT_ID/locations/global/parameters/crema-config/versions/1,OUTPUT_SCALER_METRICS=True"
Mengonfigurasi izin layanan vLLM
Beri akun layanan Compute Engine default izin untuk mengekspor metrik dan membaca bobot model dari Cloud Storage:
Ambil nomor project Anda:
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')Beri akun layanan Anda izin untuk menulis metrik:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/monitoring.metricWriter"Beri akun layanan Anda izin untuk membaca bobot model dari Cloud Storage:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/storage.objectViewer"
Men-deploy layanan vLLM dengan file bantuan OpenTelemetry
Deploy container penayangan vLLM utama Anda ke Cloud Run dengan bobot model yang dipasang dari Cloud Storage. Karena men-deploy layanan multi-container dengan file bantuan di Cloud Run memerlukan spesifikasi layanan YAML deklaratif, Anda mengonfigurasi mesin vLLM utama bersama dengan pengumpul file bantuan OpenTelemetry untuk mengambil dan mengekspor metrik vLLM:
Simpan spesifikasi deployment multi-container berikut sebagai
vllm-service.yaml:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: vllm-service labels: cloud.googleapis.com/location: us-central1 annotations: run.googleapis.com/scalingMode: manual run.googleapis.com/manualInstanceCount: "1" spec: template: metadata: annotations: run.googleapis.com/execution-environment: gen2 run.googleapis.com/cpu-throttling: "false" run.googleapis.com/gpu-zonal-redundancy-disabled: "true" autoscaling.knative.dev/minScale: "1" spec: containerConcurrency: 80 nodeSelector: run.googleapis.com/accelerator: nvidia-l4 volumes: - name: gcs-volume csi: driver: gcsfuse.run.googleapis.com volumeAttributes: bucketName: my-vllm-models-PROJECT_ID containers: # Primary container: vLLM serving engine - name: vllm-container image: us-central1-docker.pkg.dev/PROJECT_ID/vllm-repo/vllm-openai:latest ports: - containerPort: 8080 resources: limits: cpu: "4" memory: 16Gi nvidia.com/gpu: "1" args: - "--model" - "/gcs/gemma-2-2b-it" - "--port" - "8080" - "--max-model-len" - "2048" - "--chat-template" - "{% for msg in messages %}{{ msg['content'] }}{% endfor %}" volumeMounts: - name: gcs-volume mountPath: /gcs startupProbe: httpGet: path: /health port: 8080 periodSeconds: 10 failureThreshold: 24 # Sidecar container: OpenTelemetry Collector - name: otel-collector image: otel/opentelemetry-collector-contrib:latest resources: limits: cpu: "1" memory: 1Gi args: - | --config=yaml: receivers: prometheus: config: scrape_configs: - job_name: 'vllm' scrape_interval: 10s metrics_path: '/metrics' static_configs: - targets: ['localhost:8080'] processors: resourcedetection: detectors: [gcp] timeout: 2s transform: metric_statements: - context: datapoint statements: - set(attributes["exported_location"], attributes["location"]) - delete_key(attributes, "location") - set(attributes["exported_cluster"], attributes["cluster"]) - delete_key(attributes, "cluster") - set(attributes["exported_namespace"], attributes["namespace"]) - delete_key(attributes, "namespace") - set(attributes["exported_job"], attributes["job"]) - delete_key(attributes, "job") - set(attributes["exported_instance"], attributes["instance"]) - delete_key(attributes, "instance") exporters: googlemanagedprometheus: service: pipelines: metrics: receivers: [prometheus] processors: [resourcedetection, transform] exporters: [googlemanagedprometheus]Ganti konfigurasi layanan yang ada dengan manifes multi-container:
gcloud run services replace vllm-service.yaml
Memeriksa log layanan CREMA
- Di Google Cloud konsol, buka halaman Cloud Run.
- Pilih
crema-serviceAnda. Klik tab Log dan pastikan siklus polling metrik aktif:
[INFO] [METRIC-PROVIDER] Starting metric collection cycle [INFO] [METRIC-PROVIDER] Successfully fetched scaled object metrics ... [INFO] [METRIC-PROVIDER] Sending scale request ... [INFO] [SCALER] Received ScaleRequest ... [INFO] [SCALER] Current instances ... [INFO] [SCALER] Recommended instances ...
Menjalankan uji beban
Untuk menguji penskalaan otomatis, jalankan skrip pengujian beban untuk mengirim permintaan serentak ke layanan vLLM:
Di direktori kerja Anda, buat file bernama
load-test.shdan tambahkan kode berikut:#!/bin/bash export SERVICE_URL=$(gcloud run services describe $VLLM_SERVICE_NAME --region $REGION --format='value(status.url)') echo "Launching 5 parallel heavy requests to trigger autoscaling..." for i in {1..5}; do curl -s -X POST "${SERVICE_URL}/v1/chat/completions" \ -H "Authorization: Bearer $(gcloud auth print-identity-token)" \ -H "Content-Type: application/json" \ -d "{ \"model\": \"/gcs/${MODEL_NAME}\", \"messages\": [{\"role\": \"user\", \"content\": \"Write an exceptionally long, detailed, and exhaustive essay about the entire history of the universe from the Big Bang to the modern day.\"}] }" > /dev/null & done echo "All 5 requests dispatched. Waiting for requests to complete..." wait echo "Done."Buat skrip dapat dieksekusi dan jalankan uji beban:
chmod +x load-test.sh ./load-test.shPeriksa kembali log
crema-servicedan dasbor metrik Cloud Run untuk memverifikasi bahwa jumlah instance yang direkomendasikan meningkat sebagai respons terhadap permintaan yang diantrekan.
Mempelajari metrik vLLM di Cloud Monitoring
Setelah menjalankan uji beban, pelajari pengaruh traffic terhadap metrik penayangan model di Cloud Monitoring:
Di Google Cloud konsol, buka halaman Metrics Explorer di Cloud Monitoring.
Klik Select a metric.
Luaskan Prometheus Target > Vllm dan pilih salah satu metrik yang tersedia yang diakhiri dengan
/gauge. Misalnya, pilihprometheus/vllm:num_requests_running/gaugeuntuk melihat jumlah permintaan aktif selama uji beban.
Seperti yang dijelaskan dalam dokumentasi metrik produksi vLLM, metrik vLLM tambahan yang diekspor ke Cloud Monitoring mencakup:
prometheus/vllm:num_requests_waiting/gauge: Jumlah permintaan yang menunggu dalam antrean untuk diproses oleh mesin vLLM.prometheus/vllm:num_requests_running/gauge: Jumlah permintaan yang dieksekusi dalam batch model.prometheus/vllm:gpu_cache_usage_perc/gauge: Persentase memori cache KV GPU yang digunakan.prometheus/vllm:num_requests_swapped/gauge: Jumlah permintaan yang cache KV-nya ditukar ke memori CPU host karena tekanan memori.
Meskipun tutorial ini menskalakan berdasarkan vllm:num_requests_running, Anda dapat menggunakan salah satu metrik vLLM ini dalam konfigurasi CREMA untuk menyesuaikan aturan penskalaan otomatis untuk workload Anda berdasarkan ukuran antrean, pemakaian cache KV, atau pertukaran permintaan.
Tidak seperti metrik konkurensi permintaan HTTP standar yang memperlakukan semua permintaan secara setara, metrik internal vLLM memperhitungkan jejak memori GPU dinamis dari berbagai panjang perintah. Penskalaan pada vllm:num_requests_running membantu Anda menskalakan secara proaktif berdasarkan beban GPU yang sebenarnya. Hal ini mempertahankan buffer kapasitas aktif sebelum server dipaksa untuk mengantrekan permintaan ke vllm:num_requests_waiting, sehingga melindungi pengguna dari lonjakan latensi Time To First Token (TTFT) yang parah.
Pembersihan
Untuk menghindari biaya tambahan ke Google Cloud akun Anda, hapus semua resource yang Anda deploy dengan tutorial ini.
Menghapus project
Jika Anda membuat project baru untuk tutorial ini, hapus project tersebut. Jika Anda menggunakan project yang sudah ada dan perlu mempertahankannya tanpa perubahan yang Anda tambahkan dalam tutorial ini, hapus resource yang Anda buat untuk tutorial.
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.
Untuk menghapus project:
- Di Google Cloud konsol, buka halaman Manage resources.
- Pada daftar project, pilih project yang Anda ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Menghapus resource tutorial
Hapus layanan Cloud Run yang Anda deploy dalam tutorial ini. Layanan Cloud Run tidak dikenai biaya hingga menerima permintaan.
Untuk menghapus layanan Cloud Run, jalankan perintah berikut:
gcloud run services delete SERVICE-NAME
Ganti SERVICE-NAME dengan nama layanan Anda.
Anda juga dapat menghapus layanan Cloud Run dari Google Cloud konsol.
Hapus konfigurasi region default
gcloudyang Anda tambahkan selama penyiapan tutorial:gcloud config unset run/regionHapus konfigurasi project:
gcloud config unset projectHapus konfigurasi CREMA yang ditetapkan ke Parameter Manager:
gcloud parametermanager parameters delete crema-config \ --location=global \ --quietHapus akun layanan kustom yang dibuat untuk CREMA:
gcloud iam service-accounts delete $CREMA_SA \ --quietHapus bucket Cloud Storage yang berisi model:
gcloud storage rm --recursive gs://$BUCKET_NAMEHapusresource Google Cloud lain yang dibuat dalam tutorial ini:
- Hapus layanan vLLM Cloud Run
- Hapus layanan CREMA
- Hapus repositori Docker di Artifact Registry
Langkah berikutnya
- Pelajari lebih lanjut penskalaan otomatis CREMA di Cloud Run.
- Baca lebih lanjut cara men-deploy model Gemma di Cloud Run.