G-gen の佐々木です。当記事では GKE Inference Quickstart を使用し、Google Kubernetes Engine(GKE)で Google Cloud のベストプラクティスに沿った生成 AI ワークロードのデプロイを試してみます。
GKE Inference Quickstart とは
GKE Inference Quickstart(以下、Inference Quickstart)は、Google Kubernetes Engine(GKE)で利用できる生成 AI 機能の1つで、ユーザーが生成 AI モデルのコンテナ化やマニフェストファイルの記述などを行うことなく、Google のベンチマークに基づいた最適化された構成で推論サーバーをデプロイをすることができます。
Google Cloud によって事前構成されたレシピにより、手動での構成の調整やテストを行うことなく、最低限のセットアップで必要な Kubernetes リソースを素早く簡単に展開できます。
Inference Quickstart は Autopilot モードの GKE クラスタ、Standard モードの GKE クラスタの両方で利用することができます。
機能の詳細については以下のドキュメントもご一読ください。
- 参考 : About model inference on GKE
- 参考 : Run best practice inference with GKE Inference Quickstart recipes
なお当機能は、Google Cloud の旗艦イベントである Google Cloud Next '25 で発表されたものです。
G-gen Tech Blog では、Google Cloud Next '25 のセッションレポートなどを随時公開しています。
事前準備
コマンド実行の準備
Inference Quickstart を利用するためには、プロジェクトで以下の API を有効化する必要があります。
# API 有効化
$ gcloud services enable gkerecommender.googleapis.com
また、以下のコマンドで Application Default Credentials(ADC)の設定を行ってください。
# ADC の設定
$ gcloud auth application-default login
Hugging Face アクセストークンの準備
当記事では gemma-2-27b-it モデルを使用していきます。
モデルの利用に Hugging Face アクセストークンが必要となるため、トークンの情報を格納した Secret リソースをクラスタ上に作成しておきます。
# シークレットの作成 kubectl create secret generic hf-secret \ --from-literal=hf_api_token=<Hugging Face アクセストークン>
また、gemma-2-27b-it モデルを使用するためには Hugging Face から利用申請をする必要があるため、モデルのページから申請を行ってください。
モデルの探索
gcloud alpha container ai recommender
コマンドを使用することで、利用するモデルサーバー、サーバーバージョン、アクセラレータを探索します。
models list
で利用できるモデルを表示します。
# サポートされているモデルの表示 $ gcloud alpha container ai recommender models list Supported models: - deepseek-ai/DeepSeek-R1-Distill-Qwen-7B - google/gemma-2-27b-it - google/gemma-2-2b-it - google/gemma-3-27b-it - meta-llama/Llama-3.2-1B-Instruct - meta-llama/Llama-3.3-70B-Instruct - meta-llama/Llama-4-Scout-17B-16E-Instruct - meta-llama/Meta-Llama-3-8B - mistralai/Mixtral-8x22B-Instruct-v0.1 - mistralai/Mixtral-8x7B-Instruct-v0.1
model-servers list
で、指定したモデルで使用できるモデルサーバーを表示します。
# モデルがサポートされているモデルサーバーを表示 $ gcloud alpha container ai recommender model-servers list \ --model=google/gemma-2-27b-it Supported model servers: - vllm
model-server-versions list
で、指定したモデルとモデルサーバーの組み合わせで利用できるサーバーバージョンを表示します。
# サーバーバージョンの確認 $ gcloud alpha container ai recommender model-server-versions list \ --model=google/gemma-2-27b-it \ --model-server=vllm Supported model server versions: - v0.7.2
accelerators list
で、モデルが使用できるアクセラレータを表示します。ここでは1秒あたりの出力トークン数(output tokens per second)などのメトリックが確認できます。
# アクセラレータの表示 $ gcloud alpha container ai recommender accelerators list \ --model=google/gemma-2-27b-it \ --model-server-version=v0.7.2 Supported accelerators: accelerator | model | model server | model server version | accelerator count | output tokens per second | ntpot ms ------------------|-----------------------|--------------|----------------------|-------------------|--------------------------|--------- nvidia-h100-80gb | google/gemma-2-27b-it | vllm | v0.7.2 | 1 | 2050 | 67 nvidia-tesla-a100 | google/gemma-2-27b-it | vllm | v0.7.2 | 2 | 1243 | 70 nvidia-l4 | google/gemma-2-27b-it | vllm | v0.7.2 | 4 | 425 | 1085
マニフェストの生成とデプロイ
gcloud alpha container ai recommender manifests create
コマンドを使用して、指定したモデルで Kubernetes ワークロードを展開することができる、推奨構成のマニフェストファイルを生成できます。
--output-path
でマニフェストファイルの出力先を指定して、gemma-2-27b-it モデルを使用するワークロードのマニフェストファイルを生成します。
# マニフェストを生成する $ gcloud alpha container ai recommender manifests create \ --model=google/gemma-2-27b-it \ --model-server=vllm \ --model-server-version=v0.7.2 \ --accelerator-type=nvidia-l4 \ --target-ntpot-milliseconds=200 \ --output=manifest \ --output-path ./manifests.yaml
マニフェストの一部パラメータはコマンドのオプションで調整することができます。詳細はコマンドリファレンスを参照してください。
生成されたマニフェストファイルは以下のようになっています。
# 生成されたマニフェスト apiVersion: apps/v1 kind: Deployment metadata: annotations: aire.gke.io/generated: "true" aire.gke.io/inference-server: vllm recommender.ai.gke.io/generated: "true" recommender.ai.gke.io/inference-server: vllm creationTimestamp: null labels: app: gemma2-27b-it-vllm-inference-server recommender.ai.gke.io/generated: "true" recommender.ai.gke.io/inference-server: vllm name: gemma2-27b-it-vllm-deployment namespace: default spec: replicas: 1 selector: matchLabels: app: gemma2-27b-it-vllm-inference-server strategy: {} template: metadata: annotations: recommender.ai.gke.io/generated: "true" recommender.ai.gke.io/inference-server: vllm creationTimestamp: null labels: ai.gke.io/inference-server: vllm ai.gke.io/model: gemma2-27b-it app: gemma2-27b-it-vllm-inference-server examples.ai.gke.io/source: blueprints recommender.ai.gke.io/generated: "true" recommender.ai.gke.io/inference-server: vllm spec: containers: - args: - --model=$(MODEL_ID) - --disable-log-requests - --tensor-parallel-size=4 - --max-num-seq=512 - --gpu-memory-utilization=0.95 - --num-scheduler-steps=8 command: - python3 - -m - vllm.entrypoints.openai.api_server env: - name: MODEL_ID value: google/gemma-2-27b-it - name: HUGGING_FACE_HUB_TOKEN valueFrom: secretKeyRef: key: hf_api_token name: hf-secret image: vllm/vllm-openai:v0.7.2 name: inference-server ports: - containerPort: 8000 name: metrics readinessProbe: failureThreshold: 6000 httpGet: path: /health port: 8000 periodSeconds: 10 resources: limits: nvidia.com/gpu: "4" requests: nvidia.com/gpu: "4" volumeMounts: - mountPath: /dev/shm name: dshm nodeSelector: cloud.google.com/gke-accelerator: nvidia-l4 volumes: - emptyDir: medium: Memory name: dshm status: {} --- apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: annotations: aire.gke.io/generated: "true" recommender.ai.gke.io/generated: "true" creationTimestamp: null labels: app: gemma2-27b-it-vllm-inference-server recommender.ai.gke.io/generated: "true" name: vllm-hpa namespace: default spec: maxReplicas: 10 metrics: - pods: metric: name: prometheus.googleapis.com|vllm:gpu_cache_usage_perc|gauge target: averageValue: 504m type: AverageValue type: Pods minReplicas: 1 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: gemma2-27b-it-vllm-deployment status: currentMetrics: null desiredReplicas: 0 --- apiVersion: v1 kind: Service metadata: annotations: aire.gke.io/generated: "true" recommender.ai.gke.io/generated: "true" creationTimestamp: null labels: app: gemma2-27b-it-vllm-inference-server recommender.ai.gke.io/generated: "true" name: gemma2-27b-it-vllm-service namespace: default spec: ports: - port: 8000 protocol: TCP targetPort: 8000 selector: app: gemma2-27b-it-vllm-inference-server type: ClusterIP status: loadBalancer: {} --- apiVersion: monitoring.googleapis.com/v1 kind: PodMonitoring metadata: annotations: aire.gke.io/generated: "true" recommender.ai.gke.io/generated: "true" labels: app: gemma2-27b-it-vllm-inference-server recommender.ai.gke.io/generated: "true" name: vllm-podmonitoring namespace: default spec: endpoints: - interval: 15s path: /metrics port: metrics selector: matchLabels: app: gemma2-27b-it-vllm-inference-server targetLabels: metadata: - pod - container - node ---
このマニフェストをデプロイするだけで、モデルが推論リクエストを処理するために必要なリソースがすべて作成されます。
GKE クラスタにマニフェストを適用します。
$ kubectl apply -f ./manifests.yaml
deployment.apps/gemma2-27b-it-vllm-deployment created
horizontalpodautoscaler.autoscaling/vllm-hpa created
service/gemma2-27b-it-vllm-service created
podmonitoring.monitoring.googleapis.com/vllm-podmonitoring created
推論リクエストの送信
デプロイされたサービスは、以下の形式のエンドポイントで公開されます。
http://<モデル名>-<モデルサーバー名>-service:<ポート>/
エンドポイントにアクセスするために、以下のコマンドでポート転送を設定します。
$ kubectl port-forward service/gemma2-27b-it-vllm-service 8000:8000 Forwarding from 127.0.0.1:8000 -> 8000 Forwarding from [::1]:8000 -> 8000
ポート転送の準備ができたら、curl コマンドでモデルに推論リクエストを送信してみます。
$ curl -X POST http://localhost:8000/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "google/gemma-2-27b-it", "prompt": "Google Cloud のサーバーレスコンテナサービスの名前はなんですか?", "max_tokens": 100, "temperature": 0.7 }'
gemma-2-27b-it モデルを使用する推論サーバーから、以下のようにレスポンスが返ってきました。
{ "id": "cmpl-8871ad8cf483442bbf57bff2397958c8", "object": "text_completion", "created": 1744225757, "model": "google/gemma-2-27b-it", "choices": [ { "index": 0, "text": "\n\n正解は **Cloud Run** です。\n\nCloud Run は、サーバーレス環境でコンテナを実行するためのフルマネージドサービスです。コンテナを構築し、デプロイし、スケールアウトする必要がなく、アプリケーションのコードのみを記述してデプロイするだけで、必要に応じて自動的にスケールアウトします。\n\nCloud Run についてさらに詳しく知りたい場合は、公式ドキュメントを参照してください:\n\n[https://cloud.google.com/run/docs](https", "logprobs": null, "finish_reason": "length", "stop_reason": null, "prompt_logprobs": null } ], "usage": { "prompt_tokens": 14, "total_tokens": 114, "completion_tokens": 100, "prompt_tokens_details": null } }
佐々木 駿太 (記事一覧)
G-gen最北端、北海道在住のクラウドソリューション部エンジニア
2022年6月にG-genにジョイン。Google Cloud Partner Top Engineer 2025 Fellowに選出。好きなGoogle CloudプロダクトはCloud Run。
趣味はコーヒー、小説(SF、ミステリ)、カラオケなど。
Follow @sasashun0805