Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In questo articolo si invia un RayJob che ottimizza il modello di base meteo Microsoft Aurora sui dati WeatherBench2 regionali usando LoRA. Il processo viene eseguito su una singola GPU A100, Kueue controlla l'ammissione e il processo scrive i checkpoint dell'adattatore e le metriche di training in archiviazione BLOB di Azure.
Importante
Il software open source è citato nella documentazione e negli esempi di AKS. Il software che distribuisci è escluso dagli accordi sul livello di servizio di AKS, dalla garanzia limitata e dal supporto Azure. Quando si utilizza una tecnologia open source insieme ad AKS, consulta le opzioni di supporto offerte dalle rispettive community e dai responsabili dei progetti per definire un piano.
Microsoft si assume la responsabilità di creare i pacchetti open source che distribuiamo su AKS. Tale responsabilità comprende la piena responsabilità del processo di compilazione, scansione, firma, convalida e applicazione degli hotfix, oltre al controllo dei file binari nelle immagini container. Per altre informazioni, vedere Gestione delle vulnerabilità per il servizio Azure Kubernetes (AKS) e Copertura del supporto del servizio Azure Kubernetes (AKS).
Prerequisiti
- Infrastruttura distribuita seguendo Distribuire l'infrastruttura per Ray e Kueue in AKS.
- Code Kueue configurate seguendo Configurare le code Kueue per i carichi di lavoro Ray in AKS.
- Almeno una GPU A100 disponibile nel cluster (questo esempio usa una GPU).
- Dati di Aurora WeatherBench2 caricati nell'archiviazione BLOB (il modulo Terraform dell'infrastruttura carica automaticamente tali dati).
-
envsubstinstallato (gettextpacchetto su Linux,brew install gettextsu macOS).
Impostare le variabili di ambiente
Passare all'esempio di ottimizzazione di Aurora nel repository clonato e configurare le variabili di ambiente necessarie:
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
Il env.example file imposta le impostazioni predefinite, tra cui l'immagine Ray, il nome della coda e i parametri di training. La JOB_NAME variabile viene generata automaticamente con un timestamp.
Nota
Se si sono configurate le code di team (opzione B), impostare export QUEUE_NAME=team-a o export QUEUE_NAME=team-b prima di eseguire source env.example. L'impostazione predefinita QUEUE_NAME=default funziona solo con la configurazione a coda singola (opzione A).
Invia il carico di lavoro
Invia il RayJob al cluster:
./submit.sh
Lo script crea un oggetto ConfigMap dallo script di training Python, esegue il rendering del modello di manifesto tramite envsubste lo applica al cluster. Kueue accetta il processo quando la quota GPU è disponibile nella coda configurata.
Tip
Eseguire ./submit.sh --dry-run per convalidare il manifesto di cui è stato eseguito il rendering senza applicarlo al cluster.
Monitorare lo stato di avanzamento
Trovare ed esportare il nome del processo se si è in una nuova shell:
export JOB_NAME=$(kubectl -n ray get rayjob --no-headers -o custom-columns=":metadata.name" | grep aurora-finetune)
Controlla lo stato di RayJob e lo stato di ammissione di Kueue:
kubectl -n ray get rayjob ${JOB_NAME} -w
kubectl -n ray get workload -w
Output previsto al termine del processo:
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
Eseguire la parte finale dei log del ruolo di lavoro:
kubectl -n ray logs -l ray.io/cluster=$(kubectl -n ray get rayjob ${JOB_NAME} -o jsonpath='{.status.rayClusterName}') -f
Verificare i risultati
Controllare gli artefatti caricati nell'archivio BLOB:
az storage blob list -c aurora --prefix checkpoints/${JOB_NAME}/ \
--account-name ${AZURE_STORAGE_ACCOUNT_NAME} --auth-mode login -o table
Output previsto:
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
Scaricare ed esaminare le metriche di training:
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
Output previsto:
{
"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 matrice deve contenere valori finiti (non NaN), confermando che il percorso dati e il training del modello funzionano correttamente.
Informazioni di riferimento sulla configurazione
| Variabile | Predefinito | Description |
|---|---|---|
AZURE_STORAGE_ACCOUNT_NAME |
(obbligatorio) | Account di archiviazione dal modulo 1 |
AURORA_INPUT_CONTAINER |
aurora |
Contenitore per i dati di input |
AURORA_OUTPUT_CONTAINER |
aurora |
Contenitore per i checkpoint |
AURORA_INIT_FILE |
init-2021-01-01-00z.npz |
Nome del file NPZ iniziale |
AURORA_TRUTH_FILE |
truth-2021-01-01-06z.npz |
Nome del file NPZ di riferimento |
AURORA_MAX_STEPS |
1 |
Fasi di addestramento |
AURORA_LORA_RANK |
8 |
Classificazione LoRA |
AURORA_LEAD_HOURS |
6 |
Previsione del lead time (deve essere un multiplo di 6 h) |
AURORA_REQUIRE_GPU_NAME |
A100 |
Protezione della sottostringa del nome GPU |
QUEUE_NAME |
default |
Nome LocalQueue Kueue |
CONFIGMAP_NAME |
aurora-finetune-scripts |
Nome del ConfigMap che contiene lo script di addestramento |
Pulire le risorse
Eliminare RayJob e il relativo ConfigMap:
kubectl -n ray delete rayjob ${JOB_NAME}
kubectl -n ray delete configmap ${CONFIGMAP_NAME}