

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Exécuter une inférence LLM par lots avec vLLM
<a name="tutorial-vllm-batch"></a>

Ce didacticiel explique comment exécuter l'inférence LLM (Large Language Model) à haut débit sur un fichier JSONL contenant des invites à l'aide [ du moteur d'inférence vLLM activé. GitHub ](https://github.com/vllm-project/vllm) Vous soumettez le bundle de tâches d'inférence par lots [ vLLM GitHub ](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/vllm_batch) avec un fichier dans lequel chaque ligne correspond à une seule invite, vous choisissez un modèle et la tâche se répartit sur un parc de GPU. Chaque invite reçoit une réponse LLM, et une étape globale regroupe le tout dans un fichier JSONL plus une visionneuse HTML autonome que vous pouvez ouvrir dans n'importe quel navigateur.

Le bundle gère des charges de travail hors ligne et étonnamment parallèles : génération de contenu, ensembles de données d'évaluation, traduction, extraction et classification. Il s'adapte partout où vous avez besoin d'un modèle pour répondre à de nombreuses demandes indépendantes sans serveur API actif. Sous le capot, il utilise la fonction de découpage des tâches de Deadline Cloud pour regrouper les invites en tâches groupées, ce qui vous permet de comparer le parallélisme et les frais de planification à l'aide d'un seul paramètre. `ChunkSize` Pour de plus amples informations, veuillez consulter [Découpage des tâches pour les modèles de tâches](build-job-bundle-chunking.md).

Le chargement d'un 7 B-parameter LLM prend 30 secondes ou plus, donc payer ce coût par tâche dominerait l'exécution par lots. Les environnements d'étape Open Job Description résolvent ce problème : le serveur vLLM démarre lorsqu'un collaborateur prend la tâche et reste chargé sur chaque tâche exécutée par le travailleur, puis s'arrête avec la session. Un lot de 24 heures sur une flotte de 4 employés permet de payer 4 chargements de modèles au lieu de 24.

**Durée estimée : ** 30 à 60 minutes, configuration de la ferme comprise.

L'exécution de ce didacticiel entraîne des frais pour les instances de travail GPU qui traitent la tâche.

## Présentation de
<a name="tutorial-vllm-batch-overview"></a>

Pour terminer ce didacticiel, procédez comme suit :

1. Configurez votre ferme.

1. Préparez le fichier d'entrée.

1. Soumettez la tâche d'inférence par lots.

1. Téléchargez et visualisez les résultats.

1. nettoyer les ressources.

## Configurez votre ferme
<a name="tutorial-vllm-batch-setup"></a>

Le moyen le plus rapide d'obtenir une batterie de serveurs compatible est de déployer le CloudFormation modèle de parc [ CUDA sur GitHub](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/cloudformation/farm_templates/cuda_farm). Une fois la pile atteinte`CREATE_COMPLETE`, configurez la CLI Deadline Cloud pour utiliser la nouvelle batterie de serveurs :

```
deadline config set defaults.farm_id {{FarmId-from-stack-outputs}}
deadline config set defaults.queue_id {{CUDAQueueId-from-stack-outputs}}
```

Si vous possédez déjà une ferme, vous avez besoin d'une flotte gérée par les services avec des GPU NVIDIA et au moins 32 Go de RAM, ainsi que d'une file d'attente avec un environnement de file d'attente conda qui lit `CondaPackages` les paramètres et les tâches. `CondaChannels`

## Préparez le fichier d'entrée
<a name="tutorial-vllm-batch-input"></a>

L'entrée est un fichier JSONL avec un objet JSON par ligne. Chaque ligne doit comporter un `prompt` champ :

```
{"prompt": "What is photosynthesis?", "id": "001"}
{"prompt": "Write a haiku about clouds.", "id": "002"}
{"prompt": "Explain gravity to a 5 year old.", "id": "003", "max_tokens": 256, "temperature": 0.9}
```

Les champs facultatifs par invite permettent notamment `id` de suivre, `max_tokens` de limiter la longueur de réponse et de contrôler le caractère aléatoire de `temperature` l'échantillonnage. Per-promptles champs remplacent les valeurs par défaut au niveau de la tâche pour cette ligne uniquement, et tous les champs supplémentaires sont transmis inchangés à la sortie.

Le bundle inclut un outil HTML sans dépendance pour créer des fichiers d'entrée. Ouvrez `tools/prompt_builder.html` dans votre navigateur pour ajouter des invites, définir des options par invite et exporter au format JSONL.

## Soumettre la tâche d'inférence par lots
<a name="tutorial-vllm-batch-submit"></a>

**Pour soumettre à l'aide de l'expéditeur de l'interface graphique**

1. Dans le répertoire du `vllm_batch` bundle, ouvrez l'émetteur :

   ```
   deadline bundle gui-submit .
   ```

1. Choisissez votre fichier JSONL d'entrée.

1. Définissez la plage d'**invites ** (par exemple, `1-10` pour les 10 premières invites du fichier).

1. Définissez la taille du ** bloc**, c'est-à-dire le nombre d'invites traitées par chaque tâche (par défaut`5`).

1. Choisissez un répertoire de sortie, puis choisissez ** Soumettre**.

Vous pouvez également soumettre via l'interface de ligne de commande :

```
deadline bundle submit . \
  --parameter InputFile={{prompts.jsonl}} \
  --parameter Prompts=1-10 \
  --parameter ChunkSize=5 \
  --parameter OutputDir=$PWD/results
```

Le `ModelName` paramètre est défini par défaut sur n'importe quel identifiant de modèle Hugging Face `Qwen/Qwen2.5-7B-Instruct` et l'accepte. Le `Prompts` paramètre accepte la syntaxe complète de la plage d'entiers Open Job Description, par exemple `2,5,8-9` pour des lignes spécifiques ou `4,7` pour réexécuter uniquement les lignes ayant échoué. Plutôt que de fixer la taille du bloc, vous pouvez également laisser Deadline Cloud le régler automatiquement : définissez `TargetRuntimeSeconds` la durée que vous souhaitez que chaque bloc prenne (120 secondes par défaut), et le planificateur augmente ou réduit la taille du segment pour les tâches futures pour atteindre l'objectif. Pour la liste complète des paramètres, consultez [ le tableau des paramètres dans l'exemple de fichier README sur GitHub](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/vllm_batch#parameters).

## Téléchargez et visualisez les résultats
<a name="tutorial-vllm-batch-results"></a>

**Pour télécharger et consulter les résultats**

1. Une fois la tâche terminée, téléchargez le résultat :

   ```
   deadline job download-output --job-id {{job-id}}
   ```

1. Toutes les sorties atterrissent dans un `output/` sous-dossier du répertoire que vous avez choisi. Ouvrez `results/output/results.html` le visualiseur de résultats visuels dans votre navigateur ou lisez `results/output/output.jsonl` pour obtenir la sortie combinée brute.

Chaque ligne de sortie contient l'invite d'origine et ses champs de transmission, ainsi que la `generated_text` réponse, la raison de fin et le nombre de jetons :

```
{"prompt": "What is photosynthesis?", "id": "001", "generated_text": "Photosynthesis is...", "finish_reason": "stop", "prompt_tokens": 7, "completion_tokens": 42}
```

## Enchaînez la sortie dans la génération d'images par lots
<a name="tutorial-vllm-batch-chaining"></a>

Le `output.jsonl` fichier est une entrée prête à l'emploi pour le bundle de synthèse texte-image. Générez du texte avec ce bundle (slogans, légendes, descriptions de scènes), puis soumettez le fichier de sortie au bundle de génération d'images, qui utilise automatiquement chaque ligne `generated_text` comme légende composée sur l'image générée. Pour la procédure pas à pas complète, voir[Générez des images par lots à l'aide d'un modèle de diffusion](tutorial-text-to-image-batch.md).

## Nettoyage
<a name="tutorial-vllm-batch-cleanup"></a>

Pour éviter des frais récurrents, nettoyez les ressources que vous avez créées pour ce didacticiel :

**Pour nettoyer les ressources du didacticiel**

1. Si vous avez déployé le CloudFormation modèle de batterie de serveurs CUDA, supprimez la CloudFormation pile de la CloudFormation console.

1. Si vous avez utilisé un parc de serveurs existant et créé un parc de GPU spécialement pour ce didacticiel, arrêtez ou supprimez ce parc. Si vous avez utilisé une flotte partagée préexistante, laissez-la en place.

1. Supprimez les fichiers de sortie locaux si vous n'en avez plus besoin.

## Ressources connexes
<a name="tutorial-vllm-batch-related"></a>

Les ressources suivantes fournissent des informations supplémentaires :
+ [Exemple de code source sur GitHub ](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/vllm_batch)
+ [Générez des images par lots à l'aide d'un modèle de diffusion](tutorial-text-to-image-batch.md)
+ [Découpage des tâches pour les modèles de tâches](build-job-bundle-chunking.md)
+ [Comparez les LLM avec vLLM et lm-evaluation-harness](tutorial-vllm-leaderboard.md)
+ [Spécification des environnements Open Job Description sur GitHub ](https://github.com/OpenJobDescription/openjd-specifications/wiki/2023-09-Template-Schemas#4-environment)