vLLM-Inferenz auf TPUs der Version v6e

In dieser Anleitung erfahren Sie, wie Sie die vLLM-Inferenz auf v6e-TPUs ausführen. Außerdem wird gezeigt, wie Sie das Benchmark-Script für das Meta Llama-3.1 8B-Modell ausführen.

Informationen zu den ersten Schritten mit vLLM auf v6e-TPUs finden Sie in der Kurzanleitung für vLLM.

Wenn Sie GKE verwenden, lesen Sie auch den GKE-Leitfaden.

Hinweise

Sie müssen die Einwilligungsvereinbarung unterzeichnen, um die Llama3-Modellfamilie im HuggingFace-Repository verwenden zu können. Rufen Sie https://huggingface.co/meta-llama/Llama-3.1-8B auf, füllen Sie die Einwilligungserklärung aus und warten Sie, bis Sie genehmigt wurden.

TPU v6e mit 4 Chips vorbereiten:

  1. Folgen Sie der Anleitung Cloud TPU-Umgebung einrichten, um sicherzustellen, dass Sie die erforderlichen Zugriffsrechte für die Verwendung von Cloud TPUs haben.

  2. Erstellen Sie eine Dienstidentität für die TPU-VM.

    gcloud alpha compute tpus tpu-vm service-identity create --zone=zone
  3. Erstellen Sie ein TPU-Dienstkonto und gewähren Sie Zugriff auf Google Cloud -Dienste.

    Dienstkonten ermöglichen dem Google Cloud TPU-Dienst, auf andere Google Cloud Dienste zuzugreifen. Ein nutzerverwaltetes Dienstkonto wird empfohlen. Sie können ein Dienstkonto in der Google Cloud Console oder über den Befehl gcloud erstellen.

    Erstellen Sie ein Dienstkonto mit dem gcloud-Befehlszeilentool:

    gcloud iam service-accounts create your-service-account-name \
    --description="your-sa-description" \
    --display-name="your-sa-display-name"
    export SERVICE_ACCOUNT_NAME=your-service-account-name

    So erstellen Sie ein Dienstkonto über die Google Cloud Console:

    1. Rufen Sie in der Google Cloud Console die Seite „Dienstkonten“ auf.
    2. Klicken Sie auf Dienstkonto erstellen.
    3. Geben Sie den Namen des Dienstkontos ein.
    4. Optional: Geben Sie eine Beschreibung für das Dienstkonto ein.
    5. Klicken Sie auf Erstellen und fahren Sie fort.
    6. Wählen Sie die Rollen aus, die Sie dem Dienstkonto zuweisen möchten.
    7. Klicken Sie auf Weiter.
    8. Optional: Geben Sie Nutzer oder Gruppen an, die das Dienstkonto verwalten können.
    9. Klicken Sie auf Fertig, um das Erstellen des Dienstkontos abzuschließen.

    Nachdem Sie das Dienstkonto erstellt haben, können Sie ihm Rollen gewähren.

    Folgende Rollen sind erforderlich:

    • TPU-Administrator: Erforderlich zum Erstellen einer TPU
    • Storage Admin: Erforderlich für den Zugriff auf Cloud Storage
    • Log-Autor
    • Monitoring-Messwert-Autor: Erforderlich zum Schreiben von Messwerten in Cloud Monitoring

    Ihr Administrator muss Ihnen die Rolle roles/resourcemanager.projectIamAdmin zuweisen, damit Sie Nutzern IAM-Rollen zuweisen können. Auch ein Nutzer mit der Rolle „Projekt-IAM-Administrator“ roles/resourcemanager.projectIamAdmin kann diese Rolle gewähren.

    Verwenden Sie die folgenden gcloud-Befehle, um Dienstkontorollen hinzuzufügen:

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
       --member serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com \
       --role roles/tpu.admin
    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
       --member serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com \
       --role roles/storage.admin
    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
       --member serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com \
       --role roles/logging.logWriter
    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
       --member serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com \
       --role roles/monitoring.metricWriter

    Sie können Rollen auch über die Google Cloud Console zuweisen.

    Wählen Sie in der Google Cloud Console die folgenden Rollen aus:

    1. Wählen Sie Ihr Dienstkonto aus und klicken Sie auf Hauptkonto hinzufügen.
    2. Geben Sie im Feld Neue Hauptkonten die E-Mail-Adresse Ihres Dienstkontos ein.
    3. Suchen Sie im Drop-down-Menü Rolle auswählen nach einer Rolle (z. B. Storage-Administrator) und wählen Sie sie aus.
    4. Klicken Sie auf Speichern.
  4. Authentifizieren Sie sich mit Google Cloud und konfigurieren Sie das Standardprojekt und die Standardzone für die Google Cloud CLI.

    gcloud auth login
    gcloud config set project PROJECT_ID
    gcloud config set compute/zone ZONE

