Aller au contenu
Développement medium

Hugging Face Transformers

15 min de lecture

Hugging Face Transformers est la librairie Python de référence pour utiliser des LLMs open source. Ce guide vous apprend à charger un modèle, générer du texte et créer un assistant conversationnel — le tout en quelques lignes de code.

À la fin de ce guide, vous saurez :

  • Utiliser pipeline() pour des tâches courantes (génération, résumé, classification)
  • Charger un modèle manuellement avec AutoModel et AutoTokenizer
  • Contrôler la génération de texte (température, sampling, longueur)
  • Optimiser l’inférence sur CPU avec la quantification
  • Créer un assistant conversationnel local

Hugging Face est une plateforme et un écosystème qui facilite l’utilisation des modèles d’IA. Pensez-y comme le “GitHub de l’IA” : vous y trouvez des milliers de modèles prêts à l’emploi, téléchargeables en une ligne de code.

ComposantRôleAnalogie
HubCatalogue de modèlesL’App Store des modèles IA
TransformersLibrairie Python pour charger les modèlesLe SDK pour utiliser les modèles
DatasetsJeux de données pour l’entraînementLa bibliothèque de données
AccelerateOptimisation multi-GPU et mémoireLe turbo pour gros modèles

La librairie Transformers fonctionne avec PyTorch et TensorFlow. Dans ce guide, nous utilisons PyTorch (le défaut).

  1. Créer un environnement virtuel

    Fenêtre de terminal
    python -m venv hf-env
    source hf-env/bin/activate # Windows: hf-env\Scripts\activate
  2. Installer les librairies

    Fenêtre de terminal
    pip install transformers torch accelerate
    • transformers : la librairie principale
    • torch : PyTorch (backend de calcul)
    • accelerate : optimisation automatique de la mémoire
  3. Vérifier l’installation

    import transformers
    print(transformers.__version__)
    # Attendu : 4.x.x ou 5.x.x

Certains modèles (Llama, Mistral) nécessitent une authentification. Créez un compte sur huggingface.co, puis :

Fenêtre de terminal
pip install huggingface_hub
huggingface-cli login

Collez votre token (récupérable sur huggingface.co/settings/tokens).

L’API pipeline() est le moyen le plus rapide d’utiliser un modèle. Une seule ligne de code suffit pour effectuer une tâche.

from transformers import pipeline
# Créer un pipeline de génération
generator = pipeline("text-generation", model="Qwen/Qwen2.5-0.5B-Instruct")
# Générer du texte
result = generator("L'intelligence artificielle permet de", max_new_tokens=50)
print(result[0]["generated_text"])

Sortie attendue :

L'intelligence artificielle permet de résoudre des problèmes complexes
en analysant de grandes quantités de données...

Le pipeline() supporte de nombreuses tâches :

TâcheIdentifiantExemple d’utilisation
Génération de textetext-generationÉcrire, compléter, coder
RésumésummarizationCondenser un article
TraductiontranslationFR → EN, EN → FR
Classificationtext-classificationSentiment, catégorie
Question-réponsequestion-answeringExtraire une réponse d’un texte
Remplissagefill-maskDeviner un mot manquant
from transformers import pipeline
classifier = pipeline("text-classification", model="nlptown/bert-base-multilingual-uncased-sentiment")
result = classifier("Ce produit est vraiment excellent, je recommande !")
print(result)
# [{'label': '5 stars', 'score': 0.73}]

Par défaut, le pipeline utilise le CPU. Pour utiliser un GPU ou laisser accelerate choisir automatiquement :

pipeline = pipeline("text-generation", model="Qwen/Qwen2.5-0.5B-Instruct", device=-1)

Pour un contrôle plus fin, chargez le modèle et le tokenizer séparément. C’est l’approche recommandée pour les applications en production.

Le tokenizer convertit du texte en nombres (tokens) que le modèle comprend, puis reconvertit la sortie en texte lisible.

from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-0.5B-Instruct")
# Texte → Tokens
text = "Bonjour, comment ça va ?"
tokens = tokenizer(text, return_tensors="pt")
print(tokens["input_ids"])
# tensor([[9707, 11, 3530, 9255, 8089, 949]])
# Tokens → Texte
decoded = tokenizer.decode(tokens["input_ids"][0])
print(decoded)
# "Bonjour, comment ça va ?"
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_id = "Qwen/Qwen2.5-0.5B-Instruct"
# Charger avec optimisation automatique
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="auto",
torch_dtype=torch.float16 # Réduit l'utilisation mémoire
)
tokenizer = AutoTokenizer.from_pretrained(model_id)

Paramètres importants :

ParamètreEffet
device_map="auto"Place le modèle sur le meilleur device disponible
torch_dtype=torch.float16Utilise la demi-précision (moins de RAM)
torch_dtype=torch.bfloat16Alternative à float16, plus stable
low_cpu_mem_usage=TrueCharge le modèle progressivement
# Préparer l'entrée
prompt = "Explique ce qu'est Python en une phrase."
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
# Générer
outputs = model.generate(
**inputs,
max_new_tokens=100,
do_sample=True,
temperature=0.7,
)
# Décoder la sortie
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)

La méthode generate() offre de nombreux paramètres pour contrôler la sortie.

ParamètreTypeDescriptionValeur typique
max_new_tokensintNombre max de tokens à générer50-500
do_sampleboolActive l’échantillonnage aléatoireTrue pour créatif
temperaturefloatContrôle la créativité (0.1-2.0)0.7 par défaut
top_pfloatNucleus sampling (0.0-1.0)0.9
top_kintLimite les tokens candidats50
repetition_penaltyfloatPénalise les répétitions1.1-1.3

