Ajustar el modelo meteorológico Aurora con Ray en AKS

En este artículo, envías un RayJob que ajusta con precisión el modelo fundacional meteorológico Microsoft Aurora con datos regionales de WeatherBench2 mediante LoRA. La tarea se ejecuta en una única GPU A100, Kueue controla la admisión y la tarea escribe el punto de control del adaptador y las métricas de entrenamiento en Azure Blob Storage.

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

Establecimiento de variables de entorno

Diríjase al ejemplo de ajuste fino de Aurora 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/aurora-finetune
export AZURE_STORAGE_ACCOUNT_NAME=$(terraform -chdir=../../1-infrastructure/terraform output -raw storage_account_name)
source env.example

El env.example archivo establece los valores predeterminados, como la imagen de Ray, el nombre de la cola y los parámetros de entrenamiento. La JOB_NAME variable se genera automáticamente con una marca de tiempo.

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 el RayJob al clúster:

./submit.sh

El script crea un ConfigMap a partir del script de entrenamiento en Python, genera el manifiesto a partir de la plantilla mediante envsubst y lo aplica al clúster. Kueue admite el trabajo cuando hay cuota de 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 aurora-finetune)

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
aurora-finetune-xxxxxxxxxx   SUCCEEDED    Complete            2026-01-01T00:00:00Z   2026-01-01T00:08:00Z   8m
NAME                                      QUEUE     RESERVED IN     ADMITTED   FINISHED   AGE
rayjob-aurora-finetune-xxxxxxxxxx-xxxxx   default   cluster-queue   True       True       8m

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

Comprobación de los resultados

Compruebe los artefactos cargados en Blob Storage:

az storage blob list -c aurora --prefix checkpoints/${JOB_NAME}/ \
  --account-name ${AZURE_STORAGE_ACCOUNT_NAME} --auth-mode login -o table

Resultado esperado:

Name                                                    Blob Type    Blob Tier    Length    Content Type
------------------------------------------------------  -----------  -----------  --------  ------------------------
checkpoints/<job-name>/last.safetensors                 BlockBlob    Hot          11432328  application/octet-stream
checkpoints/<job-name>/train-metrics.json               BlockBlob    Hot          985       application/json

Descargue e inspeccione las métricas de entrenamiento:

az storage blob download -c aurora \
  -n checkpoints/${JOB_NAME}/train-metrics.json \
  --account-name ${AZURE_STORAGE_ACCOUNT_NAME} --auth-mode login \
  --file /tmp/train-metrics.json
cat /tmp/train-metrics.json | python3 -m json.tool

Resultado esperado:

{
    "final_loss": 24051.97,
    "initial_loss": 24183.10,
    "loss_history": [24183.10],
    "loss_improvement": 131.13,
    "max_steps": 1,
    "trainable_parameters": 2850816,
    "gpu_name": "NVIDIA A100-SXM4-80GB",
    ...
}

La loss_history matriz debe contener valores finitos (no NaN), lo que confirma que la ruta de acceso de datos y el entrenamiento del modelo funcionan correctamente.

Referencia de configuración

Variable Predeterminado Description
AZURE_STORAGE_ACCOUNT_NAME (obligatorio) Cuenta de almacenamiento del módulo 1
AURORA_INPUT_CONTAINER aurora Contenedor para datos de entrada
AURORA_OUTPUT_CONTAINER aurora Contenedor para puntos de control
AURORA_INIT_FILE init-2021-01-01-00z.npz Nombre del archivo NPZ inicial
AURORA_TRUTH_FILE truth-2021-01-01-06z.npz Nombre del archivo NPZ de Truth
AURORA_MAX_STEPS 1 Pasos de entrenamiento
AURORA_LORA_RANK 8 rango de LoRA
AURORA_LEAD_HOURS 6 Plazo de previsión (debe ser un múltiplo de 6 h)
AURORA_REQUIRE_GPU_NAME A100 Protección por subcadena del nombre de la GPU
QUEUE_NAME default Nombre de la cola local de Kueue
CONFIGMAP_NAME aurora-finetune-scripts Nombre del objeto ConfigMap que contiene el script de entrenamiento

Limpieza de recursos

Elimine RayJob y su ConfigMap:

kubectl -n ray delete rayjob ${JOB_NAME}
kubectl -n ray delete configmap ${CONFIGMAP_NAME}

Pasos siguientes