Kör batchinferens med Ray på AKS

I den här artikeln skickar du en RayJob som kör vLLM offline batch-slutsatsdragning med hjälp av LoRA-adaptern som produceras av LLM-träningsexemplet. Jobbet läser viggo-testdelningen och LoRA-adaptern från Azure Blob Storage, genererar förutsägelser på en enda GPU och laddar upp resultatet.

Important

Programvara med öppen källkod nämns i hela AKS-dokumentationen och exemplen. Programvaran som du distribuerar är undantagen från AKS-servicenivåavtal, begränsad garanti och Azure-support. När du använder open-source-teknik tillsammans med AKS, konsultera de supportalternativ som finns tillgängliga från respektive gemenskaper och projektunderhållare för att utveckla en plan.

Microsoft tar ansvar för att skapa de paket med öppen källkod som vi distribuerar på AKS. Det ansvaret omfattar att ha fullständigt ägarskap för bygg-, genomsöknings-, signerings-, validerings- och snabbkorrigeringsprocessen, tillsammans med kontroll över binärfilerna i containeravbildningar. Mer information finns i Sårbarhetshantering för AKS - och AKS-stödtäckning.

Prerequisites

Ange miljövariabler

Gå till batchinferensexemplet i den klonade lagringsplatsen och konfigurera de miljövariabler som krävs:

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

Anmärkning

Om du har konfigurerat teamköer (alternativ B) anger du export QUEUE_NAME=team-a eller export QUEUE_NAME=team-b innan du kör source env.example. Standardinställningen QUEUE_NAME=default fungerar bara med konfigurationen med en kö (alternativ A).

Skicka arbetsbelastningen

Skicka batchinferensen RayJob:

./submit.sh

Skriptet skapar en ConfigMap från slutsatsdragningsskriptet, renderar manifestmallen via envsubstoch tillämpar den. Kueue medger jobbet när 1 GPU är tillgängligt i den konfigurerade kön.

Tip

Kör ./submit.sh --dry-run för att verifiera det renderade manifestet utan att tillämpa det på klustret.

Övervaka förloppet

Hitta och exportera jobbnamnet om du är i ett nytt gränssnitt:

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

Titta på RayJob-status och Kueue-antagning:

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

Förväntade utdata när jobbet är klart:

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

Följ worker-loggarna:

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

Verifiera resultat

Lista förutsägelsefiler i bloblagring:

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

Förväntat resultat:

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

Ladda ned och inspektera förutsägelserna:

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

Förväntat resultat:

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

Konfigurationsreferens

Variabel Standardinställning Description
AZURE_STORAGE_ACCOUNT_NAME (krävs) Lagringskonto från modul 1
JOB_NAME batch-inference-<timestamp> Unikt RayJob-namn
QUEUE_NAME default Namn på Kueue LocalQueue
LLM_DATA_CONTAINER llm-pipeline Blobcontainer med viggo-testdata
LLM_LORA_CONTAINER llm-pipeline Blobcontainer med LoRA-adaptrar
CONFIGMAP_NAME batch-inference-scripts Namn på ConfigMap som innehåller inferensskriptet

Rensa resurser

Ta bort RayJob och dess ConfigMap:

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

Om du vill ta bort all infrastruktur, se Distribuera infrastruktur – Rensa resurser.

Nästa steg