Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

🤖 Qwen (Alibaba) – Le Guide Ultime

Deep Dive : SOTA (Qwen 2 72B), Architecture (GQA), Tokenizer (150K), "Addons" (Ollama, HF) & Fine-Tuning.

1.1 Facile

1. C'est quoi Qwen ?

"Qianwen" (千问). Famille de LLM SOTA d'Alibaba (DAMO Academy). Le concurrent "open" de Llama.

Qwen Alibaba
1.2 Moyen

2. Philosophie "Open"

Plus "open" que Llama (Apache 2.0). Focus SOTA et multilingue massif (Tokenizer 150K+).

Open Model Multilingual
1.3 Moyen

3. 📈 Historique des Versions

Qwen 1 (2023), 1.5, Qwen 2 (Juin 2024, SOTA). Clarification "Qwen 3".

Qwen 2 Versions
1.4 Avancé

4. Modèles Qwen 2 (Taille)

La famille : 0.5B, 1.5B, 7B, 57B, 72B (SOTA), et 1.5T (MoE).

72B 1.5T (MoE)
1.5 Avancé

5. Architecture (Qwen 2)

"Plugin" GQA (Grouped-Query Attention), SwiGLU (FFN), RMSNorm.

Architecture GQA
1.6 Avancé

6. "Addon": Tokenizer (150K)

Le "plugin" multilingue. 150K+ vocab (vs 128K Llama 3). BPE (Byte Pair Encoding).

Tokenizer BPE
2.1 Avancé

7. 📊 Performance (SOTA)

Benchmarks (MMLU, GPQA). Qwen 2 72B bat Llama 3 70B. Chiffres.

Benchmarks SOTA
2.2 Moyen

8. "Plugin": Hugging Face

L'écosystème n°1. transformers, AutoModelForCausalLM. Code Python.

Hugging Face transformers
2.3 Facile

9. "Plugin": Ollama (Local)

Le "Docker" des LLM. ollama run qwen2. Modelfile (customisation).

Ollama Local LLM
3.1 Avancé

10. 🧠 Fine-Tuning (QLoRA)

Le "plugin" d'entraînement. SFTTrainer, bitsandbytes (4-bit), QLoRA.

Fine-Tuning QLoRA
3.2 Avancé

11. "Addon": Tool Use

Le "Function Calling" de Qwen 2 (-Instruct). Forcer un "plugin" (tool) via l'API.

Tool Use Function Calling
3.3 Facile

12. Écosystème & Liens

ModelScope (Alibaba), vLLM, GGUF (CPU), Liens (HF, Blog).

ModelScope GGUF
1.1 C'est quoi Qwen ? (Alibaba)

Qwen (千问, "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.

1.2 Philosophie "Open" (vs Llama)

La stratégie de Qwen est similaire à celle de Llama ("démocratiser l'IA"), mais avec une licence (plugin) *encore plus* permissive.

ModèleStatutLicenceRestriction Clé
GPT-4 / Claude 3.5Fermé (Closed)PropriétaireAPI payante. Zéro accès aux poids.
Llama 3 (Meta)"Gated Open"Llama 3 LicenseRestriction Commerciale : Si > 700M utilisateurs/mois, il faut une licence payante à Meta.
Qwen 2 (Alibaba)Vrai Open SourceApache 2.0 (pour < 72B)Aucune. Utilisation commerciale 100% libre (sauf 72B+ qui a une restriction).
Les 3 Piliers de Qwen
  1. Performance SOTA : Battre Llama 3 et GPT-4 sur les benchmarks (MMLU, GPQA...).
  2. Multi-lingue Natif : Ne pas être un modèle "Anglais" (comme Llama 2). Le "plugin" Tokenizer (150K) est entraîné sur 27 langues.
  3. Accessibilité : Fournir des modèles "open" (Apache 2.0) et "plugins" (addons) pour le fine-tuning (QLoRA) et l'inférence (Ollama).
1.3 📈 Historique des Versions (Clarification "Qwen 3")
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 :

  1. Qwen 3 : N'a pas encore été annoncé (Meta n'a pas non plus annoncé Llama 4).
  2. 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.

1.4 Modèles Qwen 2 (0.5B à 1.5T)

La famille Qwen 2 (Juin 2024) est conçue pour couvrir *tous* les usages, de l'IA "embarquée" (Edge) au SOTA (Cloud).

ModèleParamètresFenêtre ContexteUsage Cible (Plugin)
Qwen 2 0.5B0.5 Milliard128KEdge / Mobile (Raspberry Pi).
Qwen 2 1.5B1.5 Milliard128KEdge / Mobile (Puissant).
Qwen 2 7B7 Milliards128KGPU local "Moyen" (ex: RTX 3060).
Qwen 2 57B57 Milliards128K(Version A10) Grosse inférence (GPU 24GB+).
Qwen 2 72B72 Milliards128KSOTA Open-Weight. Concurrent de Llama 3 70B. (GPU A100).
Qwen 2 1.5T1.5 Trillion(Inconnu)(MoE - Mixture of Experts). Le "plugin" géant (non-public) pour rivaliser avec GPT-4o.
1.5 Architecture Llama 3 (GQA, RMSNorm)
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 (comme LayerNorm) 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.
1.6 "Addon": Le Tokenizer (150K+ Vocab)

C'est un "plugin" (addon) crucial de Qwen. C'est l'un des plus grands vocabulaires (Tokenizer) du monde "open".

ModèleTaille VocabulaireEncodageFocus
Llama 232,000BPEAnglais
Llama 3128,256BPE (Tiktoken)Anglais + Multilingue (léger)
Qwen 2152,064BPEMassivement 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).
2.1 📊 Performance (Qwen 2 72B SOTA)

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.382.088.788.7
GPQA (Raisonnement (Bio/Chim))56.154.753.659.4
HumanEval (Code)88.681.790.292.0
MATH (Maths)52.752.976.678.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).

2.2 "Plugin" Écosystème: Hugging Face (transformers)

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)
2.3 "Plugin" Local: Ollama

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)
3.1 🧠 Fine-Tuning (Le "Plugin" QLoRA)
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éthodeDescriptionVRAM (GPU)
Full Fine-TuningMet à 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" :

  1. Quantization (4-bit) : (via bitsandbytes). Le modèle 72B (FP16) est "compressé" en 4-bit (INT4) en mémoire. (Taille VRAM / 4).
  2. 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()
3.2 "Addon" API: Tool Use (Function Calling)

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...)