在本文中,你會提交一個 RayJob,使用 LLM 訓練範例產生的 LoRA 配接器來執行 vLLM 的離線批次推論。 此作業會從 Azure Blob 儲存體 讀取 viggo 測試資料分割和 LoRA 適配器,在單一 GPU 上產生預測,並上傳結果。
重要
整個 AKS 文件和範例都會提及開放原始碼的軟體。 您部署的軟體會從 AKS 服務等級協定、有限保固和 Azure 支援 中排除。 當您搭配 AKS 使用開放原始碼技術時,請參閱個別社群和專案維護人員所提供的支援選項,以開發計畫。
Microsoft 負責建置我們在 AKS 上部署的開源套件。 該責任包括擁有組建、掃描、簽署、驗證和 Hotfix 程式的完整擁有權,以及控制容器映像中的二進位檔。 如需詳細資訊,請參閱 AKS 弱點管理和 AKS 支援涵蓋範圍。
必要條件
- 已依照在 AKS 上部署 Ray 和 Kueue 的基礎結構部署基礎結構。
- 已依照在 AKS 上為 Ray 工作負載設定 Kueue 佇列完成 Kueue 佇列設定。
- 叢集中至少有一顆 A100 顯示卡可用。
- 已依照在 AKS 上使用 Ray 訓練 LLM完成 LLM 訓練 — LoRA 配接器必須存在於 Blob 儲存體中的
llm-pipeline/lora/位置。 -
envsubst已安裝(Linux 上為gettext套件,macOS 上為brew install gettext)。
設定環境變數
請前往克隆儲存庫中的批次推論範例,並設定所需的環境變數:
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}
要拆除所有基礎設施,請參見 「部署基礎設施 — 清理資源」。