Servir um modelo com o Ray Serve no AKS

Neste artigo, você implantará o modelo meteorológico Aurora ajustado como um ponto de extremidade HTTP persistente usando o Ray Serve no Serviço de Kubernetes do Azure (AKS). Este método usa um recurso RayService para serviço de longa duração e não é controlado por admissão pelo Kueue.

Importante

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

A Microsoft assume a responsabilidade por criar os pacotes de código aberto que implantamos no AKS. Essa responsabilidade inclui ter propriedade completa do processo de criação, verificação, sinalização, validação e hotfix, junto com o controle sobre os binários em imagens de contêiner. Para obter mais informações, confira Gerenciamento de vulnerabilidades para o AKS e Cobertura de suporte do AKS.

Pré-requisitos

Definir variáveis de ambiente

Navegue até o 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

Observação

AURORA_RUN_ID é o JOB_NAME da sua execução de ajuste fino do Aurora concluída. Você pode encontrá-lo com:

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

Implantar o serviço

Implante o RayService:

./submit-service.sh

O script cria um ConfigMap a partir do código da aplicação de serving, renderiza o manifesto do RayService por meio de envsubst e o aplica. O operador KubeRay cria o cluster Ray e implanta o aplicativo Serve.

Tip

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

Observação

RayService não é submetido ao controle de admissão pelo Kueue. As cargas de trabalho de serviço são de longa duração e precisam de recursos dedicados em vez de semântica de fila em lote.

Verificar a implantação

Aguarde até que o RayService reporte "Em execução":

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

Resultado esperado:

NAME           SERVICE STATUS   NUM SERVE ENDPOINTS
aurora-serve   Running          1

Testar o ponto de extremidade

Encaminhe a porta do serviço e envie solicitações 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}

Resultado esperado:

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

Solicitação 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}'

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

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

Referência de configuração

Variable Default Description
AZURE_STORAGE_ACCOUNT_NAME (necessário) Conta de armazenamento do Módulo 1
AURORA_RUN_ID (necessário) JOB_NAME de uma execução concluída do aurora-finetune
AURORA_INPUT_CONTAINER aurora Contêiner com dados de inicialização
AURORA_ADAPTER_CONTAINER aurora Contêiner com o ponto de verificação LoRA
AURORA_INIT_FILE init-2021-01-01-00z.npz Arquivo de inicialização padrão para solicitações
AURORA_LEAD_HOURS 6 Antecedência padrão da previsão (deve ser um múltiplo de 6 h)
AURORA_LORA_RANK 8 Rank do LoRA (deve corresponder ao usado no treinamento)
AURORA_REQUIRE_GPU_NAME A100 Verificação do nome da GPU (deixe em branco para ignorar)
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 do ConfigMap que contém o script de serviço

Limpar os recursos

Exclua o RayService e seu ConfigMap:

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

Próximas Etapas