Sélectionne toujours le token le plus probable. Rapide mais répétitif.

outputs = model.generate(
**inputs,
max_new_tokens=50,
do_sample=False # Greedy par défaut
)
TempératureComportementCas d’usage
0.1-0.3Très prévisible, factuelCode, réponses techniques
0.5-0.7ÉquilibréConversations, résumés
0.8-1.0Créatif, variéÉcriture créative
>1.0Très aléatoire, incohérentRarement utile

Créons un assistant capable de maintenir une conversation multi-turn.

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# Configuration
model_id = "Qwen/Qwen2.5-0.5B-Instruct"
# Chargement
print("Chargement du modèle...")
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="auto",
torch_dtype=torch.float16
)
tokenizer = AutoTokenizer.from_pretrained(model_id)
print("Modèle prêt !")
def chat(messages: list[dict], max_tokens: int = 200) -> str:
"""Génère une réponse à partir d'un historique de conversation."""
# Appliquer le template de chat du modèle
input_ids = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
return_tensors="pt"
).to(model.device)
# Générer
outputs = model.generate(
input_ids,
max_new_tokens=max_tokens,
do_sample=True,
temperature=0.7,
top_p=0.9,
repetition_penalty=1.1,
pad_token_id=tokenizer.eos_token_id
)
# Extraire uniquement la réponse (sans le prompt)
response = tokenizer.decode(
outputs[0][input_ids.shape[1]:],
skip_special_tokens=True
)
return response.strip()
# Boucle de conversation
messages = [
{"role": "system", "content": "Tu es un assistant DevOps expert et pédagogue."}
]
print("\nAssistant DevOps prêt. Tapez 'quit' pour quitter.\n")
while True:
user_input = input("Vous : ").strip()
if user_input.lower() == "quit":
break
messages.append({"role": "user", "content": user_input})
response = chat(messages)
messages.append({"role": "assistant", "content": response})
print(f"\nAssistant : {response}\n")
Vous : C'est quoi un conteneur Docker ?
Assistant : Un conteneur Docker est un environnement isolé et léger
qui contient une application avec toutes ses dépendances. Imagine
une boîte qui contient tout ce dont ton application a besoin pour
fonctionner, indépendamment du système hôte.
Vous : Comment en créer un ?
Assistant : Pour créer un conteneur, tu as besoin d'abord d'une image.
Voici les étapes :
1. Crée un fichier `Dockerfile` qui décrit ton image
2. Construis l'image : `docker build -t mon-app .`
3. Lance le conteneur : `docker run mon-app`

Les modèles LLM sont gourmands en ressources. Voici comment les optimiser pour un usage CPU.

La quantification réduit la précision des poids (32 bits → 8 ou 4 bits), diminuant la mémoire et accélérant l’inférence.

Fenêtre de terminal
pip install bitsandbytes
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
import torch
# Configuration 4-bit
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.float16
)
model = AutoModelForCausalLM.from_pretrained(
"mistralai/Mistral-7B-Instruct-v0.2",
quantization_config=quantization_config,
device_map="auto"
)

Impact de la quantification :

PrécisionRAM pour 7BQualitéVitesse
float32~28 GoMaximaleLente
float16~14 GoTrès bonneMoyenne
int8~7 GoBonneRapide
int4~4 GoAcceptableTrès rapide

Pour un usage CPU sans quantification, privilégiez les modèles de petite taille :

ModèleTailleLangueCas d’usage
Qwen/Qwen2.5-0.5B-Instruct0.5BMultiChat léger, tests
Qwen/Qwen2.5-1.5B-Instruct1.5BMultiChat équilibré
google/gemma-2-2b-it2BMultiBon compromis
microsoft/Phi-3-mini-4k-instruct3.8BENPerformances/taille
mistralai/Mistral-7B-Instruct-v0.27BMultiQualité (avec quant.)

Les modèles sont téléchargés dans ~/.cache/huggingface/. Pour les stocker ailleurs :

model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen2.5-0.5B-Instruct",
cache_dir="./models/"
)

Pour un usage offline, le modèle sera chargé depuis ./models/ sans connexion.

You are trying to access a gated model.

Solution : Le modèle nécessite une authentification.

Fenêtre de terminal
huggingface-cli login

Puis acceptez les conditions d’utilisation sur la page du modèle.

CUDA out of memory / Killed

Solutions :

  1. Utiliser un modèle plus petit
  2. Activer la quantification (int8 ou int4)
  3. Réduire max_new_tokens
  4. Ajouter low_cpu_mem_usage=True au chargement

Solutions :

  1. Utiliser torch_dtype=torch.float16
  2. Activer la quantification
  3. Réduire max_new_tokens
  4. Installer accelerate pour l’optimisation automatique
La réponse contient des répétitions...répétitions...répétitions

Solution : Ajuster les paramètres de génération :

outputs = model.generate(
**inputs,
repetition_penalty=1.2, # Augmenter (1.1-1.5)
no_repeat_ngram_size=3 # Interdit les répétitions de 3 tokens
)
ConceptCe qu’il faut retenir
PipelineAPI simple pour tâches courantes — 1 ligne de code
AutoModelContrôle fin, recommandé en production
TokenizerConvertit texte ↔ tokens
device_map=“auto”Laisse accelerate choisir le meilleur device
torch_dtype=float16Divise par 2 l’utilisation mémoire
QuantificationRéduit encore la mémoire (int8, int4)
temperature0.1-0.3 factuel, 0.7+ créatif

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.