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 comparativas 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 https://huggingface.co/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:
Sigue la guía Configura el entorno de Cloud TPU para asegurarte de tener el acceso adecuado para usar Cloud TPU.
Crea una identidad de servicio para la VM de TPU.
gcloud alpha compute tpus tpu-vm service-identity create --zone=zone
Crea una cuenta de servicio de TPU y otorga acceso a los servicios de Google Cloud .
Las cuentas de servicio permiten que el servicio de Google Cloud TPU acceda a otros servicios Google Cloud. Se recomienda una cuenta de servicio administrada por el usuario. Puedes crear una cuenta de servicio desde la consola de Google Cloud o con el comando
gcloud
.Crea una cuenta de servicio con la herramienta de línea de comandos de
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
Crea una cuenta de servicio desde la consola de Google Cloud:
- Ve a la página Cuentas de servicio en la consola de Google Cloud.
- Haga clic en Crear cuenta de servicio.
- Ingresa el nombre de la cuenta de servicio.
- Opcional: Ingresa una descripción para la cuenta de servicio.
- Haz clic en Crear y continúa.
- Elige los roles que deseas otorgar a la cuenta de servicio.
- Haz clic en Continuar.
- (Opcional) Especifica los usuarios o grupos que pueden administrar la cuenta de servicio.
- Haz clic en Listo para terminar de crear la cuenta de servicio.
Después de crear tu cuenta de servicio, sigue estos pasos para otorgarle roles.
Se requieren los siguientes roles:
- Administrador de TPU: Es necesario para crear una TPU.
- Administrador de almacenamiento: Es necesario para acceder a Cloud Storage.
- Escritor de registros
- Escritor de métricas de Monitoring: Es necesario para escribir métricas en Cloud Monitoring.
Tu administrador debe otorgarte el rol
roles/resourcemanager.projectIamAdmin
para que puedas asignar roles de IAM a los usuarios. Un usuario con el rolroles/resourcemanager.projectIamAdmin
de administrador de IAM del proyecto también puede otorgar este rol.Usa los siguientes comandos
gcloud
para agregar roles de cuenta de servicio: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
También puedes asignar roles con la consola de Google Cloud.
En la consola de Google Cloud, selecciona los siguientes roles:
- Selecciona tu cuenta de servicio y haz clic en Agregar principal.
- En el campo Principales nuevas, ingresa la dirección de correo electrónico de tu cuenta de servicio.
- En el menú desplegable Seleccionar un rol, busca el rol (por ejemplo, Administrador de almacenamiento) y selecciónalo.
- Haz clic en Guardar.
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, revisa la página de cuotas para obtener información sobre el sistema de Cloud Quotas. Si tienes más preguntas sobre cómo reservar 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
- Este instructivo se probó con Python 3.10 o versiones posteriores.
- 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
- Si usas GKE con XPK, consulta Permisos de la consola de Google Cloud en la cuenta de usuario o de servicio para conocer los permisos necesarios para ejecutar XPK.
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 ${QUEUED_RESOURCE_ID} \
--project ${PROJECT_ID} --zone ${ZONE}
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
Crea un directorio para Miniconda:
mkdir -p ~/miniconda3
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
Instala Miniconda:
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
Quita la secuencia de comandos del instalador de Miniconda:
rm -rf ~/miniconda3/miniconda.sh
Agrega Miniconda a tu variable
PATH
:export PATH="$HOME/miniconda3/bin:$PATH"
Vuelve a cargar
~/.bashrc
para aplicar los cambios a la variablePATH
:source ~/.bashrc
Crea un entorno de Conda:
conda create -n vllm python=3.11 -y conda activate vllm
Clona el repositorio de vLLM y navega al directorio vLLM:
git clone https://github.com/vllm-project/vllm.git && cd vllm
Limpia los paquetes torch y torch-xla existentes:
pip uninstall torch torch-xla -y
Instala otras dependencias de compilación:
pip install -r requirements-tpu.txt VLLM_TARGET_DEVICE="tpu" python setup.py develop 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:
- Haz clic en Tu perfil > Configuración > Tokens de acceso.
- Selecciona Token nuevo.
- Especifica el nombre que desees y un rol con al menos
Read
permisos. - Selecciona Generate un token.
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
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/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 &
Ejecuta comparativas de vLLM
Ejecuta la secuencia de comandos de comparativas de 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
Limpia
Borra la TPU:
gcloud compute tpus queued-resources delete QUEUED_RESOURCE_ID \ --project PROJECT_ID \ --zone ZONE \ --force \ --async