本指南說明如何使用預先建構的容器和 vLLM 推論程式庫,在 Cloud Run 上部署 Gemma 4 開放模型,並提供相關指引,說明如何搭配使用已部署的 Cloud Run 服務和使用 Agent Development Kit 建構的 AI 代理。
Gemma 4 是 Google 最高效的開放權重模型系列,可提供強大的推論和代理能力。
Gemma 4 具備長脈絡、多模態、推論和工具呼叫功能,可處理複雜邏輯、多步驟規劃、程式設計和代理功能工作流程。
事前準備
- 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
-
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.
- 在 Google Cloud 專案中設定 Cloud Run 開發環境。
- 安裝並初始化 gcloud CLI。
- 請確認您已將下列 IAM 角色授予帳戶:
- Cloud Run 管理員 (
roles/run.admin) - 專案 IAM 管理員 (
roles/resourcemanager.projectIamAdmin) - 服務使用情形消費者 (
roles/serviceusage.serviceUsageConsumer)
- Cloud Run 管理員 (
-
前往 Google Cloud 控制台的「IAM」頁面。
前往「IAM」頁面 - 選取專案。
- 按一下「Grant access」(授予存取權)。
-
在「New principals」(新增主體) 欄位中,輸入您的使用者 ID。這通常是部署 Cloud Run 服務時使用的電子郵件地址。
- 在「Select a role」(選取角色) 清單中,選取角色。
- 如要授予其他角色,請按一下「Add another role」(新增其他角色),然後新增其他角色。
- 按一下「Save」(儲存)。
- 將 PROJECT_NUMBER 改成您的 Google Cloud 專案編號。
- 將 PROJECT_ID 替換為 Google Cloud 專案 ID。
- PRINCIPAL,您要為該帳戶新增繫結。這通常是用於部署 Cloud Run 服務的電子郵件地址。
- ROLE,並將角色新增至部署者帳戶。
- 如有需要,請在「配額與系統限制」頁面,為 Cloud Run Admin API 申請
Total Nvidia RTX Pro 6000 GPU allocation, in milli GPU, without zonal redundancy, per project per region配額。 - 請參閱「Cloud Run 定價」頁面。您可以使用 Pricing Calculator 根據預測用量估算費用。
瞭解如何授予角色
控制台
gcloud
如要在專案中授予帳戶必要的 IAM 角色,請按照下列步驟操作:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=ROLE
更改項目:
使用 vLLM 容器部署 Gemma 4 模型
Gemma 4 提供進階代理能力,包括推論、函式呼叫、程式碼生成和結構化輸出。
Agent Development Kit (ADK) 可協助您使用 Gemma 4 建構功能齊全的 AI 代理。
使用 vLLM 將 Gemma 做為 OpenAI API 端點提供服務。vLLM 可大規模快速且有效率地提供生成模型服務,具備最先進的服務處理量、透過 PagedAttention 進行有效率的記憶體管理、持續批次處理傳入的要求、量化支援,以及最佳化的 CUDA 核心。
如要在 Cloud Run 上部署 Gemma 模型,請使用下列 gcloud CLI 指令,並採用建議設定:
CONTAINER_ARGS=( "serve" "MODEL_NAME" "--enable-chunked-prefill" "--enable-prefix-caching" "--generation-config=auto" "--enable-auto-tool-choice" "--tool-call-parser=gemma4" "--reasoning-parser=gemma4" "--dtype=bfloat16" "--max-num-seqs=64" "--gpu-memory-utilization=0.95" "--tensor-parallel-size=1" "--port=8080" "--host=0.0.0.0" ) gcloud beta run deploy SERVICE_NAME \ --image "us-docker.pkg.dev/vertex-ai/vertex-vision-model-garden-dockers/pytorch-vllm-serve:gemma4" \ --project PROJECT \ --region REGION \ --execution-environment gen2 \ --no-allow-unauthenticated \ --cpu 20 \ --memory 80Gi \ --gpu 1 \ --gpu-type nvidia-rtx-pro-6000 \ --no-gpu-zonal-redundancy \ --no-cpu-throttling \ --max-instances 3 \ --concurrency 64 \ --timeout 600 \ --startup-probe tcpSocket.port=8080,initialDelaySeconds=240,failureThreshold=1,timeoutSeconds=240,periodSeconds=240 \ --command "vllm" \ --args=$(IFS=','; echo "${CONTAINER_ARGS[*]}")
更改項目:
SERVICE_NAME,並為 Cloud Run 服務指定專屬名稱。- 將
PROJECT改成您的 Google Cloud 專案 ID。 REGION,請將REGION換成nvidia-rtx-pro-6000支援 Cloud Run GPU 的 Google Cloud 區域,例如us-central1。如需支援 GPU 部署作業的完整區域清單,請參閱「GPU 設定」。將
MODEL_NAME替換為 Gemma 4 變體版本的全名。- Gemma 4 2B:
google/gemma-4-E2B-it - Gemma 4 4B:
google/gemma-4-E4B-it
- Gemma 4 2B:
其他設定如下:
| 選項 | 說明 |
|---|---|
--concurrency |
特定執行個體 (例如 |
--cpu |
服務的CPU 分配量,例如 |
--set-env-vars |
為服務設定的環境變數。例如: |
--gpu |
服務的 GPU 值,例如 |
--gpu-type |
服務要使用的 GPU 類型,例如 |
--max-instances |
服務的容器執行個體數量上限,例如 |
--memory |
服務的分配記憶體量,例如 |
--no-invoker-iam-check |
停用叫用者 IAM 檢查。如需如何加強應用程式安全性的建議,請參閱保護 Cloud Run 服務安全教學課程。 |
--no-cpu-throttling |
如果容器未主動處理要求,這項設定會停用 CPU 節流。 |
--timeout |
必須傳回回應的時間,例如 |
--startup-probe |
以半形逗號分隔的啟動探查設定,格式為 KEY=VALUE。詳情請參閱「Cloud Run 啟動探查」。使用 Gemma 4 的模型大小時,如果沒有使用 Direct VPC Egress,建議將啟動探查逾時時間設為至少 240 秒。 |
如要修改預設設定,或為 Cloud Run 服務新增更多自訂設定,請參閱「設定服務」。
部署服務完成後,畫面會顯示成功訊息,以及結尾為 run.app 的 Cloud Run 端點網址。
使用 curl 測試已部署的 Gemma 服務
Gemma 服務部署完成後,您就可以向該服務傳送要求。不過,如果您直接傳送要求,Cloud Run 會以 HTTP 401 Unauthorized 回應。這是刻意設計,因為 LLM 推論 API 適用於其他服務呼叫,例如前端應用程式。如要進一步瞭解 Cloud Run 的服務對服務驗證,請參閱「服務對服務驗證」。
如要向 Gemma 服務傳送要求,請在要求中加入含有有效 OIDC 權杖的標頭,例如使用 Cloud Run 開發人員 Proxy:
啟動 Proxy,並在系統提示安裝
cloud-run-proxy元件時選擇Y:gcloud run services proxy SERVICE_NAME \ --project PROJECT \ --region REGION \ --port=9090執行下列指令,在獨立的終端機分頁中傳送要求,並讓 Proxy 保持執行狀態。Proxy 會在
localhost:9090上執行,指定先前使用的 Gemma 模型:curl http://localhost:9090/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "MODEL_NAME", "messages": [{"role": "user", "content": "Why is the sky blue?"}], "chat_template_kwargs": { "enable_thinking": true }, "skip_special_tokens": false }'這個指令應會輸出如下的內容:
{ "id": "chatcmpl-9cf1ab1450487047", "object": "chat.completion", "created": 1774904187, "model": "google/gemma-4-E2B-it", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "The short answer is a phenomenon called **Rayleigh scattering**...", "function_call": null, "tool_calls": [], "reasoning": "* Question: \"Why is the sky blue?\"\n..." }, "finish_reason": "stop", "stop_reason": 106 } ], "usage": { "prompt_tokens": 21, "total_tokens": 877, "completion_tokens": 856 } }
設定並行數,爭取最佳成效
本節提供建議並行設定的背景資訊。如要達到最佳要求延遲時間,請確保 --concurrency 設定等於 vLLM 的 --max-num-seqs 指令列引數。
--max-num-seqs決定每個 vLLM 執行個體可同時處理的序列 (要求) 數量。--concurrency決定 Cloud Run 同時傳送至 vLLM 執行個體的要求數量。
如果 --concurrency 超過 --max-num-seqs,Cloud Run 傳送至 vLLM 執行個體的要求可能會超過可用的要求時段。這會導致 vLLM 內的要求排隊,增加排隊要求的延遲時間。此外,由於佇列中的要求不會觸發 Cloud Run 水平擴展及啟動新執行個體,自動調度資源的反應也會較慢。
如要完全避免 vLLM 執行個體上的要求排隊,請將 --concurrency 設為與 --max-num-seqs 相符。
請注意,增加 --max-num-seqs 也會延長平行要求所需的時間,並需要更多 GPU 記憶體來儲存 KV 快取。
盡可能提高使用率
為達到最佳 GPU 使用率,請增加 --concurrency,但不要超過 --max-num-seqs 值的兩倍。雖然這會導致 vLLM 中的要求排隊,但有助於提高使用率:vLLM 執行個體可以立即處理佇列中的要求,而佇列則有助於吸收流量尖峰。
使用 Gemma 4 和 Agent Development Kit 建構 AI 代理
部署 Cloud Run 服務後,您可以使用 Gemma 4 的 Cloud Run 端點,透過 Agent Development Kit 建立 AI 代理程式。
使用 Agent Development Kit 前,請確保傳入的要求會傳遞適當的 ID 權杖。如要進一步瞭解如何使用 IAM 驗證和 Cloud Run,請參閱「服務對服務驗證」。
以下範例說明如何在 Python 中使用 Agent Development Kit,並透過 IAM 驗證:
import subprocess
from google.adk.models.lite_llm import LiteLlm
from google.adk.agents import Agent
# Get the identity token using gcloud
id_token = subprocess.run(
["gcloud", "auth", "print-identity-token"],
capture_output=True, text=True
).stdout.strip()
gemma_model = LiteLlm(
model=f'openai/MODEL_NAME',
base_url='https://YOUR_CLOUD_RUN_SERVICE_URL/v1',
extra_body={
"chat_template_kwargs": {
"enable_thinking": True
},
"skip_special_tokens": False
},
extra_headers={
"Authorization": f"Bearer {id_token}",
},
)
root_agent = Agent(
model=gemma_model,
name='assistant',
instruction="You are a helpful assistant",
)
清除所用資源
刪除下列 Google Cloud 建立的資源:
後續步驟
- 如要使用 Run:ai Model Streamer 處理較大型的模型並縮短啟動時間,請參閱程式碼實驗室:在 Cloud Run 上搭配 RTX 6000 Pro GPU 和 vLLM 執行 Gemma 4 模型推論
- 設定 GPU
- 最佳做法:在 Cloud Run 中使用 GPU 進行 AI 推論
- 使用各種 AI 執行階段架構執行 Gemma 4 模型