Servir un modèle avec Ray Serve sur AKS

Dans cet article, vous déployez le modèle météo Aurora affiné en tant que point de terminaison HTTP persistant à l’aide de Ray Serve sur Azure Kubernetes Service (AKS). Cette méthode utilise une ressource RayService pour un service persistant et n’est pas soumise au contrôle d’admission de Kueue.

Important

Les logiciels open source sont mentionnés dans la documentation et les exemples AKS. Les logiciels que vous déployez sont exclus des contrats de niveau de service AKS, de la garantie limitée et du support Azure. Quand vous utilisez une technologie open source avec AKS, consultez les options de support disponibles auprès des communautés et responsables de projet respectifs pour élaborer un plan.

Microsoft assume la responsabilité de la génération des packages open source que nous déployons sur AKS. Cette responsabilité comprend la maîtrise complète des processus de génération, d’analyse, de signature et de validation ainsi que l’application de correctifs logiciels et le contrôle des fichiers binaires présents dans les images conteneur. Pour plus d’informations, consultez Gestion des vulnérabilités pour AKS et Couverture du support AKS.

Prérequis

Définir des variables d’environnement

Accédez à l’exemple de service en ligne dans le référentiel cloné et configurez les variables d’environnement requises :

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

Remarque

AURORA_RUN_ID correspond au JOB_NAME de l’exécution de réglage fin Aurora que vous avez terminée. Vous pouvez le trouver avec :

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

Déployer le service

Déployez RayService :

./submit-service.sh

Le script crée un ConfigMap à partir du code d’application de service, affiche le manifeste RayService via envsubst, et l’applique. L’opérateur KubeRay crée le cluster Ray et déploie l’application Serve.

Tip

Exécutez ./submit-service.sh --dry-run pour valider le manifeste rendu sans l’appliquer au cluster.

Remarque

RayService n’est pas soumis au contrôle d’admission de Kueue. Les charges de travail de service sont durables et nécessitent des ressources dédiées plutôt qu'une sémantique de file d’attente par lots.

Vérifier le déploiement

Attendez jusqu’à ce que RayService indique l’état « Running » :

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

Sortie attendue :

NAME           SERVICE STATUS   NUM SERVE ENDPOINTS
aurora-serve   Running          1

Tester le point de terminaison

Redirigez le port du service « serve » et envoyez des requêtes de test :

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

Vérification de l’état :

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

Sortie attendue :

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

Demande de prévision :

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}'

Sortie attendue :

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

La réponse inclut des statistiques récapitulatives par variable (forme, moyenne, min, max) pour chaque variable de surface dans la prévision.

Référence de configuration

Variable Default Description
AZURE_STORAGE_ACCOUNT_NAME (obligatoire) Compte de stockage à partir du module 1
AURORA_RUN_ID (obligatoire) JOB_NAME d’une exécution d’aurora-finetune terminée
AURORA_INPUT_CONTAINER aurora Conteneur avec des données d'initialisation
AURORA_ADAPTER_CONTAINER aurora Conteneur avec le point de contrôle LoRA
AURORA_INIT_FILE init-2021-01-01-00z.npz Fichier d’initialisation par défaut pour les requêtes
AURORA_LEAD_HOURS 6 Délai de prévision par défaut (doit être un multiple de 6h)
AURORA_LORA_RANK 8 Classement LoRA (doit correspondre à l’entraînement)
AURORA_REQUIRE_GPU_NAME A100 Vérification du nom du GPU (vide pour ignorer)
SERVICE_NAME aurora-serve Nom de la ressource RayService
ROUTE_PREFIX /aurora Préfixe d’itinéraire HTTP pour le point de terminaison de service
CONFIGMAP_NAME aurora-serve-scripts Nom du ConfigMap contenant le script de service

Nettoyer les ressources

Supprimez RayService et son ConfigMap :

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

Étapes suivantes