DEV-AI
Qwen3 Ollama Python MoE Open Source

Publié le · Lecture : 16 min

Qwen3 avec Ollama en Python : architecture MoE, thinking mode et benchmarks

Ce que vous allez apprendre : l'architecture interne de Qwen3 (dense vs MoE, GQA, 128 experts), le fonctionnement du thinking mode avec budget de raisonnement configurable, les benchmarks vérifiés depuis le rapport technique officiel (AIME, GPQA Diamond, LiveCodeBench), et comment déployer et interroger Qwen3 localement avec Ollama en Python.
0.6B → 235B · Dense & MoE Long contexte · jusqu'à 128K (architecture) Apache 2.0 — 100% local

1. Pourquoi Qwen3 change la donne

Depuis la sortie de Llama 2 en 2023, le paysage des LLM open source a évolué par vagues successives. Chaque génération apportait des gains incrémentaux : plus de paramètres, plus de données, meilleure instruction-following. Qwen3 marque une rupture plus profonde, sur deux plans distincts.

Le premier est l'échelle du pré-entraînement : 36 trillions de tokens, couvrant 119 langues, soit le double de Qwen2.5. Le second — et c'est là l'innovation architecturale majeure — est l'intégration native d'un mode de raisonnement étendu (thinking mode) dans le même modèle que le mode conversationnel standard. Avant Qwen3, les modèles de raisonnement (o1, DeepSeek-R1) et les modèles conversationnels rapides étaient séparés. Qwen3 fusionne les deux dans un seul poids.

36T
tokens de pré-entraînement
(×2 vs Qwen2.5)
119
langues et dialectes
supportés
128K
tokens de contexte
(8B et plus)
Apache 2.0
licence libre
usage commercial

2. Famille de modèles : dense vs MoE

Qwen3 propose deux familles architecturales distinctes, couvrant des besoins allant du déploiement sur edge device jusqu'au datacenter.

2.1 Modèles denses

Les six modèles denses activent l'intégralité de leurs paramètres à chaque forward pass. Ils sont plus simples à déployer et prévisibles en termes de consommation mémoire.

Modèle Couches Q/KV heads Contexte Tie Embed.
Qwen3-0.6B 28 16 / 8 32K Oui
Qwen3-1.7B 28 16 / 8 32K Oui
Qwen3-4B 36 32 / 8 128K Oui
Qwen3-8B 36 32 / 8 128K Non
Qwen3-14B 40 40 / 8 128K Non
Qwen3-32B 64 64 / 8 128K Non

Source : Qwen3 Technical Report, Table 1 — arXiv 2505.09388

2.2 Modèles MoE — la vraie nouveauté

Les deux modèles MoE (Mixture-of-Experts) sont architecturalement différents : chaque couche de feedforward est remplacée par un ensemble de 128 experts spécialisés, dont seulement 8 sont activés par token via un mécanisme de routage. Le résultat : un modèle de 30 milliards de paramètres qui n'en utilise que ~3 milliards à chaque inférence.

Couche MoE Qwen3 — 128 experts, 8 activés par token Token Router Top-8 Expert 3 ✓ Expert 17 ✓ Expert 94 ✓ +125 inactifs Agrégation weighted sum Sortie 30B-A3B : 30B paramètres totaux — seulement ~3B actifs par token (~10%) 235B-A22B : 235B paramètres totaux — seulement ~22B actifs par token (~9.4%)
Modèle MoE Params totaux Params actifs Couches Q/KV heads Contexte
Qwen3-30B-A3B 30.5B ~3.3B 48 32 / 4 128K
Qwen3-235B-A22B 235B ~22B 94 64 / 4 128K
Différence clé vs Qwen2.5-MoE : Qwen3-MoE n'utilise pas de shared experts (experts partagés activés systématiquement), contrairement à sa génération précédente. À la place, le routage est entièrement sélectif avec une perte de load balancing global (global-batch load balancing loss) pour encourager la spécialisation de chaque expert. Cela améliore la diversité des représentations apprises.

3. Architecture interne — GQA, experts et contexte 128K

Trois choix architecturaux méritent une attention particulière pour comprendre les performances de Qwen3.

3.1 Grouped Query Attention (GQA)

