このチュートリアルでは、vLLM サービング フレームワークを使用して Qwen3 大規模言語モデル(LLM)をデプロイしてサービングする方法について説明します。Google Kubernetes Engine(GKE)上の単一の A4 仮想マシン(VM)インスタンスにモデルをデプロイします。
このチュートリアルは、Kubernetes コンテナ オーケストレーション機能を使用して推論ワークロードを処理することに関心のある ML エンジニア、プラットフォーム管理者、オペレーター、データおよび AI のスペシャリストを対象としています。
目標
Hugging Face を使用して Qwen3 にアクセスします。
環境を準備します。
Autopilot モードで GKE クラスタを作成する。
Cloud Storage バケットを作成する。
Hugging Face の認証情報用の Kubernetes Secret を作成します。
Cloud Storage 用に Workload Identity 連携を構成します。
Cloud Storage バケットに Qwen3 モデルを入力します。
vLLM コンテナを GKE にデプロイする。
curl を使用して Qwen3 を操作します。
クリーンアップする。
費用
このチュートリアルでは、以下を含む、 Google Cloudの課金対象となるコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
-
Google Cloud CLI をインストールします。
-
フェデレーション ID(連携 ID)を使用するように gcloud CLI を構成します。
詳細については、 フェデレーション ID を使用して gcloud CLI にログインするをご覧ください。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init -
Google Cloud プロジェクトを作成または選択します。
プロジェクトの選択または作成に必要なロール
- プロジェクトを選択する: プロジェクトの選択に特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトであれば、どのプロジェクトでも選択できます。
-
プロジェクトを作成する: プロジェクトを作成するには、
resourcemanager.projects.create権限を含むプロジェクト作成者ロール(roles/resourcemanager.projectCreator)が必要です。詳しくは、ロールを付与する方法をご覧ください。
-
Google Cloud プロジェクトを作成します。
gcloud projects create PROJECT_ID
PROJECT_IDは、作成する Google Cloud プロジェクトの名前に置き換えます。 -
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
PROJECT_IDは、 Google Cloud プロジェクトの名前に置き換えます。
必要な API が有効になっていない場合は、有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を通じてこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を通じてこの権限を取得できます。ロールを付与する方法を確認する。gcloud services enable container.googleapis.com
-
ユーザー アカウントにロールを付与します。次の IAM ロールごとに次のコマンドを 1 回実行します。
roles/container.admingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
次のように置き換えます。
PROJECT_ID: プロジェクト ID。USER_IDENTIFIER: ユーザー アカウント。例については、 IAM ポリシーで Workforce プールユーザーを表すをご覧ください。ROLE: ユーザー アカウントに付与する IAM ロール。
- Hugging Face アカウントにログインするか、アカウントを作成します。
Hugging Face を使用して Qwen3 にアクセスする
Hugging Face を使用して Qwen3 にアクセスする手順は次のとおりです。
- Hugging Face にログインする
- Hugging Face
readアクセス トークンを作成します。[Your Profile] > [Settings] > [Access Tokens] > [+Create new token] の順にクリックします。 - トークンに任意の名前を指定し、ロールを選択します。このチュートリアルで選択できる最小のロール権限レベルは Read です。
- [トークンを作成] を選択します。
- 生成されたトークンをコピーしてクリップボードに保存します。これは、このチュートリアルの後半で使用します。
環境を準備する
環境を準備するには、デフォルトの環境変数を設定します。
次のように置き換えます。
YOUR_PROJECT_ID: GKE クラスタを作成する Google Cloud プロジェクトの ID。YOUR_RESERVATION_NAME: GKE クラスタの作成に使用する予約の名前。予約が存在するプロジェクトに基づいて、次のいずれかの値を指定します。予約がプロジェクトに存在する場合:
RESERVATION_NAME予約が別のプロジェクトにあり、プロジェクトで予約を使用できる場合:
projects/RESERVATION_PROJECT_ID/reservations/RESERVATION_NAME
YOUR_REGION: GKE クラスタを作成するリージョン。クラスタは、予約が存在するリージョンでのみ作成できます。YOUR_CLUSTER_NAME: 作成する GKE クラスタの名前。YOUR_BUCKET_NAME: 作成するリージョン Cloud Storage バケットの名前。YOUR_HF_TOKEN: 前のセクションで作成した Hugging Face アクセス トークン。YOUR_NETWORK_NAME: GKE クラスタが使用するネットワーク。次のいずれかの値を指定します。カスタム ネットワークを作成した場合は、ネットワークの名前を指定します。
それ以外の場合は、
defaultを指定します。
YOUR_SUBNETWORK_NAME: GKE クラスタが使用するサブネットワーク。次のいずれかの値を指定します。カスタム サブネットワークを作成した場合は、サブネットワークの名前を指定します。指定できるのは、予約と同じリージョンにあるサブネットワークのみです。
それ以外の場合は、
defaultを指定します。
Autopilot モードの GKE クラスタを作成する
Autopilot モードで GKE クラスタを作成するには、次のコマンドを実行します。
GKE クラスタの作成には時間がかかることがあります。 Google Cloud がクラスタの作成を完了したことを確認するには、 Google Cloud コンソールの [Kubernetes クラスタ] に移動します。Cloud Storage バケットを作成する
モデルを保存するリージョン Cloud Storage バケットを作成するには、次のコマンドを実行します。
Hugging Face の認証情報用の Kubernetes Secret を作成する
Hugging Face の認証情報用の Kubernetes Secret を作成する手順は次のとおりです。
GKE クラスタと通信するように
kubectlを構成します。Hugging Face トークンを保存する Kubernetes Secret を作成します。
Cloud Storage 用 Workload Identity 連携を構成する
GKE が Cloud Storage バケットに安全にアクセスできるようにするには、GKE Workload Identity 連携を設定します。
Cloud Storage バケットに Qwen3 モデルの重みを入力する
Cloud Storage バケットに Qwen3 モデルの重みを入力するには、Cloud Storage FUSE CSI ドライバを使用してバケットをボリュームとしてマウントする Kubernetes Job を実行します。バケットにモデルがまだ存在しない場合、ジョブは Hugging Face からモデルをダウンロードします。
次の内容で
qwen3-model-loader.yamlという名前のファイルを作成します。qwen3-model-loader.yamlマニフェストを適用して、ダウンロード ジョブを初期化します。ジョブが実行されていることを確認するには、ダウンロード ジョブのログをストリーミングします。
kubectl logs -f job/qwen3-model-loader -c downloaderモデルのダウンロード ジョブが完了するまで待ちます。
ジョブを削除するには、次のコマンドを実行します。
vLLM コンテナを GKE クラスタにデプロイする
Kubernetes Deployment を使用して Qwen3 モデルをサービングする vLLM コンテナをデプロイする手順は次のとおりです。
選択した vLLM デプロイを含む
qwen3-235b-deploy.yamlファイルを作成します。qwen3-235b-deploy.yamlファイルは GKE クラスタに適用します。
コンテナは Run:ai Model Streamer を使用して Cloud Storage からモデルの重みを直接ストリーミングするため、起動時間が大幅に短縮されます。完了ステータスを確認するには、次のコマンドを実行します。
--timeout=600sフラグを使用すると、コマンドはデプロイを最大 10 分間モニタリングできます。
curl を使用して Qwen3 を操作する
デプロイした Qwen3 モデルを確認する手順は次のとおりです。
Qwen3 へのポート転送を設定します。
新しいターミナル ウィンドウを開きます。その後、
curlを使用してモデルとチャットできます。出力は次のようになります。
{ "id": "chatcmpl-a926ddf7ef2745ca832bda096e867764", "object": "chat.completion", "created": 1755023619, "model": "Qwen/Qwen3-235B-A22B-Instruct-2507", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "A GPU is a specialized electronic circuit designed to rapidly process and render graphics and perform parallel computations.", "refusal": null, "annotations": null, "audio": null, "function_call": null, "tool_calls": [], "reasoning_content": null }, "logprobs": null, "finish_reason": "stop", "stop_reason": null } ], "service_tier": null, "system_fingerprint": null, "usage": { "prompt_tokens": 16, "total_tokens": 36, "completion_tokens": 20, "prompt_tokens_details": null }, "prompt_logprobs": null, "kv_transfer_params": null }
モデルのパフォーマンスをモニタリングする
モデルのパフォーマンスをモニタリングする場合は、Cloud Monitoring で vLLM ダッシュボードの統合を使用できます。このダッシュボードでは、トークンのスループット、ネットワーク レイテンシ、エラー率など、モデルの重要なパフォーマンス指標を確認できます。詳細については、Monitoring のドキュメントの vLLM をご覧ください。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
このチュートリアルで使用したリソースについて、Cloud 請求先アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
リソースの削除
チュートリアルのリソースを削除するには、次のコマンドを実行します。
GKE クラスタを削除する
GKE クラスタを削除するには、次のコマンドを実行します。
プロジェクトの削除
Google Cloud プロジェクトを削除する:
gcloud projects delete PROJECT_ID