Qwen2-7B-Instruct mit vLLM auf TPUs bereitstellen

In dieser Anleitung wird das Qwen/Qwen2-7B-Instruct-Modell mit dem vLLM TPU-Bereitstellungs-Framework auf einer TPU v6e-VM bereitgestellt.

Ziele

  1. die Umgebung einrichten
  2. vLLM mit Qwen2-7B-Instruct ausführen
  3. Senden Sie eine Inferenzanfrage.
  4. Führen Sie eine Benchmark-Arbeitslast aus.
  5. bereinigen.

Kosten

In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud verwendet, darunter:

Mit dem Preisrechner können Sie eine Kostenschätzung Ihrer voraussichtlichen Nutzung vornehmen.

Hinweise

Bevor Sie diese Anleitung durcharbeiten, folgen Sie der Anleitung auf der Seite Cloud TPU-Umgebung einrichten. In der Anleitung werden die Schritte beschrieben, die zum Erstellen eines Google Cloud-Projekts und zum Konfigurieren für die Verwendung von Cloud TPU erforderlich sind. Sie können auch ein vorhandenesGoogle Cloud -Projekt verwenden. Wenn Sie dies tun, können Sie den Schritt zum Erstellen einesGoogle Cloud -Projekts überspringen und mit Umgebung für Cloud TPU einrichten beginnen.

Für diese Anleitung benötigen Sie ein Hugging Face-Zugriffstoken. Sie können sich bei Hugging Face für ein kostenloses Konto registrieren. Nachdem Sie ein Konto erstellt haben, können Sie ein Zugriffstoken generieren:

  1. Klicken Sie auf der Seite Welcome to Hugging Face (Willkommen bei Hugging Face) auf Ihren Konto-Avatar und wählen Sie Access tokens (Zugriffstokens) aus.
  2. Klicken Sie auf der Seite Zugriffstokens auf Neues Token erstellen.
  3. Wählen Sie den Tokentyp Lesen aus und geben Sie einen Namen für das Token ein.
  4. Ihr Zugriffstoken wird angezeigt. Speichern Sie das Token an einem sicheren Ort.

Umgebung einrichten

  1. Cloud TPU v6e-VM mit der API für in die Warteschlange gestellte Ressourcen erstellen Für qwen2-7b-instruct empfehlen wir die Verwendung einer 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. Prüfen Sie, ob Ihre TPU-VM bereit ist.

    gcloud compute tpus queued-resources describe $QR_ID \
      --project $PROJECT_ID \
      --zone $ZONE
    

    Wenn Ihre TPU-VM erstellt wurde, wird der Status der Anfrage für in die Warteschlange gestellte Ressourcen auf ACTIVE gesetzt. Beispiel:

    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. Stellen Sie eine Verbindung zur TPU-VM her.

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

vLLM mit Qwen2-7B-instruct ausführen

  1. Führen Sie den vLLM-Docker-Container in der TPU-VM aus. Dieser Befehl verwendet eine Größe des gemeinsam genutzten Arbeitsspeichers von 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}
    
  2. Legen Sie im Container Ihr Hugging Face-Token fest. Ersetzen Sie YOUR_HF_TOKEN durch Ihr Hugging Face-Token.

    export HF_HOME=/dev/shm
    export HF_TOKEN=YOUR_HF_TOKEN
    
  3. Starten Sie den vLLM-Server mit dem Befehl vllm serve.

    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_LEN
    

    Wenn der vLLM-Server ausgeführt wird, sehen Sie eine Ausgabe wie die folgende:

    (APIServer pid=7) INFO:     Started server process [7]
    (APIServer pid=7) INFO:     Waiting for application startup.
    (APIServer pid=7) INFO:     Application startup complete.
    

Inferenzanfrage senden

Sobald der vLLM-Server ausgeführt wird, können Sie Anfragen über eine neue Shell an ihn senden.

  1. Öffnen Sie eine neue Shell und stellen Sie eine Verbindung zu Ihrer TPU-VM her.

      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
    
  2. Öffnen Sie eine Shell im laufenden Docker-Container.

      sudo docker exec -it $USER-vllm /bin/bash
    
  3. Senden Sie mit curl eine Testanfrage an den Server.

      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
          }'
    

Die Antwort wird im JSON-Format zurückgegeben.

Benchmark-Arbeitslast ausführen

Sie können Benchmarks für den laufenden Server über das zweite Terminal ausführen.

  1. Installieren Sie die datasets-Bibliothek im Container.

    pip install datasets
    
  2. Führen Sie den Befehl vllm bench serve aus:

    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
    

Die Benchmark-Ergebnisse sehen so aus:

============ 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
==================================================

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

  1. Geben Sie in der zweiten Shell exit ein, um den vLLM-Container zu beenden.
  2. Geben Sie in der zweiten Shell den Befehl exit ein, um das Terminal zu schließen.
  3. Geben Sie in der ersten Shell Strg+C ein, um den vLLM-Server zu beenden.
  4. Geben Sie in der ersten Shell exit ein, um den vLLM-Container zu beenden.
  5. Geben Sie in der ersten Shell exit ein, um die Verbindung zur TPU-VM zu trennen.

Ressourcen löschen

Sie können das Projekt löschen, wodurch alle Ressourcen gelöscht werden, oder das Projekt beibehalten und die Ressourcen löschen.

Projekt löschen

So löschen Sie Ihr Google Cloud -Projekt und alle zugehörigen Ressourcen:

    gcloud projects delete $PROJECT_ID

TPU-Ressourcen löschen

Löschen Sie Ihre Cloud TPU-Ressourcen. Mit dem folgenden Befehl werden sowohl die Anfrage für in die Warteschlange gestellte Ressourcen als auch die TPU-VM mit dem Parameter --force gelöscht.

  gcloud alpha compute tpus queued-resources delete $QR_ID \
    --project=$PROJECT_ID \
    --zone=$ZONE \
    --force

Nächste Schritte