Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo, enviarás un RayJob que ejecuta la inferencia por lotes de vLLM sin conexión utilizando el adaptador LoRA generado por el ejemplo de entrenamiento de LLM. El trabajo lee la partición de prueba de Viggo y el adaptador LoRA desde Azure Blob Storage, genera predicciones en una única GPU y sube los resultados.
Importante
El software de código abierto se menciona en toda la documentación y ejemplos de AKS. El software que implemente se excluye de los contratos de nivel de servicio de AKS, la garantía limitada y el soporte técnico de Azure. A medida que usa la tecnología de código abierto junto con AKS, consulte las opciones de soporte técnico disponibles en las comunidades y los mantenedores de proyectos respectivos para desarrollar un plan.
Microsoft asume la responsabilidad de crear los paquetes de código abierto que implementamos en AKS. Esa responsabilidad incluye ser plenamente responsable del proceso de compilación, escaneo, firma, validación y corrección rápida, junto con el control de los binarios en las imágenes de contenedor. Para obtener más información, vea Administración de vulnerabilidades para AKS y Cobertura del soporte técnico de AKS.
Prerequisites
- Infraestructura implementada siguiendo Implementar la infraestructura para Ray y Kueue en AKS.
- Las colas de Kueue se configuran siguiendo Configurar colas de Kueue para cargas de trabajo de Ray en AKS.
- Al menos una GPU A100 disponible en el clúster.
- El entrenamiento del LLM se ha completado siguiendo Entrenar un LLM con Ray en AKS; el adaptador LoRA debe encontrarse en
llm-pipeline/lora/en el almacenamiento de blobs. -
envsubstinstalado (gettextpaquete en Linux,brew install gettexten macOS).
Establecimiento de variables de entorno
Vaya al ejemplo de inferencia por lotes en el repositorio clonado y configure las variables de entorno necesarias:
cd <path-to-cloned-repo>/AKS/examples/kueue-and-ray-on-aks/3-workloads/batch-inference
export AZURE_STORAGE_ACCOUNT_NAME=$(terraform -chdir=../../1-infrastructure/terraform output -raw storage_account_name)
source env.example
Note
Si has configurado colas de equipo (Opción B), establece export QUEUE_NAME=team-a o export QUEUE_NAME=team-b antes de ejecutar source env.example. El valor predeterminado QUEUE_NAME=default solo funciona con la configuración de una sola cola (opción A).
Enviar la carga de trabajo
Envíe la inferencia por lotes RayJob:
./submit.sh
El script crea un ConfigMap a partir del script de inferencia, procesa la plantilla del manifiesto mediante envsubst y la aplica. Kueue admite el trabajo cuando hay 1 GPU disponible en la cola configurada.
Tip
Ejecute ./submit.sh --dry-run para validar el manifiesto representado sin aplicarlo al clúster.
Supervisión de progreso
Busca y exporta el nombre del trabajo si te encuentras en un nuevo shell:
export JOB_NAME=$(kubectl -n ray get rayjob --no-headers -o custom-columns=":metadata.name" | grep batch-inference)
Vea el estado de RayJob y la admisión de Kueue:
kubectl -n ray get rayjob ${JOB_NAME} -w
kubectl -n ray get workload -w
Salida esperada cuando se completa el trabajo:
NAME JOB STATUS DEPLOYMENT STATUS START TIME END TIME AGE
batch-inference-xxxxxxxxxx SUCCEEDED Complete 2026-01-01T00:00:00Z 2026-01-01T00:09:00Z 9m
NAME QUEUE RESERVED IN ADMITTED FINISHED AGE
rayjob-batch-inference-xxxxxxxxxx-xxxxx default cluster-queue True True 9m
Consulta los registros del trabajador:
kubectl -n ray logs -l ray.io/cluster=$(kubectl -n ray get rayjob ${JOB_NAME} -o jsonpath='{.status.rayClusterName}') -f --tail=100
Comprobación de los resultados
Enumeración de archivos de predicción en Blob Storage:
az storage blob list -c llm-pipeline --prefix "inference/${JOB_NAME}/" \
--account-name ${AZURE_STORAGE_ACCOUNT_NAME} --auth-mode login -o table
Resultado esperado:
Name Blob Type Blob Tier Length Content Type
--------------------------------------------------- ----------- ----------- -------- ------------------------
inference/<job-name>/metrics.json BlockBlob Hot 128 application/octet-stream
inference/<job-name>/predictions.jsonl BlockBlob Hot 411777 application/octet-stream
Descargue e inspeccione las predicciones:
az storage blob download -c llm-pipeline \
-n "inference/${JOB_NAME}/predictions.jsonl" \
--account-name ${AZURE_STORAGE_ACCOUNT_NAME} --auth-mode login \
--file /tmp/predictions.jsonl
head -1 /tmp/predictions.jsonl | python3 -m json.tool
Resultado esperado:
{
"input": "I'm wondering, have you played any games you found genuinely shocking?",
"expected": "request(specifier[shocking])",
"generated": "request_explanation"
}
Referencia de configuración
| Variable | Predeterminado | Description |
|---|---|---|
AZURE_STORAGE_ACCOUNT_NAME |
(obligatorio) | Cuenta de almacenamiento del módulo 1 |
JOB_NAME |
batch-inference-<timestamp> |
Nombre único de RayJob |
QUEUE_NAME |
default |
Nombre de la cola local de Kueue |
LLM_DATA_CONTAINER |
llm-pipeline |
Contenedor de blobs con datos de prueba de viggo |
LLM_LORA_CONTAINER |
llm-pipeline |
Contenedor de blobs con adaptadores de LoRA |
CONFIGMAP_NAME |
batch-inference-scripts |
Nombre del objeto ConfigMap que contiene el script de inferencia |
Limpieza de recursos
Elimine RayJob y su ConfigMap:
kubectl -n ray delete rayjob ${JOB_NAME}
kubectl -n ray delete configmap ${CONFIGMAP_NAME}
Para anular toda la infraestructura, consulte Implementación de la infraestructura: limpieza de recursos.