Sichere Kapazität

Wenn Sie TPU-Kapazitäten sichern möchten, lesen Sie den Artikel Kontingente, um mehr über das Cloud-Kontingentsystem zu erfahren. Wenn Sie weitere Fragen zur Kapazitätssicherung haben, wenden Sie sich an Ihr Cloud TPU-Vertriebs- oder Account-Team.

Cloud TPU-Umgebung bereitstellen

Sie können TPU-VMs mit GKE, mit GKE und XPK oder als in der Warteschlange befindliche Ressourcen bereitstellen.

Vorbereitung

  • Diese Anleitung wurde mit Python 3.10 oder höher getestet.
  • Prüfen Sie, ob Ihr Projekt ein ausreichendes TPUS_PER_TPU_FAMILY-Kontingent hat. Dieses gibt die maximale Anzahl von Chips an, auf die Sie in IhremGoogle Cloud -Projekt zugreifen können.
  • Prüfen Sie, ob Ihr Projekt ein ausreichendes TPU-Kontingent für Folgendes hat:
    • TPU-VM-Kontingent
    • Kontingent für IP-Adressen
    • Hyperdisk Balanced-Kontingent
  • Nutzerberechtigungen für Projekte

TPU v6e bereitstellen

   gcloud alpha compute tpus queued-resources create QUEUED_RESOURCE_ID \
      --node-id TPU_NAME \
       --project PROJECT_ID \
       --zone ZONE \
       --accelerator-type v6e-4 \
       --runtime-version v2-alpha-tpuv6e \
       --service-account SERVICE_ACCOUNT

Beschreibung der Befehls-Flags

Variable Beschreibung
NODE_ID Die vom Nutzer zugewiesene ID der TPU, die erstellt wird, wenn die anstehende Ressourcenanfrage zugewiesen wird.
PROJECT_ID Google Cloud ist der Projektname. Verwenden Sie ein vorhandenes Projekt oder erstellen Sie ein neues.>
ZONE Welche Zonen unterstützt werden, erfahren Sie im Dokument TPU-Regionen und ‑Zonen.
ACCELERATOR_TYPE Informationen zu den unterstützten Beschleunigertypen finden Sie in der Dokumentation unter Beschleunigertypen.
RUNTIME_VERSION v2-alpha-tpuv6e
SERVICE_ACCOUNT Das ist die E-Mail-Adresse Ihres Dienstkontos. Sie finden sie in der Google Cloud Console unter „IAM“ -> „Dienstkonten“.

Beispiel: tpu-service-account@<your_project_ID>.iam.gserviceaccount.com.com

Verwenden Sie die Befehle list oder describe, um den Status der in der Warteschlange befindlichen Ressource abzufragen.

   gcloud alpha compute tpus queued-resources describe ${QUEUED_RESOURCE_ID}  \
      --project ${PROJECT_ID} --zone ${ZONE}

Eine vollständige Liste der Status von anstehenden Ressourcenanfragen finden Sie in der Dokumentation zu anstehenden Ressourcen.

