このチュートリアルでは、v6e TPU VM で vLLM TPU サービング フレームワークを使用して Qwen/Qwen2-7B-Instruct モデルをサービングします。
目標
- 環境をセットアップする。
- Qwen2-7B-Instruct で 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 を作成します。qwen2-7b-instruct には、v6e-1 TPU を使用することをおすすめします。
export PROJECT_ID=YOUR_PROJECT_ID export TPU_NAME=qwen2-7b-instruct-tutorial export ZONE=us-east5-a export QR_ID=qwen2-7b-instruct-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
Qwen2-7B-instruct で 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/Qwen2-7B-Instruct \ --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=qwen2-7b-instruct-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/Qwen2-7B-Instruct", "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/Qwen2-7B-Instruct" \ --dataset-name random \ --num-prompts 1000 \ --seed 100
ベンチマーク結果は次のようになります。
============ Serving Benchmark Result ============
Successful requests: 1000
Benchmark duration (s): 45.35
Total input tokens: 1024000
Total generated tokens: 126848
Request throughput (req/s): 22.05
Output token throughput (tok/s): 2797.15
Peak output token throughput (tok/s): 4258.00
Peak concurrent requests: 1000.00
Total Token throughput (tok/s): 25377.57
---------------Time to First Token----------------
Mean TTFT (ms): 21332.46
Median TTFT (ms): 21330.37
P99 TTFT (ms): 42436.47
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms): 37.36
Median TPOT (ms): 38.56
P99 TPOT (ms): 38.69
---------------Inter-token Latency----------------
Mean ITL (ms): 37.35
Median ITL (ms): 38.55
P99 ITL (ms): 39.43
==================================================
クリーンアップ
このチュートリアルで使用したリソースについて、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 の詳細を確認する。