Toute la famille Qwen3 utilise le Grouped Query Attention. Dans l'attention multi-têtes classique (MHA), chaque tête de requête possède sa propre tête K/V. GQA regroupe plusieurs têtes de requête partageant les mêmes têtes K/V. Conséquence directe : la taille du cache KV (qui croît linéairement avec la longueur de séquence) est réduite d'un facteur égal au ratio Q/KV.

Sur Qwen3-32B, ce ratio est 64/8 = 8× : le cache KV est 8 fois plus petit qu'en MHA classique pour le même nombre de paramètres d'attention. Cela permet des séquences longues (128K tokens) sans exploser la mémoire GPU.

3.2 Vocabulaire et tokenisation

Qwen3 utilise un vocabulaire de 151 669 tokens — significativement plus large que LLaMA (32K) ou Mistral (32K). Un vocabulaire large améliore l'efficacité de tokenisation pour les langues non-latines, réduit la longueur des séquences et améliore les performances multilingues. Le modèle hérite du tokenizer de la famille Qwen, basé sur tiktoken avec un traitement spécial des espaces.

3.3 Curriculum de pré-entraînement en 3 stages

Stage 1 — Général : 30+ trillions de tokens, longueur de séquence 4 096 tokens. Base factuelle et linguistique large.
Stage 2 — Raisonnement : ~5 trillions de tokens de haute qualité sélectionnés (STEM, code, mathématiques). Renforce les capacités analytiques.
Stage 3 — Long contexte : centaines de milliards de tokens à 32 768 tokens de longueur. Active la capacité à traiter des documents longs.

4. Thinking mode : GRPO, RL à grande échelle et budget de raisonnement

C'est l'innovation la plus significative de Qwen3. Là où des modèles comme o1 ou DeepSeek-R1 sont des modèles de raisonnement purs (lents, coûteux), et où les modèles conversationnels sont des modèles de réponse rapide sans chaîne de pensée, Qwen3 fusionne les deux dans un seul jeu de poids.

4.1 Pipeline de post-training en 4 étapes

Étape 1 — Long CoT Cold Start
Fine-tuning supervisé sur des données longues de chaîne de pensée couvrant mathématiques, code, raisonnement logique et STEM. Dote le modèle de la capacité de base à dérouler un raisonnement pas-à-pas.
Étape 2 — Reinforcement Learning avec GRPO
~4 000 paires (question, vérificateur de réponse) couvrant de larges sous-domaines. Algorithme GRPO (Group Relative Policy Optimization) : évalue un groupe de réponses candidates et optimise relativement à la meilleure — sans critic model, économique en calcul. Amélioration mesurée sur AIME'24 : +15 points sur 170 étapes d'entraînement RL.
Étape 3 — Thinking Mode Fusion (SFT)
Fine-tuning supervisé pour intégrer les deux modes dans un seul modèle. Les données contiennent un mélange de (question, réponse en mode thinking) et (question, réponse directe). Le modèle apprend à basculer selon un signal explicite dans le prompt.
Étape 4 — RL Généraliste avec GSPO
RL sur 20+ tâches générales (instruction following, formatage, sécurité, dialogue multi-tour). Qwen a ensuite publié GSPO (Group Sequence Policy Optimization) comme variante séquence-niveau de GRPO pour le RL à grande échelle.

4.2 Budget de raisonnement — comment ça fonctionne

En thinking mode, le modèle génère d'abord un bloc de raisonnement interne (entre des balises <think> et </think>) avant de produire sa réponse finale. Ce bloc de raisonnement est de taille variable — il s'adapte à la complexité du problème. La performance s'améliore de façon continue et prévisible lorsqu'on alloue plus de budget de raisonnement — comportement dit de scalable test-time compute.

# Exemple de sortie en thinking mode
<think>
Analysons le problème. On cherche le nombre de façons de...
[raisonnement interne — longueur variable selon la complexité]
Donc la réponse est 42 car...
</think>

La réponse est 42. En effet, en appliquant le principe...
Impact du thinking mode sur AIME'25 : le même modèle Qwen3-235B-A22B obtient 81.5 en thinking mode contre 24.7 en non-thinking — un écart de 56.8 points sur ce benchmark de mathématiques avancées. Sur LiveCodeBench (programmation compétitive) : 70.7 vs 35.3. Le thinking mode double ou triple les performances sur les tâches de raisonnement complexe.

