Transformers documentation
Bases du chat
Bases du chat
Les modèles de chat sont des modèles conversationnels auxquels vous pouvez envoyer un message et recevoir une réponse. La plupart des modèles de langage depuis la mi-2023 sont des modèles de chat et peuvent être désignés comme des modèles « instruct » ou « instruction-tuned ». Les modèles qui ne prennent pas en charge le chat sont souvent appelés modèles « base » ou « pretrained ».
Les modèles plus volumineux et plus récents sont généralement plus performants, mais les modèles spécialisés dans certains domaines (textes médicaux, juridiques, langues non anglaises, etc.) peuvent souvent surpasser ces modèles plus volumineux. Essayez des classements comme OpenLLM et LMSys Chatbot Arena pour vous aider à identifier le meilleur modèle pour votre cas d'usage.
Ce guide vous montre comment charger rapidement des modèles de chat dans Transformers depuis la ligne de commande, comment construire et formater une conversation, et comment discuter à l’aide de TextGenerationPipeline.
CLI de chat
Après avoir installé Transformers, vous pouvez discuter avec un modèle directement depuis la ligne de commande. La commande ci-dessous lance une session interactive avec un modèle, avec quelques commandes de base listées au début de la session.
Pour les commandes suivantes, assurez-vous que
transformers serveest en cours d'exécution.
transformers chat Qwen/Qwen2.5-0.5B-Instruct

Vous pouvez lancer le CLI avec des drapeaux generate arbitraires, au format arg_1=value_1 arg_2=value_2 ...
transformers chat Qwen/Qwen2.5-0.5B-Instruct do_sample=False max_new_tokens=10
Pour obtenir la liste complète des options, exécutez la commande ci-dessous.
transformers chat -h
Le chat est implémenté au-dessus de la AutoClass, en utilisant les outils de text generation et de chat. Il utilise le CLI transformers serve en interne (docs).
TextGenerationPipeline
TextGenerationPipeline est une classe de génération de texte de haut niveau dotée d’un « mode conversation ». Le mode conversation est activé lorsqu’un modèle conversationnel est détecté et que le prompt de conversation est correctement formaté.
Les modèles de chat acceptent une liste de messages (l’historique de la conversation) en entrée. Chaque message est un dictionnaire avec les clés role et content.
Pour démarrer la conversation, ajoutez un seul message user. Vous pouvez également inclure, en option, un message system pour indiquer au modèle comment se comporter.
chat = [
{"role": "system", "content": "You are a helpful science assistant."},
{"role": "user", "content": "Hey, can you explain gravity to me?"}
]Créez le TextGenerationPipeline et passez-lui chat. Pour les grands modèles, définir device_map=“auto” aide à charger le modèle plus rapidement et le place automatiquement sur l’appareil le plus rapide disponible.
import torch
from transformers import pipeline
pipeline = pipeline(task="text-generation", model="HuggingFaceTB/SmolLM2-1.7B-Instruct", dtype="auto", device_map="auto")
response = pipeline(chat, max_new_tokens=512)
print(response[0]["generated_text"][-1]["content"])Si cela fonctionne correctement, vous devriez voir une réponse du modèle ! Si vous souhaitez poursuivre la conversation,
vous devez mettre à jour l’historique de la conversation avec la réponse du modèle. Vous pouvez le faire en ajoutant le texte
à chat (en utilisant le rôle assistant), ou en lisant response[0]["generated_text"], qui contient
l’historique complet de la conversation, y compris la réponse la plus récente.
Une fois que vous avez la réponse du modèle, vous pouvez poursuivre la conversation en ajoutant un nouveau message user à l’historique de la conversation.
chat = response[0]["generated_text"]
chat.append(
{"role": "user", "content": "Woah! But can it be reconciled with quantum mechanics?"}
)
response = pipeline(chat, max_new_tokens=512)
print(response[0]["generated_text"][-1]["content"])En répétant ce processus, vous pouvez poursuivre la conversation aussi longtemps que vous le souhaitez, du moins jusqu’à ce que le modèle épuise sa fenêtre de contexte ou que vous manquiez de mémoire.
Performance et utilisation de la mémoire
Transformers charge les modèles en précision float32 par défaut, et pour un modèle de 8B, cela nécessite environ 32 Go de mémoire ! Utilisez l'argument torch_dtype="auto", qui utilise généralement bfloat16 pour les modèles entraînés avec ce format, afin de réduire votre consommation de mémoire.
Consultez la documentation Quantization pour plus d'informations sur les différents backends de quantification disponibles.
Pour réduire encore davantage la consommation de mémoire, vous pouvez quantifier le modèle en 8 bits ou 4 bits avec bitsandbytes. Créez un BitsAndBytesConfig avec les paramètres de quantification souhaités et transmettez-le au paramètre model_kwargs des pipelines. L'exemple ci-dessous quantifie un modèle en 8 bits.
from transformers import pipeline, BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
pipeline = pipeline(task="text-generation", model="meta-llama/Meta-Llama-3-8B-Instruct", device_map="auto", model_kwargs={"quantization_config": quantization_config})En général, la taille d’un modèle et ses performances sont directement corrélées. Les modèles plus volumineux sont plus lents et nécessitent davantage de mémoire, car chaque paramètre actif doit être lu depuis la mémoire pour chaque jeton généré. Ceci constitue un goulot d’étranglement pour la génération de texte par LLM, et les principales options pour améliorer la vitesse de génération consistent à soit quantifier un modèle, soit à utiliser du matériel offrant une bande passante mémoire supérieure. Ajouter de la puissance de calcul n’apporte pas d’amélioration significative.
Vous pouvez également essayer des techniques comme le décodage spéculatif, où un modèle plus petit génère des jetons candidats qui sont vérifiés par le modèle plus grand. Si les jetons candidats sont corrects, le modèle plus grand peut générer plus d'un jeton à la fois. Cela atténue considérablement le goulot d'étranglement de bande passante et améliore la vitesse de génération.
Update on GitHubLes modèles Mixture-of-Expert (MoE) tels que Mixtral, Qwen2MoE et GPT-OSS possèdent un grand nombre de paramètres, mais n’« activent » qu’une petite fraction d’entre eux pour générer chaque jeton. En conséquence, les modèles MoE présentent généralement des besoins en bande passante mémoire beaucoup plus faibles et peuvent être plus rapides qu’un LLM classique de taille équivalente. Toutefois, des techniques comme le décodage spéculatif sont inefficaces avec les modèles MoE, car un plus grand nombre de paramètres devient actif à chaque nouveau jeton spéculé.