在本文中,你將透過 Azure Kubernetes Service (AKS) 上的 Ray Serve,部署經過微調的 Aurora 天氣模型作為持久 HTTP 端點。 此方法使用 RayService 資源來提供長時間運行的服務,且不受 Kueue 的准入控制。
重要
整個 AKS 文件和範例都會提及開放原始碼的軟體。 您部署的軟體會從 AKS 服務等級協定、有限保固和 Azure 支援 中排除。 當您搭配 AKS 使用開放原始碼技術時,請參閱個別社群和專案維護人員所提供的支援選項,以開發計畫。
Microsoft 負責建置我們在 AKS 上部署的開源套件。 該責任包括擁有組建、掃描、簽署、驗證和 Hotfix 程式的完整擁有權,以及控制容器映像中的二進位檔。 如需詳細資訊,請參閱 AKS 弱點管理和 AKS 支援涵蓋範圍。
必要條件
- 基礎結構是依照 在 AKS 上為 Ray 和 Kueue 部署基礎結構 進行部署的。
- 已依照在 AKS 上為 Ray 工作負載設定 Kueue 佇列建立命名空間和服務帳戶。
- 已依照使用 AKS 上的 Ray 微調 Aurora 天氣模型完成 Aurora 微調作業 - LoRA 檢查點必須存在於 Blob 儲存體中的
aurora/checkpoints/<run-id>/last.safetensors。 -
envsubst已安裝(Linux 上為gettext套件,macOS 上為brew install gettext)。
設定環境變數
請前往克隆儲存庫中的線上服務範例,並設定所需的環境變數:
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}