5. Benchmarks vérifiés — AIME, GPQA, LiveCodeBench

Les chiffres ci-dessous proviennent du rapport technique officiel Qwen3 (arXiv 2505.09388) et du blog Qwen. Toute comparaison avec des modèles propriétaires doit être lue avec la réserve habituelle : les benchmarks sont mesurés en conditions contrôlées et peuvent varier selon les prompts, la température, et la version du modèle.

5.1 Modèle phare (Qwen3-235B-A22B) — thinking vs non-thinking

Benchmark Thinking Non-thinking Ce que ça mesure
AIME'25 81.5 24.7 Mathématiques olympiques avancées
AIME'24 85.7 Mathématiques olympiques
GPQA Diamond 71.1 62.9 Questions de doctorat (chimie, bio, physique)
LiveCodeBench v5 70.7 35.3 Code — problèmes de compétition récents
CodeForces ELO 2056 1387 Programmation compétitive (ELO)
MMLU-Redux 92.7 89.2 Connaissances académiques multidisciplinaires
Arena-Hard 95.6 96.1 Évaluation comparative (chat)

5.2 Base model vs concurrents (Qwen3-235B-A22B-Base)

Benchmark Qwen3-235B DeepSeek-V3 Llama-4-Maverick
MMLU-Redux87.4086.14
MATH71.8462.6263.32
EvalPlus (code)77.6063.7568.38
GPQA Diamond47.4741.92

Source : Qwen3 Technical Report, Table 3 — arXiv 2505.09388. Comparaisons sur les modèles de base (pré-entraînement uniquement, sans instruction tuning).

6. Installation avec Ollama — quel modèle choisir

Tous les modèles Qwen3 sont disponibles sur la bibliothèque Ollama. La commande est standardisée :

# Modèles denses
ollama pull qwen3:0.6b
ollama pull qwen3:1.7b
ollama pull qwen3:4b
ollama pull qwen3:8b       # Recommandé pour GPU 8-12 GB
ollama pull qwen3:14b      # Recommandé pour GPU 16 GB
ollama pull qwen3:32b      # RTX 4090 24 GB

# Modèles MoE (meilleur rapport qualité/VRAM)
ollama pull qwen3:30b      # MoE ~3B actifs — très efficace
ollama pull qwen3:235b     # MoE ~22B actifs — niveau frontier
Contexte packagé par Ollama : Ollama ajuste la fenêtre de contexte active selon le modèle. Les modèles 8B, 14B et 32B sont packagés à 40 960 tokens ; les modèles 4B, 30B (MoE) et 235B à 262 144 tokens. La valeur par défaut de num_ctx dépend ensuite de votre VRAM disponible au moment du chargement. Définissez-la explicitement selon votre usage.
Quel modèle choisir ? Pour la majorité des tâches (code, raisonnement, Q&R), Qwen3-8B est un excellent point de départ sur GPU grand public. Pour du raisonnement intensif avec thinking mode, Qwen3-14B ou Qwen3-30B offrent le meilleur compromis qualité/ressources. Évitez 0.6B et 1.7B pour des tâches complexes — ils sont pertinents pour de l'edge computing ou des prototypes.

7. Thinking mode en pratique avec Ollama

Ollama gère nativement le thinking mode de Qwen3. Il y a trois façons de le contrôler.

7.1 En ligne de commande (CLI)

ollama run qwen3:14b

# Activer le thinking mode (raisonnement étendu)
/set think

# Désactiver — réponses rapides
/set nothink

# Vérifier le mode actuel
/show info

7.2 Via le paramètre think (méthode recommandée)

import ollama

# Thinking mode activé — think=True (recommandé)
response = ollama.chat(
    model="qwen3:14b",
    messages=[{
        "role": "user",
        "content": "Démontre que la somme des n premiers entiers vaut n(n+1)/2."
    }],
    think=True
)
print(response["message"]["thinking"])  # Raisonnement interne
print(response["message"]["content"])   # Réponse finale

