Bedienen eines Modells mit Ray Serve auf AKS

In diesem Artikel stellen Sie das fein abgestimmte Aurora-Wettermodell als beständigen HTTP-Endpunkt mithilfe von Ray Serve auf Azure Kubernetes Service (AKS) bereit. Diese Methode verwendet eine RayService-Ressource für langlebiges Serving und unterliegt keiner Zulassungskontrolle durch Kueue.

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 Online-Bereitstellungsbeispiel im geklonten Repository, und konfigurieren Sie die erforderlichen Umgebungsvariablen:

cd <path-to-cloned-repo>/AKS/examples/kueue-and-ray-on-aks/3-workloads/online-serving
export AZURE_STORAGE_ACCOUNT_NAME=$(terraform -chdir=../../1-infrastructure/terraform output -raw storage_account_name)
export AURORA_RUN_ID=<your-aurora-finetune-job-name>
source env.example

Hinweis

AURORA_RUN_ID ist der JOB_NAME aus Ihrem abgeschlossenen Aurora-Feinabstimmungslauf. Sie finden es unter:

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

Bereitstellen des Diensts

Bereitstellen des RayService:

./submit-service.sh

Das Skript erstellt eine ConfigMap aus dem bereitgestellten Anwendungscode, rendert das RayService-Manifest über envsubstund wendet es an. Der KubeRay-Operator erstellt den Ray-Cluster und stellt die Serve-Anwendung bereit.

Tip

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

Hinweis

RayService wird hinsichtlich der Zulassung nicht von Kueue kontrolliert. Serving-Workloads sind zeitintensiv und erfordern dedizierte Ressourcen statt der Semantik von Batch-Warteschlangen.

Überprüfen Sie die Bereitstellung

Warten Sie, bis der RayService den Status „Running“ meldet:

kubectl -n ray get rayservice ${SERVICE_NAME} -w

Erwartete Ausgabe:

NAME           SERVICE STATUS   NUM SERVE ENDPOINTS
aurora-serve   Running          1

Testen des Endpunkts

Port-Weiterleitung des Serve-Diensts und Senden von Testanforderungen:

kubectl -n ray port-forward svc/${SERVICE_NAME}-serve-svc 8000:8000

Integritätsprüfung:

curl http://localhost:8000${ROUTE_PREFIX}

Erwartete Ausgabe:

{"status":"ok","gpu_name":"NVIDIA A100-SXM4-80GB","run_id":"<your-run-id>","adapter":"checkpoints/<your-run-id>/last.safetensors"}

Prognoseanforderung:

curl -X POST http://localhost:8000${ROUTE_PREFIX} \
  -H 'Content-Type: application/json' \
  -d '{"init_file": "init-2021-01-01-00z.npz", "lead_hours": 6}'

Erwartete Ausgabe:

{
  "init_file": "init-2021-01-01-00z.npz",
  "lead_hours": 6,
  "surface_variables": {
    "2t":  {"shape": [1,1,52,100], "mean": 298.76, "min": 272.0, "max": 302.0},
    "10u": {"shape": [1,1,52,100], "mean": -2.21,  "min": -18.0, "max": 15.38},
    "10v": {"shape": [1,1,52,100], "mean": 0.92,   "min": -13.88,"max": 18.88},
    "msl": {"shape": [1,1,52,100], "mean": 101320.07, "min": 100352.0, "max": 101888.0}
  },
  "gpu_name": "NVIDIA A100-SXM4-80GB",
  ...
}

Die Antwort enthält für jede Oberflächenvariable der Vorhersage zusammenfassende Statistiken je Variable (Form, Mittelwert, Minimum, Maximum).

Konfigurationsreferenz

Variable Vorgabe Description
AZURE_STORAGE_ACCOUNT_NAME (erforderlich) Speicherkonto aus Modul 1
AURORA_RUN_ID (erforderlich) JOB_NAME aus einem abgeschlossenen Aurora-Abstimmungslauf
AURORA_INPUT_CONTAINER aurora Container mit Init-Daten
AURORA_ADAPTER_CONTAINER aurora Container mit dem LoRA-Prüfpunkt
AURORA_INIT_FILE init-2021-01-01-00z.npz Standard-Initialisierungsdatei für Anfragen
AURORA_LEAD_HOURS 6 Standardwert für die Prognosevorlaufzeit (muss ein Vielfaches von 6 Stunden sein)
AURORA_LORA_RANK 8 LoRA-Rang (muss mit dem beim Training verwendeten Wert übereinstimmen)
AURORA_REQUIRE_GPU_NAME A100 Überprüfung des GPU-Namens (leer lassen, um zu überspringen)
SERVICE_NAME aurora-serve Name für die RayService-Ressource
ROUTE_PREFIX /aurora HTTP-Routenpräfix für den Serve-Endpunkt
CONFIGMAP_NAME aurora-serve-scripts Name der ConfigMap, die das Serving-Skript enthält

Bereinigen von Ressourcen

Löschen Sie den RayService und dessen ConfigMap:

kubectl -n ray delete rayservice ${SERVICE_NAME}
kubectl -n ray delete configmap ${CONFIGMAP_NAME}

Nächste Schritte