TPU で vLLM を使用して Qwen2-7B-Instruct をサービングする

このチュートリアルでは、v6e TPU VM で vLLM TPU サービング フレームワーク を使用して Qwen/Qwen2-7B-Instruct モデル をサービングします。

目標

  1. 環境をセットアップする。
  2. Qwen2-7B-Instruct で vLLM を実行する。
  3. 推論リクエストを送信する。
  4. ベンチマーク ワークロードを実行する。
  5. クリーンアップする。

費用

このチュートリアルでは、Google Cloud の課金対象となる以下のコンポーネントを使用します。

料金計算ツール を使うと、予想使用量に基づいて費用の見積もりを生成できます。

始める前に

このチュートリアルを行う前に、 Cloud TPU 環境を設定するの手順に沿って操作してください。この 手順では、プロジェクトを作成し、Cloud TPU を使用するように構成するために必要な手順について説明します。 Google Cloud既存の Google Cloud プロジェクトを使用することもできます。その場合は、プロジェクトを作成する手順をスキップして、Cloud TPU を使用するように環境をセットアップするから開始します。Google Cloud

このチュートリアルを使用するには、Hugging Face アクセス トークンが必要です。Hugging Faceで無料アカウントに登録できます 。アカウントを取得したら、アクセス トークンを生成します。

  1. [Welcome to Hugging Face] ページで、 アカウント アバターをクリックし、[**Access tokens**] を選択します。
  2. [Access Tokens] ページで、[Create new token] をクリックします。
  3. [Read] トークンタイプを選択し、トークンの名前を入力します。
  4. アクセス トークンが表示されます。トークンは安全な場所に保存してください。

環境をセットアップする

  1. キューに格納されたリソース 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-tpuv6e
    
  2. TPU 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-zone
    
  3. TPU VM に接続します。

      gcloud compute tpus tpu-vm ssh $TPU_NAME \
        --project $PROJECT_ID \
        --zone $ZONE
    

Qwen2-7B-Instruct で vLLM を実行する

  1. Hugging Face トークンを設定します。

      export HF_TOKEN="YOUR_HF_TOKEN"
    
  2. 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
    
  3. サーバーログを確認して、実行されていることを確認します。

    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 リファレンス ドキュメントをご覧ください。

  1. 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 つ目のターミナルから、実行中のサーバーに対してベンチマークを実行できます。

  1. コンテナ内で、datasets ライブラリをインストールします。

    sudo docker exec -it "${CONTAINER_NAME}" pip install datasets
    
  2. コンテナ内で、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 アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

  1. ターミナルで「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

次のステップ