AKS에서 Ray Serve를 사용하여 모델 제공

이 문서에서는 AKS(Azure Kubernetes Service) Ray Serve를 사용하여 미세 조정된 오로라 날씨 모델을 영구 HTTP 엔드포인트로 배포합니다. 이 메서드는 장기간 실행되는 서빙에 RayService 리소스를 사용하며, Kueue의 승인 제어 대상이 아닙니다.

중요

오픈 소스 소프트웨어는 AKS 설명서와 샘플 전반에서 언급되어 있습니다. 배포하는 소프트웨어는 AKS 서비스 수준 계약, 제한된 보증 및 Azure 지원 제외됩니다. AKS와 함께 오픈 소스 기술을 사용하는 경우 각 커뮤니티 및 프로젝트 유지 관리자에서 사용할 수 있는 지원 옵션을 참조하여 계획을 개발합니다.

Microsoft는 AKS에 배포하는 오픈 소스 패키지를 빌드하는 역할을 담당합니다. 해당 책임에는 컨테이너 이미지의 이진 파일에 대한 제어와 함께 빌드, 스캔, 서명, 유효성 검사 및 핫픽스 프로세스의 완전한 소유권이 포함됩니다. 자세한 내용은 AKS의 취약성 관리 및 AKS 지원 범위를 참조하세요.

필수 조건

환경 변수 설정

복제된 리포지토리의 온라인 서비스 예제로 이동하고 필요한 환경 변수를 구성합니다.

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

참고

AURORA_RUN_ID는 완료된 Aurora 파인튜닝 실행의 JOB_NAME입니다. 다음을 사용하여 찾을 수 있습니다.

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

서비스 배포

RayService 배포:

./submit-service.sh

스크립트는 서비스 애플리케이션 코드에서 ConfigMap을 만들고, RayService 매니페스트를 통해 envsubst렌더링하고, 적용합니다. KubeRay 연산자는 Ray 클러스터를 만들고 Serve 애플리케이션을 배포합니다.

Tip

실행 ./submit-service.sh --dry-run 하여 클러스터에 적용하지 않고 렌더링된 매니페스트의 유효성을 검사합니다.

참고

RayService는 Kueue의 승인 제어 대상이 아닙니다. 서비스 워크로드는 수명이 길며 일괄 처리 큐 의미 체계가 아닌 전용 리소스가 필요합니다.

배포 확인

RayService가 Running 상태를 표시할 때까지 확인합니다:

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

예상 출력:

NAME           SERVICE STATUS   NUM SERVE ENDPOINTS
aurora-serve   Running          1

엔드포인트 테스트

서비스 서비스를 포트 전달하고 테스트 요청을 보냅니다.

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

상태 검사:

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

예상 출력:

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

예측 요청:

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

예상 출력:

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

응답에는 예측의 각 표면 변수에 대한 변수별 요약 통계(shape, mean, min, max)가 포함됩니다.

구성 참조

변수 Default Description
AZURE_STORAGE_ACCOUNT_NAME (필수) 모듈 1의 스토리지 계정
AURORA_RUN_ID (필수) 완료된 aurora-finetune 실행 작업의 JOB_NAME
AURORA_INPUT_CONTAINER aurora init 데이터가 있는 컨테이너
AURORA_ADAPTER_CONTAINER aurora LoRA 검사점이 있는 컨테이너
AURORA_INIT_FILE init-2021-01-01-00z.npz 요청에 대한 기본 init 파일
AURORA_LEAD_HOURS 6 기본 예측 리드 타임 (6시간의 배수여야 함)
AURORA_LORA_RANK 8 LoRA 랭크 (학습 시 설정과 일치해야 합니다)
AURORA_REQUIRE_GPU_NAME A100 GPU 이름 확인(건너뛰려면 비우기)
SERVICE_NAME aurora-serve RayService 리소스의 이름
ROUTE_PREFIX /aurora 서비스 엔드포인트에 대한 HTTP 경로 접두사
CONFIGMAP_NAME aurora-serve-scripts 서비스 스크립트를 포함하는 ConfigMap의 이름

자원을 정리하세요

RayService 및 해당 ConfigMap을 삭제합니다.

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

다음 단계