Inférence vLLM sur les TPU v6e

Ce tutoriel vous explique comment exécuter l'inférence vLLM sur les TPU v6e. Il vous montre également comment exécuter le script de référence pour le modèle Meta Llama-3.1 8B.

Pour commencer à utiliser vLLM sur les TPU v6e, consultez le guide de démarrage rapide vLLM.

Si vous utilisez GKE, consultez également le tutoriel GKE.

Avant de commencer

Vous devez signer le contrat de consentement pour utiliser la famille de modèles Llama3 dans le dépôt HuggingFace. Accédez à https://huggingface.co/meta-llama/Llama-3.1-8B, remplissez le contrat d'autorisation et attendez d'être approuvé.

Préparez-vous à provisionner un TPU v6e avec quatre puces:

  1. Suivez le guide Configurer l'environnement Cloud TPU pour vous assurer que vous disposez des droits d'accès appropriés pour utiliser Cloud TPU.

  2. Créez une identité de service pour la VM TPU.

    gcloud alpha compute tpus tpu-vm service-identity create --zone=zone
  3. Créez un compte de service TPU et accordez l'accès aux services Google Cloud .

    Les comptes de service permettent au service Google Cloud TPU d'accéder à d'autres services Google Cloud. Un compte de service géré par l'utilisateur est recommandé. Vous pouvez créer un compte de service à partir de la console Google Cloud ou à l'aide de la commande gcloud.

    Créez un compte de service à l'aide de l'outil de ligne de commande gcloud:

    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

    Créez un compte de service à partir de la console Google Cloud:

    1. Accédez à la page "Comptes de service" dans la console Google Cloud.
    2. Cliquez sur Créer un compte de service.
    3. Saisissez le nom du compte de service.
    4. (Facultatif) Saisissez une description du compte de service.
    5. Cliquez sur Créer et continuez.
    6. Choisissez les rôles que vous souhaitez accorder au compte de service.
    7. Cliquez sur Continuer.
    8. (Facultatif) Spécifiez les utilisateurs ou les groupes autorisés à gérer le compte de service.
    9. Cliquez sur OK pour terminer la création du compte de service.

    Une fois votre compte de service créé, procédez comme suit pour accorder des rôles de compte de service.

    Les rôles suivants sont nécessaires:

    • Administrateur TPU: rôle nécessaire pour créer un TPU
    • Storage Admin: rôle nécessaire pour accéder à Cloud Storage
    • Rédacteur de journaux
    • Rédacteur de métriques Monitoring: nécessaire pour écrire des métriques dans Cloud Monitoring

    Votre administrateur doit vous accorder le rôle roles/resourcemanager.projectIamAdmin pour que vous puissiez attribuer des rôles IAM aux utilisateurs. Un utilisateur disposant du rôle roles/resourcemanager.projectIamAdmin Administrateur IAM de projet peut également attribuer ce rôle.

    Utilisez les commandes gcloud suivantes pour ajouter des rôles de compte de service:

    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

    Vous pouvez également attribuer des rôles à l'aide de la console Google Cloud.

    Dans la console Google Cloud, sélectionnez les rôles suivants:

    1. Sélectionnez votre compte de service, puis cliquez sur Ajouter un compte principal.
    2. Dans le champ Nouveaux comptes principaux, saisissez l'adresse e-mail de votre compte de service.
    3. Dans le menu déroulant Sélectionner un rôle, recherchez le rôle (par exemple, Storage Admin) et sélectionnez-le.
    4. Cliquez sur Enregistrer.
  4. Authentifiez-vous avec Google Cloud et configurez le projet et la zone par défaut pour Google Cloud CLI.

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

Sécuriser la capacité

Lorsque vous êtes prêt à sécuriser la capacité de TPU, consultez la page sur les quotas pour en savoir plus sur le système Cloud Quotas. Si vous avez d'autres questions sur la sécurisation de la capacité, contactez votre équipe commerciale ou votre équipe chargée de votre compte Cloud TPU.

Provisionner l'environnement Cloud TPU

