在 AKS 上使用 Ray Serve 提供模型服務

在本文中,你將透過 Azure Kubernetes Service (AKS) 上的 Ray Serve,部署經過微調的 Aurora 天氣模型作為持久 HTTP 端點。 此方法使用 RayService 資源來提供長時間運行的服務,且不受 Kueue 的准入控制。

重要

整個 AKS 文件和範例都會提及開放原始碼的軟體。 您部署的軟體會從 AKS 服務等級協定、有限保固和 Azure 支援 中排除。 當您搭配 AKS 使用開放原始碼技術時,請參閱個別社群和專案維護人員所提供的支援選項,以開發計畫。

Microsoft 負責建置我們在 AKS 上部署的開源套件。 該責任包括擁有組建、掃描、簽署、驗證和 Hotfix 程式的完整擁有權,以及控制容器映像中的二進位檔。 如需詳細資訊,請參閱 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,透過 envsubst渲染 RayService manifest 並套用。 KubeRay 操作員建立 Ray 叢集並部署 Serve 應用程式。

Tip

執行 ./submit-service.sh --dry-run 以驗證渲染的清單,但不套用到叢集。

附註

RayService 不受 Kueue 的准入控制。 服務型工作負載的生命週期較長,需要專用資源,而不是批次佇列機制。

驗證部署

持續監視,直到 RayService 回報「執行中」:

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

預期產出:

NAME           SERVICE STATUS   NUM SERVE ENDPOINTS
aurora-serve   Running          1

測試端點

對 serve 服務進行埠轉發並傳送測試請求:

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

回應包含預報中每個地表變數的各變數摘要統計資料(形狀、平均值、最小值、最大值)。

設定參考

變數 預設 Description
AZURE_STORAGE_ACCOUNT_NAME (必修) 模組1的儲存帳戶
AURORA_RUN_ID (必修) 已完成的 aurora-finetune 執行中的 JOB_NAME
AURORA_INPUT_CONTAINER aurora 帶有初始化資料的容器
AURORA_ADAPTER_CONTAINER aurora 帶有LoRA檢查點的貨櫃
AURORA_INIT_FILE init-2021-01-01-00z.npz 要求的預設初始化檔案
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}

下一步