vLLM を使用して Cloud Run GPU で LLM 推論を実行する方法

1. はじめに

概要

Cloud Run は、Google Cloud 上のコンテナ プラットフォームです。クラスタを管理することなく、コンテナでコードを簡単に実行できます。

Cloud Run は、L4 または NVIDIA RTX PRO 6000 Blackwell GPU を提供します。Cloud Run インスタンスごとに 1 つの GPU があり、リクエストがない場合にゼロ インスタンスにスケールダウンするなど、Cloud Run の自動スケーリングが引き続き適用されます。

GPU のユースケースの 1 つは、独自のオープン大規模言語モデル(LLM)の実行です。このチュートリアルでは、LLM を実行するサービスをデプロイする方法について説明します。

この Codelab では、vLLM 推論ライブラリを含むビルド済みコンテナを使用して、Gemma 4 オープンモデルを Cloud Run にデプロイする方法について説明します。

学習内容

  • Cloud Run で GPU を使用する方法。
  • vLLM を推論エンジンとして使用して、Google の Gemma 4 2B 指示チューニング済みモデルを Cloud Run にデプロイする方法。

2. 設定と要件

前提条件

3. API を有効にして環境変数を設定する

API を有効にする

この Codelab を開始する前に、いくつかの API を有効にする必要があります。この Codelab では、次の API を使用する必要があります。これらの API を有効にするには、次のコマンドを実行します。

gcloud services enable run.googleapis.com \
    cloudbuild.googleapis.com \
    artifactregistry.googleapis.com

環境変数を設定する

以下のプロジェクト ID を構成します。

export PROJECT_ID=<YOUR_PROJECT_ID>

export REGION=europe-west4
export SERVICE_NAME=gemma4-cr-codelab
export SERVICE_ACCOUNT_NAME=gemma4-cr-sa
export SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com

4. サービス アカウントを作成する

このサービス アカウントは、Cloud Run サービスの ID として使用されます。

gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \
  --display-name="Cloud Run gemma 4 SA"

5. サービスをデプロイする

Gemma モデルを Cloud Run にデプロイするには、推奨設定で次の gcloud CLI コマンドを使用します。

CONTAINER_ARGS=(
    "serve"
    "google/gemma-4-E2B-it"
    "--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_ID \
    --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 \
    --service-account $SERVICE_ACCOUNT_ADDRESS \
    --startup-probe tcpSocket.port=8080,initialDelaySeconds=240,failureThreshold=1,timeoutSeconds=240,periodSeconds=240 \
    --command "vllm" \
    --args=$(IFS=','; echo "${CONTAINER_ARGS[*]}")

6. サービスをテストする

デプロイが完了したら、Cloud Run 開発プロキシ サービスを使用して ID トークンを自動的に追加するか、サービス URL を直接 curl します。

Cloud Run 開発プロキシ サービスの使用

まず、プロキシを開始します。

gcloud run services proxy $SERVICE_NAME \
  --project $PROJECT \
  --region $REGION \
  --port=9090

次のコマンドを実行して、プロキシを実行したまま、別のターミナルタブでリクエストを送信します。プロキシは localhost:9090 で実行されます。

curl http://localhost:9090/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "google/gemma-4-E2B-it",
    "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
 }
}

サービス URL を直接使用する

まず、デプロイされたサービスの URL を取得します。

SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --region $REGION --format 'value(status.url)')

サービスを curl する

curl $SERVICE_URL/v1/chat/completions \
  -H "Authorization: bearer $(gcloud auth print-identity-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "google/gemma-4-E2B-it",
    "messages": [{"role": "user", "content": "Why is the sky blue?"}],
    "chat_template_kwargs": {
         "enable_thinking": true
     },
     "skip_special_tokens": false
  }'

7. 完了

以上で、この Codelab は完了です。

ドキュメントの Cloud Run を確認することをおすすめします。

学習した内容

  • Cloud Run で GPU を使用する方法。
  • 推論エンジンとして vLLM を使用して、Google の Gemma 4(2B)モデルを Cloud Run にデプロイする方法。

8. クリーンアップ

誤って課金されないようにするには(たとえば、Cloud Run サービスが誤って 無料枠の Cloud Run 呼び出しの月間割り当てよりも多く呼び出された場合など)、Cloud Run を削除するか、ステップ 2 で作成したプロジェクトを削除します。

Cloud Run サービスを削除するには、https://console.cloud.google.com/run で Cloud Run Cloud Console に移動し、gemma4-cr-codelab サービスを削除します。gemma4-cr-codelab-sa サービス アカウントを削除することもできます。

プロジェクト全体を削除する場合は、https://console.cloud.google.com/cloud-resource-manager に移動し、ステップ 2 で作成したプロジェクトを選択して、[削除] を選択します。プロジェクトを削除した場合は、Cloud SDK でプロジェクトを変更する必要があります。gcloud projects list を実行すると、使用可能なすべてのプロジェクトのリストを表示できます。