Vous pouvez provisionner des VM TPU avec GKE, avec GKE et XPK, ou en tant que ressources mises en file d'attente.

Prérequis

  • Ce tutoriel a été testé avec Python 3.10 ou version ultérieure.
  • Vérifiez que votre projet dispose d'un quota TPUS_PER_TPU_FAMILY suffisant, qui spécifie le nombre maximal de chips auxquels vous pouvez accéder dans votre projetGoogle Cloud .
  • Vérifiez que votre projet dispose d'un quota TPU suffisant pour :
    • Quota de VM TPU
    • Quota d'adresses IP
    • Quota Hyperdisk équilibré
  • Autorisations de l'utilisateur sur le projet

Provisionner un TPU v6e

   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

Description des options de commande

Variable Description
NODE_ID ID attribué par l'utilisateur du TPU créé lorsque la requête de ressource mise en file d'attente est allouée.
PROJECT_ID Google Cloud nom du projet. Utilisez un projet existant ou créez-en un.>
ZONE Pour connaître les zones compatibles, consultez le document Régions et zones TPU.
ACCELERATOR_TYPE Pour connaître les types d'accélérateurs compatibles, consultez la documentation sur les types d'accélérateurs.
RUNTIME_VERSION v2-alpha-tpuv6e
SERVICE_ACCOUNT Il s'agit de l'adresse e-mail de votre compte de service, que vous pouvez trouver dans la console Google Cloud -> IAM -> Comptes de service.

Exemple: tpu-service-account@<votre_ID_de_projet>.iam.gserviceaccount.com.com

Utilisez les commandes list ou describe pour interroger l'état de votre ressource mise en file d'attente.

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

Pour obtenir la liste complète des états des requêtes de ressources en file d'attente, consultez la documentation sur les ressources en file d'attente.

Se connecter au TPU à l'aide de SSH

  gcloud compute tpus tpu-vm ssh TPU_NAME

Installer des dépendances

  1. Créez un répertoire pour Miniconda:

    mkdir -p ~/miniconda3
  2. Téléchargez le script d'installation de Miniconda:

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

    bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
  4. Supprimez le script d'installation Miniconda:

    rm -rf ~/miniconda3/miniconda.sh
  5. Ajoutez Miniconda à votre variable PATH:

    export PATH="$HOME/miniconda3/bin:$PATH"
  6. Actualisez ~/.bashrc pour appliquer les modifications à la variable PATH:

    source ~/.bashrc
  7. Créez un environnement Conda:

    conda create -n vllm python=3.11 -y
    conda activate vllm
  8. Clonez le dépôt vLLM et accédez au répertoire vLLM:

    git clone https://github.com/vllm-project/vllm.git && cd vllm
    
  9. Nettoyez les packages torch et torch-xla existants:

    pip uninstall torch torch-xla -y
    
  10. Installez les autres dépendances de compilation:

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

Accéder au modèle

Générez un nouveau jeton Hugging Face si vous n'en possédez pas déjà un :

  1. Cliquez sur Your Profile > Settings > Access Tokens (Votre profil > Paramètres > Jetons d'accès).
  2. Sélectionnez New Token (Nouveau jeton).
  3. Spécifiez un nom de votre choix et un rôle avec au moins les autorisations Read.
  4. Sélectionnez Générer un jeton.
  5. Copiez le jeton généré dans votre presse-papiers, définissez-le en tant que variable d'environnement et authentifiez-vous avec huggingface-cli:

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

Télécharger les données d'analyse comparative

  1. Créez un répertoire /data et téléchargez l'ensemble de données ShareGPT depuis Hugging Face.

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

Lancer le serveur vLLM

La commande suivante télécharge les poids du modèle à partir du hub de modèles Hugging Face dans le répertoire /tmp de la VM TPU, précompile une plage de formes d'entrée et écrit la compilation du modèle dans ~/.cache/vllm/xla_cache.

Pour en savoir plus, consultez la documentation sur vLLM.

   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 &

Exécuter des benchmarks vLLM

Exécutez le script de benchmark vLLM:

   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

Effectuer un nettoyage

Supprimez le TPU:

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