# Non-thinking mode — think=False (réponse rapide)
response = ollama.chat(
    model="qwen3:14b",
    messages=[{
        "role": "user",
        "content": "Résume ce texte en 3 points."
    }],
    think=False
)
print(response["message"]["content"])

# Certains templates de modèles reconnaissent aussi les préfixes /think et /nothink
# directement dans le message — comportement dépendant du template, pas garanti.
Quand utiliser quel mode ? Thinking pour les problèmes de mathématiques, code complexe, raisonnement multi-étapes, questions de fond. Non-thinking pour les résumés, reformulations, chatbots conversationnels, tâches de classification simples. Le non-thinking est 2 à 4× plus rapide car il n'alloue pas de budget de raisonnement.

8. API Python complète — Ollama SDK et OpenAI-compatible

8.1 Ollama Python SDK

import ollama

"""
pip install ollama
Prérequis : Ollama en cours d'exécution + ollama pull qwen3:14b
"""

# Chat simple avec thinking mode activé
response = ollama.chat(
    model="qwen3:14b",
    messages=[
        {"role": "system", "content": "Tu es un expert en Python. Réponds en français."},
        {"role": "user", "content": "Explique le GIL Python et ses implications sur le multithreading."}
    ],
    think=True,                # Thinking mode — interface officielle Ollama
    options={
        "temperature": 0.6,      # Recommandé pour le thinking mode
        "top_p": 0.95,
        "num_ctx": 8192,
    }
)
print(response["message"]["thinking"])  # Raisonnement interne
print(response["message"]["content"])   # Réponse finale

# Streaming — affichage token par token
for chunk in ollama.chat(
    model="qwen3:14b",
    messages=[{"role": "user", "content": "Écris une fonction Python de tri rapide (quicksort)."}],
    stream=True
):
    print(chunk["message"]["content"], end="", flush=True)

8.2 API OpenAI-compatible (drop-in replacement)

Ollama expose une API REST compatible OpenAI sur le port 11434. Tout code utilisant le SDK openai fonctionne sans modification en changeant uniquement la base URL.

from openai import OpenAI

# Pointe vers Ollama local au lieu d'OpenAI
client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama"  # Valeur arbitraire — Ollama ne vérifie pas la clé
)

response = client.chat.completions.create(
    model="qwen3:14b",
    messages=[
        {"role": "user", "content": "Résous : intégrale de x*sin(x) dx"}
    ],
    temperature=0.6,
    max_tokens=4096,
    stream=False,
    reasoning_effort="high"  # Thinking mode — champ OpenAI-compatible Ollama
)
print(response.choices[0].message.content)

# Listing des modèles disponibles
models = client.models.list()
for m in models.data:
    print(m.id)

8.3 Intégration LangChain

from langchain_ollama import ChatOllama
from langchain_core.messages import HumanMessage, SystemMessage

llm = ChatOllama(
    model="qwen3:14b",
    temperature=0.6,
    num_ctx=8192,
    reasoning=True,  # Thinking mode — paramètre natif langchain_ollama
)

messages = [
    SystemMessage(content="Tu es un expert en mathématiques."),
    HumanMessage(content="Prouve l'irrationalité de √2."),
]

response = llm.invoke(messages)
print(response.content)

9. Comparatif VRAM et tokens/s par GPU

Modèle Q4_K_M Q8_0 GPU minimum Tok/s (Q4)
Qwen3-0.6B~0.5 GB0.8 GB4 GB VRAM
Qwen3-1.7B~1.2 GB2 GBGTX 1060 6 GB
Qwen3-4B~3 GB5 GBRTX 3060 6 GB
Qwen3-8B ⭐~5-6 GB9 GBRTX 3060 12 GB~30
Qwen3-14B~10 GB15 GBRTX 4070 16 GB~28
Qwen3-32B~20 GB34 GBRTX 4090 24 GB~22
Qwen3-30B-A3B (MoE)~19-24 GBRTX 4090 / M3 Max 64 GB~25

Estimations pratiques observées sur Ollama avec Q4_K_M (sources communautaires : localaimaster.com, willitrunai.com). Ces ordres de grandeur ne sont pas des chiffres officiels Qwen — ils varient selon la quantization, le driver, la VRAM disponible et le contexte actif.

