🤖 Qwen (Alibaba) – Le Guide Ultime
Deep Dive : SOTA (Qwen 2 72B), Architecture (GQA), Tokenizer (150K), "Addons" (Ollama, HF) & Fine-Tuning.
1. C'est quoi Qwen ?
"Qianwen" (千问). Famille de LLM SOTA d'Alibaba (DAMO Academy). Le concurrent "open" de Llama.
Qwen Alibaba2. Philosophie "Open"
Plus "open" que Llama (Apache 2.0). Focus SOTA et multilingue massif (Tokenizer 150K+).
Open Model Multilingual3. 📈 Historique des Versions
Qwen 1 (2023), 1.5, Qwen 2 (Juin 2024, SOTA). Clarification "Qwen 3".
Qwen 2 Versions4. Modèles Qwen 2 (Taille)
La famille : 0.5B, 1.5B, 7B, 57B, 72B (SOTA), et 1.5T (MoE).
72B 1.5T (MoE)5. Architecture (Qwen 2)
"Plugin" GQA (Grouped-Query Attention), SwiGLU (FFN), RMSNorm.
Architecture GQA6. "Addon": Tokenizer (150K)
Le "plugin" multilingue. 150K+ vocab (vs 128K Llama 3). BPE (Byte Pair Encoding).
Tokenizer BPE7. 📊 Performance (SOTA)
Benchmarks (MMLU, GPQA). Qwen 2 72B bat Llama 3 70B. Chiffres.
Benchmarks SOTA8. "Plugin": Hugging Face
L'écosystème n°1. transformers, AutoModelForCausalLM. Code Python.
9. "Plugin": Ollama (Local)
Le "Docker" des LLM. ollama run qwen2. Modelfile (customisation).
10. 🧠 Fine-Tuning (QLoRA)
Le "plugin" d'entraînement. SFTTrainer, bitsandbytes (4-bit), QLoRA.
11. "Addon": Tool Use
Le "Function Calling" de Qwen 2 (-Instruct). Forcer un "plugin" (tool) via l'API.
12. Écosystème & Liens
ModelScope (Alibaba), vLLM, GGUF (CPU), Liens (HF, Blog).
ModelScope GGUFQwen (千问, "Qianwen"), qui signifie "mille questions", est une famille de "Large Language Models" (LLM) SOTA (State-of-the-Art) développée par Alibaba Cloud (DAMO Academy).
C'est le *principal concurrent* de Llama (Meta) dans le monde "open-weight" (poids ouverts). Si Llama domine l'Occident, Qwen est le titan de l'Orient, avec un accent *massif* sur la performance multilingue (Chinois, Anglais, Français, etc.).
Qwen (en particulier Qwen 2) est connu pour ses performances SOTA qui rivalisent ou *dépassent* Llama 3 et GPT-4 sur de nombreux benchmarks.
La stratégie de Qwen est similaire à celle de Llama ("démocratiser l'IA"), mais avec une licence (plugin) *encore plus* permissive.
| Modèle | Statut | Licence | Restriction Clé |
|---|---|---|---|
| GPT-4 / Claude 3.5 | Fermé (Closed) | Propriétaire | API payante. Zéro accès aux poids. |
| Llama 3 (Meta) | "Gated Open" | Llama 3 License | Restriction Commerciale : Si > 700M utilisateurs/mois, il faut une licence payante à Meta. |
| Qwen 2 (Alibaba) | Vrai Open Source | Apache 2.0 (pour < 72B) | Aucune. Utilisation commerciale 100% libre (sauf 72B+ qui a une restriction). |
Les 3 Piliers de Qwen
- Performance SOTA : Battre Llama 3 et GPT-4 sur les benchmarks (MMLU, GPQA...).
- Multi-lingue Natif : Ne pas être un modèle "Anglais" (comme Llama 2). Le "plugin" Tokenizer (150K) est entraîné sur 27 langues.
- Accessibilité : Fournir des modèles "open" (Apache 2.0) et "plugins" (addons) pour le fine-tuning (QLoRA) et l'inférence (Ollama).
Qwen 1 (Août 2023)
- Modèles : 1.8B, 7B, 14B, 72B.
- Contexte : 32K tokens.
- Impact : Le premier "gros" modèle d'Alibaba. Très fort en Chinois et Anglais, mais performances moyennes (similaire à Llama 2).
Qwen 1.5 (Fév 2024)
Une mise à jour "incrémentale" majeure (style "Llama 2.5").
- Modèles : 0.5B, 1.8B, 4B, 7B, 14B, 32B, 72B.
- Innovation (Plugin) : A adopté l'architecture de Llama 2 (GQA, RMSNorm) (voir 1.5).
- Tokenizer : Nouveau tokenizer de 150K+ (le "plugin" multilingue).
- Impact : Bat Llama 2 70B sur *tous* les benchmarks.
Qwen 2 (Juin 2024) - Le "SOTA"
La version SOTA (State-of-the-Art) actuelle, conçue pour battre Llama 3 et GPT-4.
- Modèles : 0.5B, 1.5B, 7B, 57B, 72B (le SOTA).
- Contexte : 128K tokens.
- Données : Entraîné sur 3 Trillions de tokens (multilingues).
- Impact : Le Qwen 2 72B *bat* Llama 3 70B sur MMLU, GPQA, MATH (voir 2.1).
- "Plugin" Géant : Inclus aussi Qwen 2 1.5T (1.5 Trillion de params), un "plugin" MoE (Mixture of Experts).
Clarification : "Qwen 3-235B"
Vous avez mentionné "Qwen 3-235B". Au moment de la rédaction (Fin 2024/Début 2025), cette terminologie est inexacte et semble être une confusion :
- Qwen 3 : N'a pas encore été annoncé (Meta n'a pas non plus annoncé Llama 4).
- 235B (235 Milliards) : Ce n'est pas une taille de paramètre standard pour Qwen (ou Llama).
Hypothèses :
- Vous pensez peut-être au Qwen 2 1.5T (1500 Milliards de params), qui est un MoE ?
- Ou au Llama 3 405B (405 Milliards) (le SOTA de Meta, non-public) ?
Ce guide se concentre sur le SOTA public et utilisable : la famille Qwen 2.
La famille Qwen 2 (Juin 2024) est conçue pour couvrir *tous* les usages, de l'IA "embarquée" (Edge) au SOTA (Cloud).
| Modèle | Paramètres | Fenêtre Contexte | Usage Cible (Plugin) |
|---|---|---|---|
| Qwen 2 0.5B | 0.5 Milliard | 128K | Edge / Mobile (Raspberry Pi). |
| Qwen 2 1.5B | 1.5 Milliard | 128K | Edge / Mobile (Puissant). |
| Qwen 2 7B | 7 Milliards | 128K | GPU local "Moyen" (ex: RTX 3060). |
| Qwen 2 57B | 57 Milliards | 128K | (Version A10) Grosse inférence (GPU 24GB+). |
| Qwen 2 72B | 72 Milliards | 128K | SOTA Open-Weight. Concurrent de Llama 3 70B. (GPU A100). |
| Qwen 2 1.5T | 1.5 Trillion | (Inconnu) | (MoE - Mixture of Experts). Le "plugin" géant (non-public) pour rivaliser avec GPT-4o. |
Diagramme (Architecture "Decoder-Only")
Llama (comme GPT) est un "Transformer" de type Decoder-Only (Auto-régressif).
(Input: "Bonjour, je...")
|
▼
+---------------------+
| Tokenizer (BPE 150K) | (ID: [83, 15, 432])
+---------------------+
|
▼
+---------------------+
| Embedding (150K) |
+---------------------+
|
▼
+---------------------+
| N x Blocs Transformer |
| (Bloc = RMSNorm -> GQA -> RMSNorm -> SwiGLU FFN)
+---------------------+
|
▼
+---------------------+
| RMSNorm (Final) |
+---------------------+
|
▼
+---------------------+
| Tête (Head) Linéaire |
| (Classifier -> 150K) |
+---------------------+
|
▼
(Output: "suis")
Innovations Clés (Les "Plugins" d'Archi)
- GQA (Grouped-Query Attention) :
Problème : L'Attention (Self-Attention) est le "goulot" (coût en RAM/VRAM) des LLM.
Solution (Plugin) : GQA "partage" les têtes (ex: 8 têtes de Query, mais seulement 2 têtes de Key/Value partagées).
Résultat : Inférence *beaucoup* plus rapide (moins de VRAM nécessaire) pour (presque) la même précision. - SwiGLU (FFN) :
Utilise une "Feed-Forward Network" (FFN) basée sur SwiGLU (au lieu d'un simple ReLU/GeLU). C'est un "plugin" qui améliore l'efficacité des calculs dans le bloc Transformer. - RMSNorm (Root Mean Square Normalization) :
Un "plugin" de normalisation (commeLayerNorm) mais *plus simple* et *plus rapide*.
Utilisé en pré-normalisation (avant l'attention), ce qui stabilise l'entraînement des très grands modèles.
C'est un "plugin" (addon) crucial de Qwen. C'est l'un des plus grands vocabulaires (Tokenizer) du monde "open".
| Modèle | Taille Vocabulaire | Encodage | Focus |
|---|---|---|---|
| Llama 2 | 32,000 | BPE | Anglais |
| Llama 3 | 128,256 | BPE (Tiktoken) | Anglais + Multilingue (léger) |
| Qwen 2 | 152,064 | BPE | Massivement Multilingue (27 langues) + Code |
L'Impact (Chiffres)
Avoir un "gros" tokenizer (qui "connaît" des mots français) est *beaucoup* plus efficace :
Texte: "J'aime l'IA." # Llama 3 (Tokens: 5) ["J", "'", "aime", " l", "'IA"] # Qwen 2 (Tokens: 3) ["J'aime", " l'IA", "."] # Résultat: Qwen 2 est ~15-20% plus efficace (moins de tokens = moins de calcul) # pour les langues non-anglaises (comme le Français).
Qwen 2 (Juin 2024) a (temporairement) pris la couronne SOTA (State-of-the-Art) des modèles "open-weight", en battant Llama 3 70B (Avril 2024).
| Benchmark (Tâche) | Qwen 2 72B (SOTA Open) | Llama 3 70B (Meta) | GPT-4o (OpenAI) | Claude 3.5 Sonnet |
|---|---|---|---|---|
| MMLU (Connaissance Générale) | 82.3 | 82.0 | 88.7 | 88.7 |
| GPQA (Raisonnement (Bio/Chim)) | 56.1 | 54.7 | 53.6 | 59.4 |
| HumanEval (Code) | 88.6 | 81.7 | 90.2 | 92.0 |
| MATH (Maths) | 52.7 | 52.9 | 76.6 | 78.0 |
Conclusion (Chiffres) :
1. Qwen 2 72B est le meilleur "open model" (bat Llama 3 70B) en connaissance générale et raisonnement.
2. Les modèles "fermés" (GPT-4o, Claude 3.5) sont *encore* devant, surtout en Code et Maths (mais Qwen 2 s'en approche).
Hugging Face (HF) est la plateforme (le "GitHub") de l'IA. transformers est leur "plugin" (librairie) Python pour charger et utiliser *tous* les LLM (Llama, GPT-2, Mistral...).
Inférence (Python transformers)
# (Nécessite: pip install transformers torch accelerate)
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
# 1. Définir le modèle (depuis le Hub HF)
model_id = "Qwen/Qwen2-7B-Instruct" # (Modèle 7B "Instruct")
# 2. Charger le Tokenizer et le Modèle
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16, # (Précision (FP16/BF16))
device_map="auto" # (Met le modèle sur le GPU si dispo)
)
# 3. Format de Chat (Qwen 2 Instruct)
# (Chaque modèle a un "chat template" spécifique)
messages = [
{"role": "system", "content": "Tu es un assistant Python."},
{"role": "user", "content": "C'est quoi GQA ?"},
]
prompt = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
# 4. Tokenize (convertir en IDs)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
# 5. Génération
outputs = model.generate(
**inputs,
max_new_tokens=256,
do_sample=True,
temperature=0.7,
)
# 6. Décodage
response = tokenizer.decode(outputs[0][inputs.input_ids.shape[-1]:], skip_special_tokens=True)
print(response)
Ollama est le "Docker" des LLM. C'est le "plugin" (l'outil) le plus *simple* pour télécharger et exécuter des modèles (comme Qwen 2) localement (macOS, Windows, Linux).
Il gère les poids, la quantification (GGUF), et expose une API REST locale (http://localhost:11434).
1. Utilisation (CLI)
# 1. Télécharger et exécuter Qwen 2 7B $ ollama run qwen2:7b # 2. (La première fois, il télécharge ~4.1GB) pulling manifest ... pulling 7B-file.gguf ... 100% # 3. Chatter ! >>> Pourquoi GQA est-il rapide ? GQA (Grouped-Query Attention) est...
2. Le Modelfile (Le "Plugin" de Customisation)
C'est le "Dockerfile" d'Ollama. Il permet de créer un *nouveau* modèle (custom) à partir d'un modèle de base (Qwen 2).
Modelfile (Exemple)
# 1. Modèle de base FROM qwen2:7b # 2. Changer le "Prompt Système" (le "plugin" de personnalité) SYSTEM """ Tu es un expert en cartographie satellite (Géo-Infos). Tu réponds en format JSON. Tu refuses de parler d'autre chose. """ # 3. Changer les paramètres (le "plugin" de créativité) PARAMETER temperature 0.1 PARAMETER top_k 20
Ollama (CLI)
# 1. Créer le modèle custom $ ollama create mon-geo-bot -f ./Modelfile # 2. L'utiliser $ ollama run mon-geo-bot "C'est quoi ResNet ?" # (Il va refuser ou répondre en JSON)
Le Problème
Entraîner Qwen 2 72B (72 Milliards de poids) nécessite ~8x GPU A100 (80GB VRAM). C'est impossible pour un mortel.
La Solution : PEFT (Parameter-Efficient Fine-Tuning)
Ne pas ré-entraîner les 72B de poids. On "gèle" (freeze) le modèle, et on ajoute un petit "plugin" (adaptateur) de quelques millions de poids (LoRA).
| Méthode | Description | VRAM (GPU) |
|---|---|---|
| Full Fine-Tuning | Met à jour les 72B de poids. | > 640 GB (Impossible) |
| LoRA (Low-Rank Adaptation) | "Plugin". Gèle les 72B. Ajoute (ex:) 20M de poids "adaptateurs". | ~80 GB (1-2x A100) |
| QLoRA (Quantized LoRA) | "Plugin". Quantize le 72B (en 4-bit), PUIS ajoute le LoRA. | ~24-48 GB (1-2x RTX 4090) |
QLoRA (Le "Plugin" Magique)
QLoRA (de 2023) est la technique "plugin" qui a *tout* changé. Elle permet de fine-tuner un 72B sur un GPU "gamer".
Elle combine 2 "plugins" :
- Quantization (4-bit) : (via
bitsandbytes). Le modèle 72B (FP16) est "compressé" en 4-bit (INT4) en mémoire. (Taille VRAM / 4). - LoRA (Adaptateurs) : On ajoute les "plugins" LoRA (petites matrices) qui, eux, sont entraînés en 16-bit.
C'est la méthode standard pour tout fine-tuning local.
Code (Hugging Face transformers + trl)
# (Nécessite: pip install transformers trl peft bitsandbytes)
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import LoraConfig
from trl import SFTTrainer
# 1. Modèle de base
model_id = "Qwen/Qwen2-7B-Instruct"
# 2. Config "Plugin" QLoRA (Quantization 4-bit)
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16
)
# 3. Config "Plugin" LoRA (Adaptateurs)
lora_config = LoraConfig(
r=16,
lora_alpha=32,
lora_dropout=0.05,
task_type="CAUSAL_LM"
)
# 4. Charger le modèle (quantizé !)
model = AutoModelForCausalLM.from_pretrained(
model_id,
quantization_config=bnb_config,
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_id)
# 5. Lancer l'entraînement (SFTTrainer = Supervised Fine-Tuning)
trainer = SFTTrainer(
model=model,
train_dataset=mon_dataset_jsonl,
peft_config=lora_config,
dataset_text_field="text",
...
)
trainer.train()
C'est le "plugin" (addon) API le plus important. "Tool Use" (Appel de Fonctions) permet à Qwen (modèles -Instruct) de *demander* à appeler vos fonctions (API) locales.
Le Flux (Diagramme)
(Utilisateur: "Quelle est la météo à Paris ?")
|
▼
[ Qwen (HF) ] -> (Analyse: "J'ai besoin de la météo. J'ai un 'outil' pour ça.")
|
▼
(Réponse Python: "TOOL_CALL: 'get_meteo(location: \"Paris\")'")
|
▼
[ Votre Code (Python) ] -> (Détecte 'TOOL_CALL'. Exécute *votre* fonction get_meteo("Paris"))
|
▼
(Votre Code: "Résultat: 15°C, Pluie")
|
▼
[ Qwen (HF) ] -> (Re-appelé avec le résultat)
|
▼
(Réponse Finale: "La météo à Paris est de 15°C avec de la pluie.")
Exemple (Hugging Face transformers)
# 1. Définir le "plugin" (l'outil) au format OpenAI
tools = [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Get the current weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "La ville"},
},
"required": ["location"],
},
},
}
]
# 2. Le "Prompt"
messages = [{"role": "user", "content": "Quelle est la météo à Paris ?"}]
# 3. Transformer le "prompt" et les "tools" pour le chat_template
prompt = tokenizer.apply_chat_template(
messages,
tools=tools,
tool_choice="auto",
add_generation_prompt=True,
tokenize=False
)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
# 4. Génération
outputs = model.generate(**inputs, max_new_tokens=128)
# 5. 'response' (la réponse de Qwen)
# (Le modèle s'arrête et demande d'appeler l'outil)
# -> "J'appelle: get_current_weather(location='Paris')"
# 6. (Votre code exécute la vraie fonction 'get_current_weather'...)
# 7. (Vous re-appelez le modèle avec le résultat...)
Outils (Addons) d'inférence
| Outil | Description |
|---|---|
Hugging Face transformers | L'écosystème "plugin" n°1 (Python) pour le training et l'inférence. |
| Ollama | Le "plugin" n°1 pour l'inférence *locale* (macOS/Win/Linux). |
vLLM | "Plugin" (librairie) d'inférence *haute-performance* (batching, PagedAttention) pour la production (serveurs GPU). |
GGUF (ex-GGML) | Le *format* de fichier (plugin) qui permet à Llama/Qwen de tourner sur *CPU* (via llama.cpp). C'est ce qu'Ollama utilise. |
| ModelScope | Le "Hugging Face" d'Alibaba. Le dépôt "originel" des modèles Qwen. |
