Servir um modelo com Ray Serve no AKS

Neste artigo, implementa o modelo meteorológico Aurora afinado como um endpoint HTTP persistente usando o Ray Serve no Azure Kubernetes Service (AKS). Este método utiliza um recurso RayService para serviço de longa duração e não está sujeito ao controlo de admissão por Kueue.

Importante

O software de código aberto é mencionado em toda a documentação e amostras do AKS. O software que você implanta é excluído dos contratos de nível de serviço do AKS, da garantia limitada e do suporte do Azure. Ao usar a tecnologia de código aberto ao lado do AKS, consulte as opções de suporte disponíveis nas respetivas comunidades e mantenedores do projeto para desenvolver um plano.

A Microsoft assume a responsabilidade pela criação dos pacotes de código aberto que implantamos no AKS. Essa responsabilidade inclui ter a propriedade completa do processo de compilação, digitalização, assinatura, validação e correção rápida, juntamente com o controlo dos binários nas imagens de contentor. Para obter mais informações, consulte Gestão de vulnerabilidades para AKS e Cobertura de suporte AKS.

Pré-requisitos

Definir variáveis de ambiente

Navegue até ao exemplo de serviço online no repositório clonado e configure as variáveis de ambiente necessárias:

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

Nota

AURORA_RUN_ID é o JOB_NAME da tua execução concluída de afinação do Aurora. Pode encontrá-lo em:

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

Implementar o serviço

Implemente o RayService:

./submit-service.sh

O script cria um ConfigMap a partir do código da aplicação de serviço, renderiza o manifesto RayService via envsubst, e aplica-o. O operador KubeRay cria o cluster Ray e implementa a aplicação Serve.

Sugestão

Execute ./submit-service.sh --dry-run para validar o manifesto renderizado sem o aplicar ao cluster.

Nota

A RayService não está sujeita a controlo de admissão pelo Kueue. As cargas de trabalho de serviço são duradouras e requerem recursos dedicados em vez de semântica de fila em lote.

Verificar a implantação

Aguarde até que o RayService indique Running:

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

Produção esperada:

NAME           SERVICE STATUS   NUM SERVE ENDPOINTS
aurora-serve   Running          1

Testar o ponto final

Encaminhe o serviço de serviço e envie pedidos de teste:

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

Verificação de saúde:

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

Produção esperada:

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

Pedido de previsão:

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

Produção esperada:

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

A resposta inclui estatísticas resumidas por variável (forma, média, mínimo, máximo) para cada variável de superfície na previsão.

Referência de configuração

Variável Predefinição Description
AZURE_STORAGE_ACCOUNT_NAME (obrigatório) Conta de armazenamento do Módulo 1
AURORA_RUN_ID (obrigatório) JOB_NAME de uma corrida completada de Aurora-Fintune
AURORA_INPUT_CONTAINER aurora Contentor com dados de inicialização
AURORA_ADAPTER_CONTAINER aurora Contentor com o ponto de verificação LoRA
AURORA_INIT_FILE init-2021-01-01-00z.npz Ficheiro de inicialização predefinido para pedidos
AURORA_LEAD_HOURS 6 Prazo de previsão padrão (deve ser um múltiplo de 6h)
AURORA_LORA_RANK 8 Rank de LoRA (tem de corresponder ao usado no treino)
AURORA_REQUIRE_GPU_NAME A100 Verificação do nome da GPU (vazio para saltar)
SERVICE_NAME aurora-serve Nome do recurso RayService
ROUTE_PREFIX /aurora Prefixo de rota HTTP para o endpoint de serviço
CONFIGMAP_NAME aurora-serve-scripts Nome para o ConfigMap que contém o script de serviço

Limpeza de recursos

Apague o RayService e o seu ConfigMap:

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

Passos seguintes