MoE vs dense à VRAM équivalent : Le 30B-A3B (MoE) et le 32B (dense) utilisent tous deux ~20 GB en Q4_K_M. Le MoE est légèrement plus rapide (~25 vs ~22 tok/s) car il n'active que ~3B paramètres par token à l'inférence. En revanche, le dense 32B peut offrir une meilleure cohérence sur les tâches nécessitant une activation uniforme des représentations — les deux valent le test selon votre cas d'usage.

10. Qwen3 dans un pipeline RAG et agents

Qwen3 s'intègre nativement dans les architectures RAG et agents grâce à sa compatibilité OpenAI. Si vous avez déjà un pipeline RAG Ollama (voir notre guide RAG), il suffit de changer le modèle.

10.1 Qwen3 dans un pipeline RAG LangChain

from langchain_ollama import ChatOllama, OllamaEmbeddings
from langchain_chroma import Chroma
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain.chains import create_retrieval_chain

# LLM : Qwen3 avec thinking mode pour les requêtes complexes
llm = ChatOllama(model="qwen3:14b", temperature=0.6, reasoning=True)

# Embeddings : nomic-embed-text (inchangé)
embeddings = OllamaEmbeddings(model="nomic-embed-text")

# Charger la base vectorielle existante
vectorstore = Chroma(
    persist_directory="./chroma_db",
    embedding_function=embeddings
)

prompt = ChatPromptTemplate.from_template(
    """Tu es un assistant expert. Réponds uniquement à partir des documents fournis.
Si la réponse est absente, indique-le clairement.

Contexte :
{context}

Question : {input}

Réponse :"""
)

chain = create_retrieval_chain(
    vectorstore.as_retriever(search_kwargs={"k": 3}),
    create_stuff_documents_chain(llm, prompt)
)

result = chain.invoke({"input": "Quelle est la politique de remboursement ?"})
print(result["answer"])

10.2 Agent avec tool use

from langchain_ollama import ChatOllama
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.tools import tool

@tool
def calculer(expression: str) -> str:
    """Évalue une expression mathématique Python (ex: '2**32 + 17')."""
    try:
        return str(eval(expression, {"__builtins__": {}}, {}))
    except Exception as e:
        return f"Erreur : {e}"

llm = ChatOllama(model="qwen3:14b", temperature=0)

prompt = ChatPromptTemplate.from_messages([
    ("system", "Tu es un assistant mathématique. Utilise les outils disponibles."),
    ("human", "{input}"),
    ("placeholder", "{agent_scratchpad}"),
])

agent = create_tool_calling_agent(llm, [calculer], prompt)
executor = AgentExecutor(agent=agent, tools=[calculer], verbose=True)

result = executor.invoke({"input": "Calcule 2^32 et dis-moi si ce nombre est premier."})
print(result["output"])

11. Limites et points de vigilance

Le thinking mode n'est pas toujours meilleur

Sur Arena-Hard (qualité de chat générale), le mode non-thinking obtient 96.1 contre 95.6 pour le thinking. Le raisonnement étendu coûte de la latence et peut sur-raisonner des questions simples. Choisissez le mode selon la nature de la tâche, pas par défaut.

Température : ne pas utiliser les valeurs par défaut

L'équipe Qwen recommande explicitement temperature=0.6 et top_p=0.95 pour le thinking mode, et temperature=0.7 pour le non-thinking. Les valeurs par défaut d'Ollama (souvent 0.8) peuvent produire des raisonnements incohérents en thinking mode.

Contexte 128K ≠ performance uniforme sur 128K

La fenêtre de contexte de 128K est réelle techniquement, mais les performances sur les tâches de "needle-in-a-haystack" (retrouver une information enfouie dans un très long contexte) se dégradent progressivement. Testez sur vos cas réels avant de supposer que 128K tokens fonctionne uniformément.

num_ctx dans Ollama est dynamique

La valeur par défaut de num_ctx dépend de la VRAM disponible au chargement : ~4 096 tokens si < 24 GiB, ~32 768 tokens entre 24 et 48 GiB, ~262 144 tokens avec ≥ 48 GiB. Pour du thinking mode intensif ou des documents longs, définissez explicitement : options={"num_ctx": 32768}.

