이 문서에서는 AKS(Azure Kubernetes Service) Ray Serve를 사용하여 미세 조정된 오로라 날씨 모델을 영구 HTTP 엔드포인트로 배포합니다. 이 메서드는 장기간 실행되는 서빙에 RayService 리소스를 사용하며, Kueue의 승인 제어 대상이 아닙니다.
중요
오픈 소스 소프트웨어는 AKS 설명서와 샘플 전반에서 언급되어 있습니다. 배포하는 소프트웨어는 AKS 서비스 수준 계약, 제한된 보증 및 Azure 지원 제외됩니다. AKS와 함께 오픈 소스 기술을 사용하는 경우 각 커뮤니티 및 프로젝트 유지 관리자에서 사용할 수 있는 지원 옵션을 참조하여 계획을 개발합니다.
Microsoft는 AKS에 배포하는 오픈 소스 패키지를 빌드하는 역할을 담당합니다. 해당 책임에는 컨테이너 이미지의 이진 파일에 대한 제어와 함께 빌드, 스캔, 서명, 유효성 검사 및 핫픽스 프로세스의 완전한 소유권이 포함됩니다. 자세한 내용은 AKS의 취약성 관리 및 AKS 지원 범위를 참조하세요.
필수 조건
- AKS에서 Ray 및 Kueue에 대한 인프라 배포에 따라 배포된 인프라입니다.
- AKS에서 Ray 워크로드에 대한 Kueue 큐 구성 후 만들어진 네임스페이스 및 서비스 계정입니다.
-
AKS에서 Ray를 사용하여 오로라 날씨 모델을 미세 조정한 후 오로라 미세 조정이 완료되었습니다. LoRA 검사점은 Blob Storage에
aurora/checkpoints/<run-id>/last.safetensors있어야 합니다. -
envsubst설치됨(gettextLinux의 패키지,brew install gettextmacOS).
환경 변수 설정
복제된 리포지토리의 온라인 서비스 예제로 이동하고 필요한 환경 변수를 구성합니다.
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}