Inferencia de vLLM en TPU v6e

En este instructivo, se muestra cómo ejecutar la inferencia de vLLM en TPUs v6e. También se muestra cómo ejecutar la secuencia de comandos de comparativa para el modelo Meta Llama-3.1 8B.

Para comenzar a usar vLLM en TPUs v6e, consulta la guía de inicio rápido de vLLM.

Si usas GKE, consulta también el instructivo de GKE.

Antes de comenzar

Debes firmar el acuerdo de consentimiento para usar la familia de modelos Llama3 en el repositorio de HuggingFace. Ve a meta-llama/Llama-3.1-8B, completa el acuerdo de consentimiento y espera a que se apruebe.

Prepara el aprovisionamiento de una TPU v6e con 4 chips:

  1. Sigue las instrucciones de la guía Configura el entorno de Cloud TPU para configurar un proyecto de Google Cloud , configurar Google Cloud CLI, habilitar la API de Cloud TPU y asegurarte de tener acceso para usar las Cloud TPU.

  2. Autentícate con Google Cloud y configura el proyecto y la zona predeterminados para Google Cloud CLI.

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

Cómo proteger la capacidad

Cuando tengas todo listo para proteger la capacidad de las TPU, consulta Cuotas de Cloud TPU para obtener más información sobre las cuotas de Cloud TPU. Si tienes más preguntas sobre cómo proteger la capacidad, comunícate con tu equipo de ventas o de cuentas de Cloud TPU.

Aprovisiona el entorno de Cloud TPU

Puedes aprovisionar VMs de TPU con GKE, con GKE y XPK, o como recursos en cola.

Requisitos previos

  • Verifica que tu proyecto tenga suficiente cuota de TPUS_PER_TPU_FAMILY, que especifica la cantidad máxima de chips a los que puedes acceder en tu proyecto deGoogle Cloud .
  • Verifica que tu proyecto tenga suficiente cuota de TPU para lo siguiente:
    • Cuota de VM de TPU
    • Cuota de direcciones IP
    • Quota de Hyperdisk Balanced
  • Permisos del proyecto del usuario

Aprovisiona una 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

Descripciones de las marcas de comandos

Variable Descripción
NODE_ID El ID asignado por el usuario de la TPU que se crea cuando se asigna la solicitud de recurso en fila.
ID DEL PROYECTO Google Cloud nombre del proyecto. Usa un proyecto existente o crea uno nuevo.>
ZONA Consulta el documento Regiones y zonas de TPU para conocer las zonas compatibles.
ACCELERATOR_TYPE Consulta la documentación sobre tipos de aceleradores para conocer los tipos de aceleradores compatibles.
RUNTIME_VERSION v2-alpha-tpuv6e
SERVICE_ACCOUNT Esta es la dirección de correo electrónico de tu cuenta de servicio que puedes encontrar en consola de Google Cloud -> IAM -> Cuentas de servicio

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

Usa los comandos list o describe para consultar el estado de tu recurso en cola.

   gcloud alpha compute tpus queued-resources describe <var>QUEUED_RESOURCE_ID}</var>  \
      --project <var>PROJECT_ID</var> --zone <var>ZONE</var>

Para obtener una lista completa de los estados de las solicitudes de recursos en cola, consulta la documentación de Recursos en cola.

Cómo conectarse a la TPU con SSH

  gcloud compute tpus tpu-vm ssh TPU_NAME

Instala dependencias

  1. Crea un directorio para Miniconda:

    mkdir -p ~/miniconda3
  2. Descarga la secuencia de comandos del instalador de Miniconda:

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

    bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
  4. Quita la secuencia de comandos del instalador de Miniconda:

    rm -rf ~/miniconda3/miniconda.sh
  5. Agrega Miniconda a tu variable PATH:

    export PATH="$HOME/miniconda3/bin:$PATH"
  6. Vuelve a cargar ~/.bashrc para aplicar los cambios a la variable PATH:

    source ~/.bashrc
  7. Crea un entorno de Conda:

    conda create -n vllm python=3.11 -y
    conda activate vllm
  8. Clona el repositorio de vLLM y navega al directorio vLLM:

    git clone https://github.com/vllm-project/vllm.git && cd vllm
    
  9. Limpia los paquetes torch y torch-xla existentes:

    pip uninstall torch torch-xla -y
    
  10. Instala otras dependencias de compilación:

    pip install -r requirements/tpu.txt
    VLLM_TARGET_DEVICE="tpu" python -m pip install --editable .
    sudo apt-get install libopenblas-base libopenmpi-dev libomp-dev
    

Obtén acceso al modelo

Genera un nuevo token de Hugging Face si aún no tienes uno:

  1. Haz clic en Tu perfil > Configuración > Tokens de acceso.
  2. Selecciona Token nuevo.
  3. Especifica el nombre que desees y un rol con al menos Read permisos.
  4. Selecciona Generate un token.
  5. Copia el token generado en el portapapeles, configúralo como una variable de entorno y realiza la autenticación con huggingface-cli:

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

Descargar datos de comparativas

  1. Crea un directorio /data y descarga el conjunto de datos de ShareGPT desde Hugging Face.

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

Inicia el servidor vLLM

El siguiente comando descarga los pesos del modelo de Hugging Face Model Hub al directorio /tmp de la VM de TPU, precompila un rango de formas de entrada y escribe la compilación del modelo en ~/.cache/vllm/xla_cache.

Para obtener más detalles, consulta la documentación de vLLM.

   cd ~/vllm
   vllm serve "meta-llama/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 &

Ejecuta comparativas de vLLM

Ejecuta la secuencia de comandos de comparativas de vLLM:

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

Limpia

Borra la TPU:

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