Über SSH eine Verbindung zur TPU herstellen

  gcloud compute tpus tpu-vm ssh TPU_NAME

Abhängigkeiten installieren

  1. Erstellen Sie ein Verzeichnis für Miniconda:

    mkdir -p ~/miniconda3
  2. Laden Sie das Miniconda-Installationsskript herunter:

    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
  3. Installieren Sie Miniconda:

    bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
  4. Entfernen Sie das Miniconda-Installationsskript:

    rm -rf ~/miniconda3/miniconda.sh
  5. Fügen Sie Miniconda der Variablen PATH hinzu:

    export PATH="$HOME/miniconda3/bin:$PATH"
  6. Laden Sie ~/.bashrc neu, um die Änderungen auf die Variable PATH anzuwenden:

    source ~/.bashrc
  7. Conda-Umgebung erstellen:

    conda create -n vllm python=3.11 -y
    conda activate vllm
  8. Klonen Sie das vLLM-Repository und wechseln Sie zum vLLM-Verzeichnis:

    git clone https://github.com/vllm-project/vllm.git && cd vllm
    
  9. Bereinigen Sie die vorhandenen Pakete „torch“ und „torch-xla“:

    pip uninstall torch torch-xla -y
    
  10. Installieren Sie andere Build-Abhängigkeiten:

    pip install -r requirements-tpu.txt
    VLLM_TARGET_DEVICE="tpu" python setup.py develop
    sudo apt-get install libopenblas-base libopenmpi-dev libomp-dev
    

Zugriff auf das Modell erhalten

Generieren Sie ein neues Hugging Face-Token, falls Sie noch keines haben:

  1. Klicken Sie auf Profil > Einstellungen > Zugriffstokens.
  2. Wählen Sie Neues Token aus.
  3. Geben Sie einen Namen Ihrer Wahl und eine Rolle mit mindestens Read Berechtigungen an.
  4. Wählen Sie Token generieren aus.
  5. Kopieren Sie das generierte Token in die Zwischenablage, legen Sie es als Umgebungsvariable fest und authentifizieren Sie sich mit der huggingface-cli:

    export TOKEN=YOUR_TOKEN
    git config --global credential.helper store
    huggingface-cli login --token $TOKEN

Benchmarking-Daten herunterladen

  1. Erstellen Sie ein /data-Verzeichnis und laden Sie das ShareGPT-Dataset von Hugging Face herunter.

    mkdir ~/data && cd ~/data
    wget https://huggingface.co/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered/resolve/main/ShareGPT_V3_unfiltered_cleaned_split.json
    

vLLM-Server starten

Mit dem folgenden Befehl werden die Modellgewichte aus dem Hugging Face Model Hub in das Verzeichnis /tmp der TPU-VM heruntergeladen, eine Reihe von Eingabeformen vorab kompiliert und die Modellkompilierung in ~/.cache/vllm/xla_cache geschrieben.

Weitere Informationen finden Sie in der vLLM-Dokumentation.

   cd ~/vllm
   vllm serve "meta-llama/Meta-Llama-3.1-8B" --download_dir /tmp --num-scheduler-steps 4 --swap-space 16 --disable-log-requests --tensor_parallel_size=4 --max-model-len=2048 &> serve.log &

vLLM-Benchmarks ausführen

Führen Sie das vLLM-Benchmarking-Script aus:

   python benchmarks/benchmark_serving.py \
       --backend vllm \
       --model "meta-llama/Meta-Llama-3.1-8B"  \
       --dataset-name sharegpt \
       --dataset-path ~/data/ShareGPT_V3_unfiltered_cleaned_split.json  \
       --num-prompts 1000

Bereinigen

Löschen Sie die TPU:

gcloud compute tpus queued-resources delete QUEUED_RESOURCE_ID \
    --project PROJECT_ID \
    --zone ZONE \
    --force \
    --async