在 AKS 上用 Ray 執行批次推論

在本文中,你會提交一個 RayJob,使用 LLM 訓練範例產生的 LoRA 配接器來執行 vLLM 的離線批次推論。 此作業會從 Azure Blob 儲存體 讀取 viggo 測試資料分割和 LoRA 適配器,在單一 GPU 上產生預測,並上傳結果。

重要

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

Microsoft 負責建置我們在 AKS 上部署的開源套件。 該責任包括擁有組建、掃描、簽署、驗證和 Hotfix 程式的完整擁有權,以及控制容器映像中的二進位檔。 如需詳細資訊,請參閱 AKS 弱點管理和 AKS 支援涵蓋範圍。

必要條件

設定環境變數

請前往克隆儲存庫中的批次推論範例,並設定所需的環境變數:

cd <path-to-cloned-repo>/AKS/examples/kueue-and-ray-on-aks/3-workloads/batch-inference
export AZURE_STORAGE_ACCOUNT_NAME=$(terraform -chdir=../../1-infrastructure/terraform output -raw storage_account_name)
source env.example

附註

如果你已設定團隊佇列(選項 B),請先設定export QUEUE_NAME=team-a或export QUEUE_NAME=team-b,再執行source env.example。 預設 QUEUE_NAME=default 設定僅適用於單排列配置(選項 A)。

提交工作負載

提交批次推論 RayJob:

./submit.sh

腳本會從推理腳本建立 ConfigMap,透過 envsubst渲染 清單範本並套用。 當配置佇列中只有 1 張 GPU 可用時,Kueue 會承認該任務。

Tip

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

監視進度

如果你是在新的 shell 中,請找出並匯出作業名稱:

export JOB_NAME=$(kubectl -n ray get rayjob --no-headers -o custom-columns=":metadata.name" | grep batch-inference)

請觀看 RayJob 狀態與 Kueue 的承認:

kubectl -n ray get rayjob ${JOB_NAME} -w
kubectl -n ray get workload -w

工作完成時的預期輸出:

NAME                         JOB STATUS   DEPLOYMENT STATUS   START TIME             END TIME               AGE
batch-inference-xxxxxxxxxx   SUCCEEDED    Complete            2026-01-01T00:00:00Z   2026-01-01T00:09:00Z   9m
NAME                                      QUEUE     RESERVED IN     ADMITTED   FINISHED   AGE
rayjob-batch-inference-xxxxxxxxxx-xxxxx   default   cluster-queue   True       True       9m

追蹤工作人員記錄:

kubectl -n ray logs -l ray.io/cluster=$(kubectl -n ray get rayjob ${JOB_NAME} -o jsonpath='{.status.rayClusterName}') -f --tail=100

驗證結果

列出 Blob 儲存體中的預測檔案:

az storage blob list -c llm-pipeline --prefix "inference/${JOB_NAME}/" \
  --account-name ${AZURE_STORAGE_ACCOUNT_NAME} --auth-mode login -o table

預期產出:

Name                                                 Blob Type    Blob Tier    Length    Content Type
---------------------------------------------------  -----------  -----------  --------  ------------------------
inference/<job-name>/metrics.json                    BlockBlob    Hot          128       application/octet-stream
inference/<job-name>/predictions.jsonl               BlockBlob    Hot          411777    application/octet-stream

下載並檢視預測:

az storage blob download -c llm-pipeline \
  -n "inference/${JOB_NAME}/predictions.jsonl" \
  --account-name ${AZURE_STORAGE_ACCOUNT_NAME} --auth-mode login \
  --file /tmp/predictions.jsonl
head -1 /tmp/predictions.jsonl | python3 -m json.tool

預期產出:

{
    "input": "I'm wondering, have you played any games you found genuinely shocking?",
    "expected": "request(specifier[shocking])",
    "generated": "request_explanation"
}

設定參考

變數 預設 Description
AZURE_STORAGE_ACCOUNT_NAME (必修) 模組1的儲存帳戶
JOB_NAME batch-inference-<timestamp> 獨特的 RayJob 名稱
QUEUE_NAME default Kueue LocalQueue 名稱
LLM_DATA_CONTAINER llm-pipeline 包含 viggo 測試資料的 Blob 容器
LLM_LORA_CONTAINER llm-pipeline 帶有 LoRA 轉接器的 Blob 容器
CONFIGMAP_NAME batch-inference-scripts 存放推理腳本的 ConfigMap 名稱

清理資源

刪除 RayJob 及其對應的 ConfigMap:

kubectl -n ray delete rayjob ${JOB_NAME}
kubectl -n ray delete configmap ${CONFIGMAP_NAME}

要拆除所有基礎設施,請參見 「部署基礎設施 — 清理資源」。

下一步