Sirve un modelo con Ray Serve en AKS

En este artículo, implementa el modelo meteorológico Aurora perfeccionado como un punto de conexión HTTP persistente con Ray Serve en Azure Kubernetes Service (AKS). Este método usa un recurso RayService para servicio persistente y no está sometido al control de admisión de Kueue.

Importante

El software de código abierto se menciona en toda la documentación y ejemplos de AKS. El software que implemente se excluye de los contratos de nivel de servicio de AKS, la garantía limitada y el soporte técnico de Azure. A medida que usa la tecnología de código abierto junto con AKS, consulte las opciones de soporte técnico disponibles en las comunidades y los mantenedores de proyectos respectivos para desarrollar un plan.

Microsoft asume la responsabilidad de crear los paquetes de código abierto que implementamos en AKS. Esa responsabilidad incluye ser plenamente responsable del proceso de compilación, escaneo, firma, validación y corrección rápida, junto con el control de los binarios en las imágenes de contenedor. Para obtener más información, vea Administración de vulnerabilidades para AKS y Cobertura del soporte técnico de AKS.

Prerequisites

Establecimiento de variables de entorno

Vaya al ejemplo de servicio en línea en el repositorio clonado y configure las variables de entorno necesarias:

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

Note

AURORA_RUN_ID es el JOB_NAME de tu ejecución completada de Aurora Fine-Tune. Puede encontrarlo con:

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

Implementación del servicio

Implemente RayService:

./submit-service.sh

El script crea un ConfigMap a partir del código de la aplicación de serving, genera el manifiesto de RayService mediante envsubst y lo aplica. El operador KubeRay crea el clúster de Ray e implementa la aplicación Serve.

Tip

Ejecute ./submit-service.sh --dry-run para validar el manifiesto representado sin aplicarlo al clúster.

Note

RayService no está sometido al control de admisión de Kueue. Las cargas de trabajo de servicio tienen una larga duración y necesitan recursos dedicados, en lugar de la semántica de las colas por lotes.

Comprobación de la implementación

Espere hasta que RayService indique el estado Running:

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

Resultado esperado:

NAME           SERVICE STATUS   NUM SERVE ENDPOINTS
aurora-serve   Running          1

Prueba del punto de conexión

Reenvía los puertos del servicio serve y envía solicitudes de prueba:

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

Comprobación de estado:

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

Resultado esperado:

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

Solicitud de previsión:

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

Resultado esperado:

{
  "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 respuesta incluye estadísticas de resumen por variable (forma, media, mínima y máxima) para cada variable de superficie de la previsión.

Referencia de configuración

Variable Predeterminado Description
AZURE_STORAGE_ACCOUNT_NAME (obligatorio) Cuenta de almacenamiento del módulo 1
AURORA_RUN_ID (obligatorio) JOB_NAME de una ejecución completada de Aurora Fine-Tune
AURORA_INPUT_CONTAINER aurora Contenedor con datos de inicialización
AURORA_ADAPTER_CONTAINER aurora Contenedor con el punto de control de LoRA
AURORA_INIT_FILE init-2021-01-01-00z.npz Archivo de inicialización predeterminado para solicitudes
AURORA_LEAD_HOURS 6 Tiempo de plazo de previsión predeterminado (debe ser un múltiplo de 6h)
AURORA_LORA_RANK 8 Rango de LoRA (debe coincidir con el del entrenamiento)
AURORA_REQUIRE_GPU_NAME A100 Comprobación del nombre de la GPU (dejar en blanco para omitir)
SERVICE_NAME aurora-serve Nombre del recurso RayService
ROUTE_PREFIX /aurora Prefijo de ruta HTTP para el endpoint serve
CONFIGMAP_NAME aurora-serve-scripts Nombre del objeto ConfigMap que contiene el script de servicio

Limpieza de recursos

Elimine RayService y su configMap:

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

Pasos siguientes