Optimieren Sie das Aurora-Wettermodell mit Ray auf AKS

In diesem Artikel übermitteln Sie einen RayJob, der das Microsoft Aurora Weather Foundation-Modell auf regionalen WeatherBench2-Daten mit LoRA fein einstimmt. Der Einzelvorgang wird auf einer einzelnen A100-GPU ausgeführt, Kueue steuert die Zulassung, und der Einzelvorgang schreibt den Adapter-Checkpoint und die Trainingsmetriken nach Azure Blob Storage.

Wichtig

Open-Source-Software wird überall in AKS-Dokumenten und -Beispielen erwähnt. Software, die Sie bereitstellen, ist von AKS-Vereinbarungen zum Servicelevel, der eingeschränkten Garantie und dem Azure-Support ausgeschlossen. Wenn Sie Open-Source-Technologie zusammen mit AKS nutzen, nutzen Sie die Supportoptionen, die von den jeweiligen Communitys und Projektbetreuenden angeboten werden, um einen Plan zu entwickeln.

Microsoft übernimmt die Verantwortung für die Erstellung der Open-Source-Pakete, die wir auf AKS bereitstellen. Diese Verantwortung beinhaltet die vollständige Übernahme des Build-, Scan-, Signier-, Validierungs- und Hotfix-Prozesses sowie die Kontrolle über die Binärdateien in Container-Images. Weitere Informationen finden Sie unter Sicherheitsrisikomanagement für AKS und AKS-Supportabdeckung.

Voraussetzungen

Festlegen von Umgebungsvariablen

Navigieren Sie zum Aurora-Feinabstimmungsbeispiel im geklonten Repository, und konfigurieren Sie die erforderlichen Umgebungsvariablen:

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

Die env.example Datei legt Standardwerte fest, einschließlich des Ray-Bilds, des Warteschlangennamens und der Schulungsparameter. Die JOB_NAME Variable wird automatisch mit einem Zeitstempel generiert.

Hinweis

Wenn Sie die Teamwarteschlangen (Option B) konfiguriert haben, legen Sie export QUEUE_NAME=team-a oder export QUEUE_NAME=team-b fest, bevor Sie source env.example ausführen. Die Standardeinstellung QUEUE_NAME=default funktioniert nur mit der Konfiguration mit einer einzelnen Warteschlange (Option A).

Workload übermitteln

Übermitteln Sie den RayJob an den Cluster:

./submit.sh

Das Skript erstellt eine ConfigMap aus dem Python Schulungsskript, rendert die Manifestvorlage über envsubstund wendet sie auf den Cluster an. Kueue lässt den Job zu, wenn in der konfigurierten Warteschlange ein GPU-Kontingent verfügbar ist.

Tip

Führen Sie die Ausführung aus ./submit.sh --dry-run , um das gerenderte Manifest zu überprüfen, ohne es auf den Cluster anzuwenden.

Fortschritt überwachen

Suchen und exportieren Sie den Auftragsnamen, wenn Sie sich in einer neuen Shell befinden:

export JOB_NAME=$(kubectl -n ray get rayjob --no-headers -o custom-columns=":metadata.name" | grep aurora-finetune)

Überwachen Sie den RayJob-Status und die Kueue-Zulassung:

kubectl -n ray get rayjob ${JOB_NAME} -w
kubectl -n ray get workload -w

Erwartete Ausgabe, wenn der Einzelvorgang abgeschlossen ist:

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

Arbeitsprotokolle verfolgen:

kubectl -n ray logs -l ray.io/cluster=$(kubectl -n ray get rayjob ${JOB_NAME} -o jsonpath='{.status.rayClusterName}') -f

Überprüfen der Ergebnisse

Überprüfen Sie die hochgeladenen Artefakte im BLOB-Speicher:

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

Erwartete Ausgabe:

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

Laden Sie die Schulungsmetriken herunter, und überprüfen Sie sie:

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

Erwartete Ausgabe:

{
    "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",
    ...
}

Das loss_history Array sollte endliche Werte (nicht NaN) enthalten, um sicherzustellen, dass der Datenpfad und die Modellschulung ordnungsgemäß funktionieren.

Konfigurationsreferenz

Variable Vorgabe Description
AZURE_STORAGE_ACCOUNT_NAME (erforderlich) Speicherkonto aus Modul 1
AURORA_INPUT_CONTAINER aurora Container für Eingabedaten
AURORA_OUTPUT_CONTAINER aurora Container für Prüfpunkte
AURORA_INIT_FILE init-2021-01-01-00z.npz NPZ-Dateinamen initialisieren
AURORA_TRUTH_FILE truth-2021-01-01-06z.npz Wahrheit NPZ-Dateiname
AURORA_MAX_STEPS 1 Schulungsschritte
AURORA_LORA_RANK 8 LoRA-Rang
AURORA_LEAD_HOURS 6 Prognosevorlaufzeit (muss ein Vielfaches von 6 h sein)
AURORA_REQUIRE_GPU_NAME A100 GPU-Name-Teilzeichenfolgenschutz
QUEUE_NAME default Name der Kueue-LocalQueue
CONFIGMAP_NAME aurora-finetune-scripts Name für die ConfigMap, die das Schulungsskript hält

Bereinigen von Ressourcen

Löschen Sie den RayJob und dessen ConfigMap:

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

Nächste Schritte