このチュートリアルでは、v6e TPU VM で vLLM TPU サービング フレームワークを使用して Qwen/Qwen3-8B-Base モデルをサービングする方法について説明します。
目標
- 環境をセットアップする。
- Qwen3-8B-Base で vLLM を実行します。
- 推論リクエストを送信します。
- ベンチマーク ワークロードを実行します。
- クリーンアップする。
費用
このチュートリアルでは、Google Cloud の課金対象となる以下のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
このチュートリアルに進む前に、Cloud TPU 環境を設定するの手順に沿って操作してください。この手順では、 Google Cloudプロジェクトを作成し、Cloud TPU を使用するように構成するために必要な手順について説明します。既存のGoogle Cloud プロジェクトを使用することもできます。その場合は、Google Cloud プロジェクトの作成手順をスキップして、Cloud TPU を使用するための環境を設定するから開始できます。
このチュートリアルを使用するには、Hugging Face アクセス トークンが必要です。Hugging Face で無料アカウントを登録できます。アカウントを作成したら、アクセス トークンを生成します。
- [Welcome to Hugging Face] ページで、アカウントのアバターをクリックして [アクセス トークン] を選択します。
- [アクセス トークン] ページで、[新しいトークンを作成] をクリックします。
- [読み取り] トークン タイプを選択し、トークンの名前を入力します。
- アクセス トークンが表示されます。トークンは安全な場所に保存してください。
環境の設定
キューに格納されたリソース API を使用して Cloud TPU v6e VM を作成します。Qwen3-8B-Base には、v6e-1 TPU を使用することをおすすめします。
export PROJECT_ID=YOUR_PROJECT_ID export TPU_NAME=Qwen3-8B-Base-tutorial export ZONE=us-east5-a export QR_ID=Qwen3-8B-Base-qr gcloud alpha compute tpus queued-resources create $QR_ID \ --node-id $TPU_NAME \ --project $PROJECT_ID \ --zone $ZONE \ --accelerator-type v6e-1 \ --runtime-version v2-alpha-tpuv6eTPU VM の準備が整っていることを確認します。
gcloud compute tpus queued-resources describe $QR_ID \ --project $PROJECT_ID \ --zone $ZONETPU VM が作成されると、キューに格納されたリソース リクエストのステータスが
ACTIVEに設定されます。次に例を示します。name: projects/your-project-id/locations/your-zone/queuedResources/your-queued-resource-id state: state: ACTIVE tpu: nodeSpec: - node: acceleratorType: v6e-1 bootDisk: {} networkConfig: enableExternalIps: true queuedResource: projects/your-project-number/locations/your-zone/queuedResources/your-queued-resource-id runtimeVersion: v2-alpha-tpuv6e schedulingConfig: {} serviceAccount: {} shieldedInstanceConfig: {} useTpuVm: true nodeId: your-node-id parent: projects/your-project-number/locations/your-zoneTPU VM に接続します。
gcloud compute tpus tpu-vm ssh $TPU_NAME \ --project $PROJECT_ID \ --zone $ZONE
Qwen3-8B-Base で vLLM を実行する
TPU VM 内で、vLLM Docker コンテナを実行します。このコマンドは、共有メモリサイズとして 10 GB を使用します。
export DOCKER_URI=vllm/vllm-tpu:latest sudo docker run -it --rm --name $USER-vllm --privileged --net=host \ -v /dev/shm:/dev/shm \ --shm-size 10gb \ -p 8000:8000 \ --entrypoint /bin/bash ${DOCKER_URI}コンテナ内で、Hugging Face トークンを設定します。
YOUR_HF_TOKENは、Hugging Face トークンに置き換えます。export HF_HOME=/dev/shm export HF_TOKEN=YOUR_HF_TOKENvllm serveコマンドを使用して vLLM サーバーを起動します。export MAX_MODEL_LEN=4096 export TP=1 # number of chips vllm serve Qwen/Qwen3-8B-Base \ --seed 42 \ --disable-log-requests \ --gpu-memory-utilization 0.98 \ --max-num-batched-tokens 1024 \ --max-num-seqs 128 \ --tensor-parallel-size $TP \ --max-model-len $MAX_MODEL_LENvLLM サーバーが実行されると、次のような出力が表示されます。
(APIServer pid=7) INFO: Started server process [7] (APIServer pid=7) INFO: Waiting for application startup. (APIServer pid=7) INFO: Application startup complete.
推論リクエストを送信する
vLLM サーバーが実行されたら、新しいシェルからリクエストを送信できます。
新しいシェルを開き、TPU VM に接続します。
export PROJECT_ID=YOUR_PROJECT_ID export TPU_NAME=Qwen3-8B-Base-tutorial export ZONE=us-east5-a gcloud compute tpus tpu-vm ssh $TPU_NAME \ --project $PROJECT_ID \ --zone=$ZONE実行中の Docker コンテナでシェルを開きます。
sudo docker exec -it $USER-vllm /bin/bashcurlを使用して、サーバーにテスト リクエストを送信します。curl http://localhost:8000/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "Qwen/Qwen3-8B-Base", "prompt": "The future of AI is", "max_tokens": 200, "temperature": 0 }'
レスポンスは JSON 形式で返されます。
ベンチマーク ワークロードを実行する
2 つ目のターミナルから、実行中のサーバーに対してベンチマークを実行できます。
コンテナ内で
datasetsライブラリをインストールします。pip install datasetsvllm bench serveコマンドを実行します。export HF_HOME=/dev/shm cd /workspace/vllm vllm bench serve \ --backend vllm \ --model "Qwen/Qwen3-8B-Base" \ --dataset-name random \ --num-prompts 1000 \ --seed 100
ベンチマークの結果は次のようになります。
============ Serving Benchmark Result ============
Successful requests: 1000
Failed requests: 0
Benchmark duration (s): 73.97
Total input tokens: 1024000
Total generated tokens: 128000
Request throughput (req/s): 13.52
Output token throughput (tok/s): 1730.38
Peak output token throughput (tok/s): 2522.00
Peak concurrent requests: 1000.00
Total Token throughput (tok/s): 15573.42
---------------Time to First Token----------------
Mean TTFT (ms): 34834.97
Median TTFT (ms): 34486.19
P99 TTFT (ms): 70234.40
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms): 47.30
Median TPOT (ms): 48.57
P99 TPOT (ms): 48.60
---------------Inter-token Latency----------------
Mean ITL (ms): 47.31
Median ITL (ms): 53.49
P99 ITL (ms): 54.58
==================================================
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
- 2 つ目のシェルで「exit」と入力して、vLLM コンテナを終了します。
- 2 つ目のシェルで「exit」コマンドを入力して、ターミナルを閉じます。
- 最初のシェルで、Ctrl+C と入力して vLLM サーバーを停止します。
- 最初のシェルで「exit」と入力して、vLLM コンテナを終了します。
- 最初のシェルで「exit」と入力して、TPU VM との接続を解除します。
リソースを削除する
プロジェクトを削除してすべてのリソースを削除することも、プロジェクトを保持してリソースを削除することもできます。
プロジェクトの削除
Google Cloud プロジェクトと関連するすべてのリソースを削除するには、次のコマンドを実行します。
gcloud projects delete $PROJECT_ID
TPU リソースを削除する
Cloud TPU リソースを削除します。次のコマンドは、--force パラメータを使用して、キューに格納されたリソース リクエストと TPU VM の両方を削除します。
gcloud alpha compute tpus queued-resources delete $QR_ID \
--project=$PROJECT_ID \
--zone=$ZONE \
--force
次のステップ
- Cloud TPU 上の vLLM の詳細を確認する。
- Cloud TPU の詳細を確認する。