Hallucinations : toujours présentes malgré le raisonnement

Le thinking mode améliore significativement le raisonnement formel (mathématiques, logique déductive), mais ne supprime pas les hallucinations sur les connaissances factuelles. Pour des faits précis et vérifiables, combinez Qwen3 avec un pipeline RAG plutôt que de vous fier à la mémoire du modèle seule.

FAQ

Quelle est la différence entre Qwen3 dense et MoE ?

Les modèles denses (0.6B à 32B) activent l'intégralité de leurs paramètres à chaque token. Les modèles MoE (30B-A3B et 235B-A22B) disposent de 128 experts par couche, mais n'en activent que 8 par token via un routeur : le 30B-A3B utilise ainsi ~3B paramètres actifs malgré ses 30B totaux, ce qui réduit le coût d'inférence tout en conservant la capacité d'un grand modèle. Différence clé vs Qwen2.5-MoE : Qwen3-MoE n'a pas de shared experts, le routage est entièrement sélectif.

Comment activer le thinking mode dans Ollama en Python ?

Deux approches recommandées : (1) paramètre think=True/False dans ollama.chat() en Python, (2) /set think et /set nothink en CLI interactive. Le modèle génère un raisonnement interne de longueur variable avant la réponse finale. Température recommandée : 0.6 en thinking mode.

Quel modèle Qwen3 choisir selon mon GPU ?

RTX 3060 12 GB : Qwen3-8B (Q4_K_M, ~5-6 GB, 30 tok/s). RTX 4070 16 GB : Qwen3-14B (Q4_K_M, ~10 GB, 28 tok/s). RTX 4090 24 GB : Qwen3-32B (Q4_K_M, ~20 GB, 22 tok/s) ou Qwen3-30B-A3B MoE (légèrement plus rapide). Apple M2 Pro 16 GB : Qwen3-8B confortable, 14B possible. CPU seulement : Qwen3-0.6B ou 1.7B — la vitesse sera très lente au-delà.

Qwen3 est-il utilisable pour des usages commerciaux ?

Oui. Toute la famille Qwen3 est publiée sous licence Apache 2.0, qui autorise l'usage commercial, la modification et la redistribution sans restriction. C'est une différence importante avec Llama 3 (licence Meta avec restrictions au-delà de 700M d'utilisateurs actifs mensuels).

Qwen3 fonctionne-t-il bien en français ?

Oui. Qwen3 est entraîné sur 119 langues dont le français. Les performances en français sont correctes pour les tâches générales, mais comme pour tous les LLM multilingues, elles restent inférieures à l'anglais sur les benchmarks spécialisés. Pour un usage intensif en français, testez la qualité sur vos tâches spécifiques — le thinking mode aide particulièrement sur les problèmes de logique et mathématiques formulés en français.

Conclusion

Qwen3 représente une étape significative dans la maturation des LLM open source. L'innovation principale — la fusion du thinking mode et du mode conversationnel dans un seul modèle — résout un vrai problème pratique : choisir entre un modèle lent et précis ou un modèle rapide mais superficiel. Qwen3 donne ce choix à l'utilisateur à l'exécution, pour chaque requête.

Sur le plan technique, l'architecture MoE sans shared experts et l'unification des modes thinking / non-thinking font de Qwen3 une des sorties open-weight les plus marquantes de 2025–2026. Les benchmarks (AIME'25 à 81.5, CodeForces ELO à 2056 en thinking mode) positionnent le 235B-A22B dans la même ligue que les meilleurs modèles propriétaires sur les tâches de raisonnement formel.

Pour commencer : installez Qwen3-8B avec ollama pull qwen3:8b, testez think=True sur un problème de code ou de mathématiques, comparez avec think=False sur la même question. La différence de profondeur de raisonnement est immédiatement perceptible.

Articles liés

LLM LOCAL
Ollama : héberger un LLM localement
Installation, modèles, VRAM, API Python — le guide complet.
RAG
RAG avec Ollama en Python
Connectez vos documents à un LLM local — pipeline complet.
AGENTS IA
Agents IA en 2026
Architecture, frameworks LangGraph/AutoGen et déploiement.