このチュートリアルでは、v6e TPU VM で vLLM TPU サービング フレームワーク を使用して Qwen/Qwen2-7B-Instruct モデル をサービングします。
目標
- 環境をセットアップする。
- Qwen2-7B-Instruct で vLLM を実行する。
- 推論リクエストを送信する。
- ベンチマーク ワークロードを実行する。
- クリーンアップする。
費用
このチュートリアルでは、Google Cloud の課金対象となる以下のコンポーネントを使用します。
始める前に
このチュートリアルを行う前に、 Cloud TPU 環境を設定するの手順に沿って操作してください。この 手順では、プロジェクトを作成し、Cloud TPU を使用するように構成するために必要な手順について説明します。 Google Cloud既存の Google Cloud プロジェクトを使用することもできます。その場合は、プロジェクトを作成する手順をスキップして、Cloud TPU を使用するように環境をセットアップするから開始します。Google Cloud
このチュートリアルを使用するには、Hugging Face アクセス トークンが必要です。Hugging Faceで無料アカウントに登録できます 。アカウントを取得したら、アクセス トークンを生成します。
- [Welcome to Hugging Face] ページで、 アカウント アバターをクリックし、[**Access tokens**] を選択します。
- [Access Tokens] ページで、[Create new token] をクリックします。
- [Read] トークンタイプを選択し、トークンの名前を入力します。
- アクセス トークンが表示されます。トークンは安全な場所に保存してください。
環境をセットアップする
キューに格納されたリソース 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 $ZONEたとえば、ステータスが
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 を実行する
Hugging Face トークンを設定します。
export HF_TOKEN="YOUR_HF_TOKEN"TPU VM 内で、デタッチ モードで vLLM Docker コンテナを実行し、vLLM サーバーを起動します。このコマンドでは、共有メモリサイズとして 10 GB を使用します。
export DOCKER_URI="vllm/vllm-tpu:v0.18.0" export CONTAINER_NAME="${USER}-vllm" export MAX_MODEL_LEN=4096 export TP=1 # number of chips sudo docker run -d --name "${CONTAINER_NAME}" \ --privileged --net=host \ -v /dev/shm:/dev/shm \ --shm-size 10gb \ -e "HF_HOME=/dev/shm" \ -e "HF_TOKEN=${HF_TOKEN}" \ -p 8000:8000 "${DOCKER_URI}" \ vllm serve Qwen/Qwen2-7B-Instruct \ --seed 42 \ --gpu-memory-utilization 0.98 \ --max-num-batched-tokens 1024 \ --max-num-seqs 128 \ --tensor-parallel-size $TP \ --max-model-len $MAX_MODEL_LENサーバーログを確認して、実行されていることを確認します。
sudo docker logs -f "${CONTAINER_NAME}"vLLM サーバーが実行されている場合は、次のような出力が表示されます。出力が表示されたら、
CTRL+Cを押してターミナルに戻ります。(APIServer pid=7) INFO: Started server process [7] (APIServer pid=7) INFO: Waiting for application startup. (APIServer pid=7) INFO: Application startup complete.
推論リクエストを送信する
vLLM サーバーが実行されたら、API にリクエストを送信できます。詳細については、vLLM API リファレンス ドキュメントをご覧ください。
curlを使用して、サーバーにテスト リクエストを送信します。sudo docker exec -ti "${CONTAINER_NAME}" \ 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ライブラリをインストールします。sudo docker exec -it "${CONTAINER_NAME}" pip install datasetsコンテナ内で、
vllm bench serveコマンドを実行します。sudo docker exec -it "${CONTAINER_NAME}" \ 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 アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
- ターミナルで「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 の詳細を確認する。