Dostrojenie modelu pogodowego Aurora z Rayem w usłudze AKS

W tym artykule przesyłasz zadanie RayJob, które dostraja bazowy model pogodowy Microsoft Aurora na podstawie regionalnych danych WeatherBench2 przy użyciu techniki LoRA. Zadanie działa na pojedynczym GPU A100, Kueue kontroluje dopuszczanie zadań, a zadanie zapisuje punkt kontrolny adaptera i metryki trenowania do usługi Azure Blob Storage.

Important

Oprogramowanie typu open source jest wymienione w dokumentacji i przykładach usługi AKS. Oprogramowanie, które wdrażasz, jest wykluczone z umów dotyczących poziomu usług AKS, ograniczonej gwarancji i wsparcia technicznego platformy Azure. W miarę korzystania z technologii open source wraz z usługą AKS zapoznaj się z opcjami pomocy technicznej dostępnymi w odpowiednich społecznościach i opiekunami projektów, aby opracować plan.

Firma Microsoft ponosi odpowiedzialność za tworzenie pakietów typu open source wdrażanych w usłudze AKS. Ta odpowiedzialność obejmuje posiadanie pełnej kontroli nad procesem kompilacji, skanowania, podpisywania, weryfikacji i szybkich poprawek, a także nad plikami binarnymi w obrazach kontenerów. Aby uzyskać więcej informacji, zobacz zarządzanie podatnościami dla AKS i zakres wsparcia dla AKS.

Prerequisites

Ustawianie zmiennych środowiskowych

Przejdź do przykładu aurora fine-tune w sklonowanym repozytorium i skonfiguruj wymagane zmienne środowiskowe:

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

Plik env.example ustawia wartości domyślne, w tym obraz Ray, nazwę kolejki i parametry trenowania. Zmienna JOB_NAME jest generowana automatycznie za pomocą znacznika czasu.

Note

Jeśli skonfigurowałeś kolejki zespołowe (Opcja B), ustaw export QUEUE_NAME=team-a lub export QUEUE_NAME=team-b przed uruchomieniem source env.example. Wartość domyślna QUEUE_NAME=default działa tylko z konfiguracją z pojedynczą kolejką (opcja A).

Prześlij zadanie

Prześlij RayJob do klastra:

./submit.sh

Skrypt tworzy obiekt ConfigMap na podstawie skryptu treningowego w Pythonie, renderuje szablon manifestu za pomocą envsubst i wdraża go w klastrze. Kueue dopuszcza zadanie, gdy w skonfigurowanej kolejce jest dostępny limit GPU.

Wskazówka

Uruchom polecenie ./submit.sh --dry-run , aby zweryfikować renderowany manifest bez stosowania go do klastra.

Monitorowanie postępu

Znajdź i wyeksportuj nazwę zadania, jeśli pracujesz w nowej powłoce:

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

Obserwuj stan RayJob i dopuszczenie przez Kueue:

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

Oczekiwane dane wyjściowe po zakończeniu zadania:

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

Ujmij dzienniki procesów roboczych:

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

Weryfikowanie wyników

Sprawdź przesłane artefakty w magazynie obiektów blob:

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

Oczekiwane dane wyjściowe:

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

Pobierz i sprawdź metryki trenowania:

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

Oczekiwane dane wyjściowe:

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

Tablica loss_history powinna zawierać wartości skończone (a nie NaN), potwierdzając, że ścieżka danych i trenowanie modelu działają poprawnie.

Dokumentacja konfiguracji

Zmienna Default Description
AZURE_STORAGE_ACCOUNT_NAME (wymagane) Konto magazynu z modułu 1
AURORA_INPUT_CONTAINER aurora Kontener dla danych wejściowych
AURORA_OUTPUT_CONTAINER aurora Kontener dla punktów kontrolnych
AURORA_INIT_FILE init-2021-01-01-00z.npz Init NPZ file name (Inicjowanie nazwy pliku NPZ)
AURORA_TRUTH_FILE truth-2021-01-01-06z.npz Nazwa referencyjnego pliku NPZ
AURORA_MAX_STEPS 1 Kroki trenowania
AURORA_LORA_RANK 8 Ranga LoRA
AURORA_LEAD_HOURS 6 Czas realizacji prognozy (musi być wielokrotny 6 godzin)
AURORA_REQUIRE_GPU_NAME A100 Ochrona podciągów nazw procesora GPU
QUEUE_NAME default Nazwa kolejki lokalnej Kueue
CONFIGMAP_NAME aurora-finetune-scripts Nazwa obiektu ConfigMap zawierającego skrypt trenowania

Uprzątnij zasoby

Usuń RayJob i jego ConfigMap:

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

Następne kroki