Batchinferentie uitvoeren met Ray op AKS

In dit artikel verzendt u een RayJob waarmee vLLM offline batchdeductie wordt uitgevoerd met behulp van de LoRA-adapter die is geproduceerd door het LLM-trainingsvoorbeeld. De taak leest de viggo-testsplitsing en LoRA-adapter uit Azure Blob Storage, genereert voorspellingen op één GPU en uploadt de resultaten.

Belangrijk

Opensource-software wordt vermeld in AKS-documentatie en -voorbeelden. Software die u implementeert, is uitgesloten van AKS-serviceovereenkomsten, beperkte garantie en Azure-ondersteuning. Wanneer u opensource-technologie naast AKS gebruikt, raadpleegt u de beschikbare ondersteuningsopties van de respectieve community's en projectonderhouders om een plan te ontwikkelen.

Microsoft neemt de verantwoordelijkheid voor het bouwen van de opensource-pakketten die we implementeren op AKS. Deze verantwoordelijkheid omvat het volledige eigendom van het bouw-, scan-, onderteken-, validatie- en hotfixproces, samen met controle over de binaire bestanden in container images. Zie Beveiligingsbeheer voor AKS - en AKS-ondersteuningsdekking voor meer informatie.

Vereisten

Omgevingsvariabelen instellen

Navigeer naar het batchinferentievoorbeeld in de gekloonde repository en configureer de vereiste omgevingsvariabelen:

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

Notitie

Als u teamwachtrijen (optie B) hebt geconfigureerd, stelt u deze in export QUEUE_NAME=team-a of export QUEUE_NAME=team-b voordat u deze uitvoert source env.example. De standaardinstelling QUEUE_NAME=default werkt alleen met de configuratie van één wachtrij (optie A).

Werklast indienen

Dien de batchinferentie-RayJob in:

./submit.sh

Het script maakt een ConfigMap op basis van het deductiescript, geeft de manifestsjabloon weer via envsubsten past deze toe. Kueue geeft de taak toe wanneer 1 GPU beschikbaar is in de geconfigureerde wachtrij.

Tip

Voer ./submit.sh --dry-run uit om het gerenderde manifest te valideren zonder dit toe te passen op het cluster.

Voortgang bijhouden

Zoek en exporteer de taaknaam als u zich in een nieuwe shell bevindt:

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

Bekijk de RayJob-status en Kueue-toelating:

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

Verwachte uitvoer wanneer de taak is voltooid:

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

Bekijk de workerlogs:

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

Resultaten controleren

Voorspellingsbestanden weergeven in Blob Storage:

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

Verwachte uitvoer:

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

Download en inspecteer de voorspellingen:

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

Verwachte uitvoer:

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

Configuratiegids

Variabele Default Description
AZURE_STORAGE_ACCOUNT_NAME (vereist) Opslagaccount van module 1
JOB_NAME batch-inference-<timestamp> Unieke RayJob-naam
QUEUE_NAME default Naam van Kueue LocalQueue
LLM_DATA_CONTAINER llm-pipeline Blobcontainer met viggo-testgegevens
LLM_LORA_CONTAINER llm-pipeline Blobcontainer met LoRA-adapters
CONFIGMAP_NAME batch-inference-scripts Naam voor de ConfigMap met het deductiescript

De hulpbronnen opschonen

Verwijder de RayJob en de bijbehorende ConfigMap:

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

Zie Infrastructuur implementeren — Resources opschonen om alle infrastructuur te verwijderen.

Volgende stappen