Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans cet article, vous soumettez un RayJob qui exécute une inférence par lots hors ligne avec vLLM à l’aide de l’adaptateur LoRA généré par l’exemple d’entraînement LLM. La tâche lit le fractionnement de test viggo et l’adaptateur LoRA à partir du Stockage Blob Azure, génère des prédictions sur un seul GPU et charge les résultats.
Important
Les logiciels open source sont mentionnés dans la documentation et les exemples AKS. Les logiciels que vous déployez sont exclus des contrats de niveau de service AKS, de la garantie limitée et du support Azure. Quand vous utilisez une technologie open source avec AKS, consultez les options de support disponibles auprès des communautés et responsables de projet respectifs pour élaborer un plan.
Microsoft assume la responsabilité de la génération des packages open source que nous déployons sur AKS. Cette responsabilité comprend la maîtrise complète des processus de génération, d’analyse, de signature et de validation ainsi que l’application de correctifs logiciels et le contrôle des fichiers binaires présents dans les images conteneur. Pour plus d’informations, consultez Gestion des vulnérabilités pour AKS et Couverture du support AKS.
Prérequis
- Infrastructure déployée en suivant Déployer l’infrastructure pour Ray et Kueue sur AKS.
- Les files d’attente Kueue configurées conformément à Configurer les files d’attente Kueue pour les charges de travail Ray sur AKS.
- Au moins un GPU A100 disponible dans le cluster.
- L’entraînement du LLM terminé après Entraîner un LLM avec Ray sur AKS — l’adaptateur LoRA doit se trouver à l’emplacement
llm-pipeline/lora/dans le stockage Blob. -
envsubstinstallé (gettextpackage sur Linux,brew install gettextsur macOS).
Définir des variables d’environnement
Accédez à l’exemple d’inférence par lots dans le référentiel cloné et configurez les variables d’environnement requises :
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
Remarque
Si vous avez configuré des files d’attente d’équipe (option B), définissez export QUEUE_NAME=team-a ou export QUEUE_NAME=team-b avant l’exécution source env.example. La valeur par défaut QUEUE_NAME=default fonctionne uniquement avec la configuration à file d’attente unique (option A).
Soumettre la charge de travail
Envoyez l’inférence de lot RayJob :
./submit.sh
Le script crée un ConfigMap à partir du script d’inférence, affiche le modèle de manifeste via envsubst, et l’applique. Kueue accepte la tâche lorsqu’un GPU est disponible dans la file d’attente configurée.
Tip
Exécutez ./submit.sh --dry-run pour valider le manifeste rendu sans l’appliquer au cluster.
Surveiller la progression
Trouvez et exportez le nom de la tâche si vous êtes dans un nouveau shell :
export JOB_NAME=$(kubectl -n ray get rayjob --no-headers -o custom-columns=":metadata.name" | grep batch-inference)
Surveillez l’état de RayJob et l’admission de Kueue :
kubectl -n ray get rayjob ${JOB_NAME} -w
kubectl -n ray get workload -w
Sortie attendue lorsque le travail se termine :
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
Suivez les journaux du worker :
kubectl -n ray logs -l ray.io/cluster=$(kubectl -n ray get rayjob ${JOB_NAME} -o jsonpath='{.status.rayClusterName}') -f --tail=100
Vérifier les résultats
Lister les fichiers de prédiction dans le stockage Blob :
az storage blob list -c llm-pipeline --prefix "inference/${JOB_NAME}/" \
--account-name ${AZURE_STORAGE_ACCOUNT_NAME} --auth-mode login -o table
Sortie attendue :
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
Téléchargez et inspectez les prédictions :
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
Sortie attendue :
{
"input": "I'm wondering, have you played any games you found genuinely shocking?",
"expected": "request(specifier[shocking])",
"generated": "request_explanation"
}
Référence de configuration
| Variable | Default | Description |
|---|---|---|
AZURE_STORAGE_ACCOUNT_NAME |
(obligatoire) | Compte de stockage à partir du module 1 |
JOB_NAME |
batch-inference-<timestamp> |
Nom unique de RayJob |
QUEUE_NAME |
default |
Nom de Kueue LocalQueue |
LLM_DATA_CONTAINER |
llm-pipeline |
Conteneur Blob avec les données de test Viggo |
LLM_LORA_CONTAINER |
llm-pipeline |
Conteneur Blob avec des adaptateurs LoRA |
CONFIGMAP_NAME |
batch-inference-scripts |
Nom du configMap contenant le script d’inférence |
Nettoyer les ressources
Supprimez RayJob et son ConfigMap :
kubectl -n ray delete rayjob ${JOB_NAME}
kubectl -n ray delete configmap ${CONFIGMAP_NAME}
Pour supprimer toutes les infrastructures, consultez Déployer l’infrastructure : nettoyer les ressources.