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
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
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.
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
Pour terminer ce didacticiel, procédez comme suit :
-
Configurez votre ferme.
-
Préparez le fichier d'entrée.
-
Soumettez la tâche d'inférence par lots.
-
Téléchargez et visualisez les résultats.
-
nettoyer les ressources.
Configurez votre ferme
Le moyen le plus rapide d'obtenir une batterie de serveurs compatible est de déployer le CloudFormation modèle de parc CUDA sur GitHubCREATE_COMPLETE, configurez la CLI Deadline Cloud pour utiliser la nouvelle batterie de serveurs :
deadline config set defaults.farm_idFarmId-from-stack-outputsdeadline config set defaults.queue_idCUDAQueueId-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
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
Pour soumettre à l'aide de l'expéditeur de l'interface graphique
-
Dans le répertoire du
vllm_batchbundle, ouvrez l'émetteur :deadline bundle gui-submit . -
Choisissez votre fichier JSONL d'entrée.
-
Définissez la plage d'invites (par exemple,
1-10pour les 10 premières invites du fichier). -
Définissez la taille du bloc, c'est-à-dire le nombre d'invites traitées par chaque tâche (par défaut
5). -
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
Téléchargez et visualisez les résultats
Pour télécharger et consulter les résultats
-
Une fois la tâche terminée, téléchargez le résultat :
deadline job download-output --job-idjob-id -
Toutes les sorties atterrissent dans un
output/sous-dossier du répertoire que vous avez choisi. Ouvrezresults/output/results.htmlle visualiseur de résultats visuels dans votre navigateur ou lisezresults/output/output.jsonlpour 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
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, voirGénérez des images par lots à l'aide d'un modèle de diffusion.
Nettoyage
Pour éviter des frais récurrents, nettoyez les ressources que vous avez créées pour ce didacticiel :
Pour nettoyer les ressources du didacticiel
-
Si vous avez déployé le CloudFormation modèle de batterie de serveurs CUDA, supprimez la CloudFormation pile de la CloudFormation console.
-
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.
-
Supprimez les fichiers de sortie locaux si vous n'en avez plus besoin.
Ressources connexes
Les ressources suivantes fournissent des informations supplémentaires :