Small Language Models : Phi-3, Gemma, Mistral 7B
2019 : GPT-2 (1.5B paramètres) est révolutionnaire 2020 : GPT-3 (175B) redéfinit le possible 2023 : GPT-4 (1.76T rumeur) domine le marché 2025 : Phi-3 (3.8B) rivalise avec GPT-3.5 ⚡
La tendance s’inverse. Les Small Language Models (SLMs) - modèles de 1 à 14 milliards de paramètres - atteignent des performances comparables aux géants tout en :
- 🚀 Tournant sur votre laptop (8-16GB RAM)
- 📱 S’exécutant sur smartphone (iPhone, Android)
- ⚡ Répondant en <100ms (vs 2-5s cloud)
- 💰 Coûtant $0 (self-hosted, pas d’API)
- 🔒 Préservant la confidentialité (data ne quitte jamais l’appareil)
Dans ce guide :
- Définition : Qu’est-ce qu’un SLM ?
- Top modèles : Phi-3, Gemma 2, Mistral 7B, Qwen 2.5
- Benchmarks : Performances réelles vs grands modèles
- Use cases : On-device, edge AI, privacy
- Démo pratique : Exécuter Phi-3 localement
- Comparaison : Quel SLM choisir ?

Qu’est-ce qu’un Small Language Model ?
Définition
Small Language Model (SLM) : Modèle de langage avec 1-14 milliards de paramètres, optimisé pour :
- Efficacité compute (faible GPU/RAM)
- Latence faible (inférence rapide)
- Déploiement on-device (laptop, mobile, edge)
Comparaison tailles :
| Catégorie | Paramètres | Exemples | Hardware Min |
|---|---|---|---|
| Tiny | <1B | SmolLM (135M-1.7B), MobileLLM | CPU, 2GB RAM |
| Small | 1-3B | Phi-3 mini (3.8B), Gemini Nano | 4-8GB RAM |
| Medium | 7-14B | Mistral 7B, Gemma 2 9B, Llama 3.2 8B | 8-16GB RAM, GPU 8GB |
| Large | 70B+ | Llama 3.1 70B, Mixtral 8x22B | GPU 40GB+ |
| Frontier | 175B-1.7T | GPT-4, Claude 3 Opus | Cloud only |
Pourquoi les SLMs sont efficaces ?
Avancées techniques qui rendent les SLMs performants :
1. Données d’entraînement de qualité
Qualité > Quantité
GPT-3 (2020) : 300B tokens (web crawl brut)
Phi-3 (2024) : 3.3T tokens (filtrés, synthétiques de haute qualité)
→ Moins de paramètres, mais mieux entraînés
2. Données synthétiques
- Grands modèles génèrent données d’entraînement pour petits
- “Distillation” : élève (SLM) apprend du professeur (GPT-4)
- Exemple : Phi-3 entraîné partiellement avec données GPT-4
3. Architectures optimisées
- Grouped-Query Attention (GQA) : moins de calculs
- Sliding Window Attention : long context efficace
- Sparse models : MoE (Mixture of Experts)
4. Quantization
Phi-3 (3.8B) :
- FP16 : 7.6 GB
- INT8 : 3.8 GB
- INT4 : 2.3 GB (Q4_K_M)
→ Tient sur MacBook Air M2 (8GB RAM)
Les top Small Language Models
Phi-3 (Microsoft)
Overview :
- Famille : Phi-3 mini (3.8B), Phi-3 small (7B), Phi-3 medium (14B)
- Créateur : Microsoft Research
- Licence : MIT (open source commercial)
- Context : 4K (mini), 128K (long context version)
Phi-3.5 mini (3.8B) - Le plus populaire :
Paramètres : 3.8B
Context : 128K tokens
Taille : 2.3GB (quantized Q4)
Hardware : 4GB RAM minimum
Performances : Rivalise GPT-3.5 sur MMLU
Scores benchmarks :
| Benchmark | Phi-3.5 mini | GPT-3.5 | Gemma 2 2B |
|---|---|---|---|
| MMLU | 69.0% | 70.0% | 52.2% |
| HumanEval | 59.1% | 48.1% | 40.0% |
| GSM8K (math) | 82.5% | 57.1% | 67.8% |
| TruthfulQA | 68.1% | 47.0% | 58.0% |
Points forts :
- ✅ Raisonnement : Excellent en math, logique
- ✅ Code : Top 1 des SLMs pour génération code
- ✅ Long context : 128K tokens (analyser documents entiers)
- ✅ Licence : MIT (usage commercial libre)
Limites :
- ⚠️ Connaissances générales : Inférieures aux grands modèles
- ⚠️ Créativité : Moins bon pour creative writing
Utilisation :
# Avec Ollama
ollama run phi3.5
# Avec Transformers
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("microsoft/Phi-3.5-mini-instruct")
tokenizer = AutoTokenizer.from_pretrained("microsoft/Phi-3.5-mini-instruct")
messages = [{"role": "user", "content": "Écris une fonction Python pour Fibonacci"}]
inputs = tokenizer.apply_chat_template(messages, return_tensors="pt")
outputs = model.generate(inputs, max_new_tokens=200)
print(tokenizer.decode(outputs[0]))
Gemma 2 (Google)
Overview :
- Famille : Gemma 2 2B, 9B, 27B
- Créateur : Google DeepMind
- Licence : Gemma License (open source, restrictions commerciales mineures)
- Context : 8K tokens
Gemma 2 9B - Le meilleur SLM gratuit :
Paramètres : 9B
Context : 8K tokens
Taille : 5.4GB (quantized Q4)
Hardware : 8GB RAM
Performances : #1 des SLMs sur MMLU
Scores benchmarks :
| Benchmark | Gemma 2 9B | Mistral 7B | Llama 3.2 8B |
|---|---|---|---|
| MMLU | 71.3% | 62.5% | 69.4% |
| HumanEval | 61.0% | 40.2% | 57.3% |
| GSM8K | 84.0% | 52.2% | 79.6% |
| GPQA (science) | 42.0% | 28.5% | 38.2% |
Points forts :
- ✅ Top performances : Meilleur SLM sur la plupart des benchmarks
- ✅ Gratuit : Totalement gratuit, même usage commercial
- ✅ Multilingue : Excellent en français, espagnol, allemand
- ✅ Safety : Filtres de sécurité intégrés
Limites :
- ⚠️ Licence : Restrictions mineures (pas de distillation vers autres modèles)
- ⚠️ Context : 8K seulement (vs 128K Phi-3)
Utilisation :
# Ollama
ollama run gemma2:9b
# Python (Transformers)
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("google/gemma-2-9b-it")
tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-9b-it")
chat = [{"role": "user", "content": "Explique la physique quantique simplement"}]
prompt = tokenizer.apply_chat_template(chat, tokenize=False)
inputs = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=200)
print(tokenizer.decode(outputs[0]))
Mistral 7B (Mistral AI)
Overview :
- Taille : 7B paramètres
- Créateur : Mistral AI (France 🇫🇷)
- Licence : Apache 2.0 (100% open source)
- Context : 32K tokens (sliding window 128K)
Mistral 7B v0.3 :
Paramètres : 7.3B
Context : 32K tokens
Taille : 4.4GB (quantized Q4)
Hardware : 6-8GB RAM
Performances : Référence des SLMs 7B
Scores benchmarks :
| Benchmark | Mistral 7B | Llama 3.2 8B | Gemma 2 9B |
|---|---|---|---|
| MMLU | 62.5% | 69.4% | 71.3% |
| HumanEval | 40.2% | 57.3% | 61.0% |
| GSM8K | 52.2% | 79.6% | 84.0% |
Points forts :
- ✅ Open source : Apache 2.0, liberté totale
- ✅ Écosystème : Large adoption, nombreux fine-tunes
- ✅ Sliding window : Efficient long context (128K)
- ✅ Francophone : Excellent en français
Limites :
- ⚠️ Performances : Dépassé par Gemma 2 9B et Phi-3
- ⚠️ Math : Moins bon que Phi-3 sur raisonnement
Utilisation :
# Ollama
ollama run mistral:7b
# vLLM (serveur haute performance)
vllm serve mistralai/Mistral-7B-Instruct-v0.3 --max-model-len 32768
Qwen 2.5 (Alibaba)
Overview :
- Famille : Qwen 2.5 0.5B, 1.5B, 3B, 7B, 14B, 32B, 72B
- Créateur : Alibaba Cloud (Chine 🇨🇳)
- Licence : Apache 2.0
- Context : 128K tokens
Qwen 2.5 7B :
Paramètres : 7.6B
Context : 128K tokens
Taille : 4.5GB (quantized Q4)
Hardware : 8GB RAM
Performances : Top multilingue
Scores benchmarks :
| Benchmark | Qwen 2.5 7B | Mistral 7B | Gemma 2 9B |
|---|---|---|---|
| MMLU | 70.3% | 62.5% | 71.3% |
| HumanEval | 61.0% | 40.2% | 61.0% |
| GSM8K | 82.5% | 52.2% | 84.0% |
| C-Eval (chinois) | 83.1% | 45.0% | 58.0% |
Points forts :
- ✅ Multilingue : 29 langues, excellent chinois ET anglais
- ✅ Long context : 128K tokens
- ✅ Code : Très bon pour génération code
- ✅ Math : Performances proches Gemma 2
Limites :
- ⚠️ Adoption : Moins populaire en Occident que Phi-3/Gemma
- ⚠️ Documentation : Partiellement en chinois
Utilisation :
# Ollama
ollama run qwen2.5:7b
# MLX (Apple Silicon optimisé)
mlx_lm.generate --model Qwen/Qwen2.5-7B-Instruct --prompt "Hello"
Llama 3.2 (Meta)
Overview :
- Famille : Llama 3.2 1B, 3B, 8B (+ 11B, 90B vision)
- Créateur : Meta AI
- Licence : Llama 3 Community License
- Context : 128K tokens
Llama 3.2 8B :
Paramètres : 8B
Context : 128K tokens
Taille : 4.9GB (quantized Q4)
Hardware : 8GB RAM
Performances : Très bon équilibre
Points forts :
- ✅ Écosystème : Énorme communauté, nombreux fine-tunes
- ✅ Long context : 128K tokens
- ✅ Tooling : Support excellent (Ollama, vLLM, etc.)
Limites :
- ⚠️ Licence : Restrictions pour apps >700M users
- ⚠️ Performances : Légèrement derrière Gemma 2 9B
Comparaison détaillée
Tableau récapitulatif
| Modèle | Params | MMLU | Code | Math | Context | Taille (Q4) | Licence |
|---|---|---|---|---|---|---|---|
| Phi-3.5 mini | 3.8B | 69.0% | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 128K | 2.3GB | MIT |
| Gemma 2 9B | 9B | 71.3% | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 8K | 5.4GB | Gemma |
| Qwen 2.5 7B | 7.6B | 70.3% | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 128K | 4.5GB | Apache 2.0 |
| Mistral 7B | 7.3B | 62.5% | ⭐⭐⭐ | ⭐⭐⭐ | 32K | 4.4GB | Apache 2.0 |
| Llama 3.2 8B | 8B | 69.4% | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 128K | 4.9GB | Llama 3 |
Par use case
| Use Case | Recommandation #1 | Recommandation #2 | Pourquoi |
|---|---|---|---|
| Génération de code | Phi-3.5 mini | Gemma 2 9B | Top HumanEval scores |
| Mathématiques | Gemma 2 9B | Phi-3.5 mini | GSM8K 84% vs 82% |
| Analyse documents | Phi-3.5 mini | Qwen 2.5 7B | Context 128K |
| Chatbot | Gemma 2 9B | Llama 3.2 8B | Équilibre perf/taille |
| Multilingue | Qwen 2.5 7B | Gemma 2 9B | 29 langues vs bon EU |
| Français | Mistral 7B | Gemma 2 9B | Créé par Mistral FR |
| On-device mobile | Phi-3.5 mini | Gemma 2 2B | 2.3GB vs 1.5GB |
| Budget RAM <4GB | Phi-3.5 mini | SmolLM 1.7B | Plus petit |
| Open source total | Mistral 7B | Qwen 2.5 7B | Apache 2.0 |
Hardware requirements
Configurations minimales
Phi-3.5 mini (3.8B) :
- CPU only : 4GB RAM, latence ~2s/token
- Mac M2 : 8GB RAM, latence ~50ms/token
- RTX 3060 : 6GB VRAM, latence ~20ms/token
- iPhone 15 Pro : Possible (A17 Pro, 8GB RAM)
Gemma 2 9B :
- CPU only : 8GB RAM, latence ~5s/token (lent)
- Mac M2 : 16GB RAM, latence ~80ms/token
- RTX 3060 : 12GB VRAM, latence ~30ms/token
- RTX 4090 : 24GB VRAM, latence ~15ms/token
Mistral 7B / Qwen 2.5 7B :
- CPU only : 6-8GB RAM, latence ~3-4s/token
- Mac M1/M2 : 8-16GB RAM, latence ~60ms/token
- RTX 3060 Ti : 8GB VRAM, latence ~25ms/token
Benchmarks latence réels
Test : Générer 100 tokens, quantization Q4_K_M
| Hardware | Phi-3.5 mini | Gemma 2 9B | Mistral 7B |
|---|---|---|---|
| M2 Pro (16GB) | 2.1s (47 t/s) | 3.5s (28 t/s) | 2.8s (35 t/s) |
| RTX 4090 (24GB) | 0.9s (111 t/s) | 1.8s (55 t/s) | 1.5s (66 t/s) |
| RTX 3060 (12GB) | 1.5s (66 t/s) | 3.2s (31 t/s) | 2.5s (40 t/s) |
| CPU i7-12700K | 12s (8 t/s) | 25s (4 t/s) | 18s (5 t/s) |
Démo Pratique : exécuter Phi-3 localement
Ollama (le plus simple)
Installation :
# macOS
brew install ollama
# Linux
curl -fsSL https://ollama.com/install.sh | sh
# Windows
# Télécharger depuis ollama.com/download
Exécution :
# Télécharger et lancer Phi-3.5
ollama run phi3.5
>>> Écris une fonction Python pour calculer Fibonacci
Voici une fonction élégante utilisant la memoization :
def fibonacci(n, memo={}):
if n in memo:
return memo[n]
if n <= 1:
return n
memo[n] = fibonacci(n-1, memo) + fibonacci(n-2, memo)
return memo[n]
# Test
print(fibonacci(10)) # 55
>>> /bye
API REST :
import requests
response = requests.post('http://localhost:11434/api/generate', json={
"model": "phi3.5",
"prompt": "Résume la révolution française en 3 points",
"stream": False
})
print(response.json()['response'])
Transformers (Python)
Installation :
pip install transformers torch accelerate
Code :
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# Charger modèle et tokenizer
model_name = "microsoft/Phi-3.5-mini-instruct"
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.float16, # FP16 pour économiser VRAM
device_map="auto" # Distribution automatique GPU/CPU
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
# Chat
messages = [
{"role": "system", "content": "Tu es un assistant Python expert."},
{"role": "user", "content": "Écris une classe Python pour un arbre binaire"}
]
# Formater prompt
inputs = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
return_tensors="pt"
).to(model.device)
# Générer
outputs = model.generate(
inputs,
max_new_tokens=500,
temperature=0.7,
do_sample=True,
top_p=0.9
)
# Décoder
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)
Optimisation avec quantization :
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
# Configuration quantization 4-bit
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.float16
)
# Charger modèle quantizé (2.3GB au lieu de 7.6GB)
model = AutoModelForCausalLM.from_pretrained(
"microsoft/Phi-3.5-mini-instruct",
quantization_config=quantization_config,
device_map="auto"
)
# Latence légèrement réduite, mémoire divisée par 3
MLX (Apple silicon optimisé)
Installation (Mac M1/M2/M3 uniquement) :
pip install mlx mlx-lm
Exécution :
from mlx_lm import load, generate
# Charger modèle (optimisé Apple Silicon)
model, tokenizer = load("mlx-community/Phi-3.5-mini-instruct-4bit")
# Générer
prompt = "Explique la récursion en programmation"
response = generate(model, tokenizer, prompt=prompt, max_tokens=200)
print(response)
Performance MLX :
- 🚀 1.5-2x plus rapide que Transformers sur Mac
- 💾 Mémoire unifiée exploitée efficacement
- ⚡ 100+ tokens/sec sur M2 Pro
Use cases des SLMs
On-Device AI (privacy-first)
Scénario : Application médicale analysant données patients
Contraintes :
- ❌ Données ne peuvent quitter l’appareil (RGPD, HIPAA)
- ❌ Pas d’APIs cloud (coûts, latence, uptime)
- ✅ Exécution locale obligatoire
Solution :
# App desktop avec Phi-3.5 mini
import ollama
def analyze_patient_note(note: str):
"""Analyse note médicale localement (aucune donnée envoyée au cloud)"""
prompt = f"""
Analyse cette note médicale et extrais :
- Symptômes principaux
- Diagnostics potentiels
- Actions recommandées
Note : {note}
"""
response = ollama.generate(model="phi3.5", prompt=prompt)
return response['response']
# Données restent 100% locales
note = "Patient 45 ans, fièvre 39°C depuis 3 jours, toux sèche..."
analysis = analyze_patient_note(note)
Avantages :
- 🔒 Privacy absolue : données ne quittent jamais l’appareil
- ⚡ Latence : <100ms vs 2-5s API cloud
- 💰 Coût : $0 (vs $0.01-0.10 par analyse)
- 📡 Offline : fonctionne sans internet
Edge AI (IoT, robotique)
Scénario : Robot de service (hôtel, aéroport)
Contraintes :
- Réponses temps réel (<200ms)
- Pas de connexion cloud fiable
- Budget hardware limité (Jetson Nano, Raspberry Pi 5)
Solution :
# Robot avec Gemma 2 2B (1.5GB)
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("google/gemma-2-2b-it", device_map="cuda")
tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-2b-it")
def robot_respond(user_query: str, context: dict):
"""Réponse robot basée sur contexte environnement"""
prompt = f"""
Tu es un robot d'assistance dans un hôtel.
Localisation : {context['location']}
Heure : {context['time']}
Question client : {user_query}
Réponds de manière concise et utile.
"""
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=100)
return tokenizer.decode(outputs[0], skip_special_tokens=True)
# Usage
response = robot_respond(
"Où est le restaurant ?",
{"location": "Lobby", "time": "19:30"}
)
# Latence : ~150ms sur Jetson Orin Nano
Applications mobiles
Scénario : App iOS/Android avec assistant IA
Contraintes :
- <100MB taille d’app (App Store limit)
- Batterie limitée
- RAM 4-8GB
Solution : Phi-3 mini quantized
// iOS avec Core ML
import CoreML
class AIAssistant {
let model: Phi3Mini_CoreML // Modèle exporté en Core ML
func chat(message: String) -> String {
let input = Phi3MiniInput(prompt: message)
let output = try? model.prediction(input: input)
return output?.response ?? "Erreur"
}
}
// Taille modèle : ~2.5GB (quantized INT4)
// Latence iPhone 15 Pro : ~50ms/token
Exemples d’apps :
- Private LLM (iOS) : Chat local avec Phi-3, Mistral, Llama
- Pocket AI (Android) : Assistant hors-ligne
- LM Studio Mobile : Interface chat pour SLMs
Développement / prototypage
Scénario : Tester prompts sans coûts API
Avantages :
# Itération rapide et gratuite
prompts_variants = [
"Résume ce texte : {text}",
"En tant qu'expert, résume : {text}",
"Résume en 2 phrases : {text}"
]
for variant in prompts_variants:
response = ollama.generate(model="phi3.5", prompt=variant.format(text=doc))
print(f"Variant: {variant[:30]}... → {response[:100]}...")
# Coût : $0 (vs $0.50-2 avec GPT-4o)
Limitations des SLMs
Connaissances générales limitées
Test : “Qui a gagné la Coupe du Monde 2022 ?”
| Modèle | Réponse | Correct ? |
|---|---|---|
| GPT-4o | “L’Argentine a remporté la Coupe du Monde 2022…” | ✅ |
| Phi-3.5 mini | “Je n’ai pas cette information dans mes données d’entraînement” | ⚠️ |
| Gemma 2 9B | “L’Argentine, victoire contre France aux tirs au but” | ✅ |
Explication : SLMs ont cutoff date plus ancien et moins de paramètres pour “mémoire factuelle”.
Solution : RAG (Retrieval-Augmented Generation)
# Augmenter SLM avec recherche web
def sml_with_rag(question: str):
# 1. Rechercher info récente
context = web_search(question)
# 2. Fournir contexte au SLM
prompt = f"Contexte : {context}\n\nQuestion : {question}"
return ollama.generate(model="phi3.5", prompt=prompt)
# → SLM peut répondre avec infos actualisées
Raisonnement complexe
Test : Problèmes multi-étapes
Question : "Une voiture roule à 100 km/h pendant 2h30, puis 80 km/h pendant 1h45.
Quelle est la distance totale et vitesse moyenne ?"
| Modèle | Résultat | Correct ? |
|---|---|---|
| GPT-4o | 390km, 91.8 km/h | ✅ |
| Phi-3.5 mini | 390km, 91.8 km/h | ✅ |
| Mistral 7B | 370km, 88 km/h | ❌ |
Observation : Phi-3 rivalise les grands sur math, mais Mistral 7B échoue.
Suivre instructions complexes
SLMs peuvent “oublier” instructions dans prompts longs :
prompt = """
Tu dois :
1. Résumer le texte
2. Extraire 3 points clés
3. Proposer une question de compréhension
4. Évaluer le ton (formel/informel)
5. Identifier le public cible
Texte : [...]
"""
# Grands modèles : suivent les 5 instructions
# SLMs : souvent oublient les points 4-5
Solution : Simplifier prompts ou chaîner appels
# Mieux : 1 instruction à la fois
summary = sml("Résume : {text}")
key_points = sml("Extrais 3 points clés : {text}")
question = sml("Crée question sur : {text}")
⚠️ SLMs excellent sur tâches ciblées (code, math, résumés), mais peinent sur instructions multi-étapes complexes ou connaissances factuelles récentes. Combinez avec RAG ou grands modèles selon besoin.
Choisir son SLM
Arbre de décision
Avez-vous <4GB RAM ?
├─ Oui → Phi-3.5 mini (2.3GB Q4)
└─ Non → Continuer
Besoin long context (>10K tokens) ?
├─ Oui → Phi-3.5 mini (128K) ou Qwen 2.5 7B (128K)
└─ Non → Continuer
Priorité : Performance max ?
├─ Oui → Gemma 2 9B (top MMLU 71.3%)
└─ Non → Continuer
Besoin multilingue (>10 langues) ?
├─ Oui → Qwen 2.5 7B (29 langues)
└─ Non → Continuer
Priorité : Open source Apache 2.0 ?
├─ Oui → Mistral 7B ou Qwen 2.5 7B
└─ Non → Gemma 2 9B (licence Gemma OK pour plupart des cas)
Recommandations finales
Général purpose (chatbot, assistant) :
- 🥇 Gemma 2 9B : Meilleur équilibre perf/taille
- 🥈 Phi-3.5 mini : Si RAM limitée
Code génération :
- 🥇 Phi-3.5 mini : Top HumanEval 59%
- 🥈 Gemma 2 9B : Excellent aussi (61%)
Mathématiques / Raisonnement :
- 🥇 Gemma 2 9B : GSM8K 84%
- 🥈 Phi-3.5 mini : GSM8K 82.5%
Analyse documents (long context) :
- 🥇 Phi-3.5 mini : 128K tokens
- 🥈 Qwen 2.5 7B : 128K tokens
Mobile / Edge :
- 🥇 Phi-3.5 mini : 2.3GB, très efficace
- 🥈 Gemma 2 2B : 1.5GB, plus petit
Multilingue :
- 🥇 Qwen 2.5 7B : 29 langues
- 🥈 Gemma 2 9B : Bon EU/Asie
Exercices pratiques
Benchmark local
Objectif : Comparer 3 SLMs sur votre machine.
Étapes :
- Installer Ollama
- Télécharger Phi-3.5, Gemma 2 9B, Mistral 7B
- Créer dataset de test (10 questions : code, math, général)
- Mesurer latence, qualité réponses
Code :
import time
import ollama
models = ["phi3.5", "gemma2:9b", "mistral:7b"]
questions = [
"Écris une fonction tri rapide en Python",
"Calcule 15% de 230",
"Résume la révolution française en 3 points"
]
results = {}
for model in models:
results[model] = []
for q in questions:
start = time.time()
response = ollama.generate(model=model, prompt=q)
latency = time.time() - start
results[model].append({
"question": q,
"latency": latency,
"response": response['response'][:100]
})
# Analyser résultats
for model, data in results.items():
avg_latency = sum(d["latency"] for d in data) / len(data)
print(f"{model}: {avg_latency:.2f}s moyenne")
RAG avec SLM
Objectif : Créer assistant documentaire local.
Architecture :
Documents → Chroma (embeddings) → Phi-3.5 mini
Code :
from langchain.document_loaders import DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OllamaEmbeddings
from langchain.vectorstores import Chroma
from langchain.llms import Ollama
from langchain.chains import RetrievalQA
# 1. Charger documents
loader = DirectoryLoader("./docs", glob="**/*.md")
docs = loader.load()
# 2. Chunking
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
chunks = splitter.split_documents(docs)
# 3. Embeddings locaux
embeddings = OllamaEmbeddings(model="nomic-embed-text")
vectorstore = Chroma.from_documents(chunks, embeddings)
# 4. LLM local
llm = Ollama(model="phi3.5")
# 5. Chaîne RAG
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vectorstore.as_retriever(search_kwargs={"k": 3})
)
# Question
response = qa_chain.invoke("Comment fonctionne le RAG ?")
print(response["result"])
# 100% local, $0, privacy totale
Fine-tuning SLM
Objectif : Fine-tuner Phi-3 sur dataset spécifique.
Use case : Assistant support technique pour produit spécifique.
Dataset (format ChatML) :
[
{
"messages": [
{"role": "user", "content": "Comment réinitialiser le produit X ?"},
{"role": "assistant", "content": "Pour réinitialiser : 1) Appuyez sur..."}
]
}
]
Code (LoRA fine-tuning) :
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments
from trl import SFTTrainer
from peft import LoraConfig
import torch
# Modèle de base
model = AutoModelForCausalLM.from_pretrained(
"microsoft/Phi-3.5-mini-instruct",
torch_dtype=torch.float16
)
tokenizer = AutoTokenizer.from_pretrained("microsoft/Phi-3.5-mini-instruct")
# Configuration LoRA (adapter léger)
lora_config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
# Training arguments
training_args = TrainingArguments(
output_dir="./phi3-support",
num_train_epochs=3,
per_device_train_batch_size=4,
learning_rate=2e-4,
logging_steps=10
)
# Trainer
trainer = SFTTrainer(
model=model,
train_dataset=dataset, # Votre dataset
peft_config=lora_config,
args=training_args,
tokenizer=tokenizer
)
# Fine-tune (1-2h sur RTX 3090)
trainer.train()
# Sauvegarder adapter (quelques MB seulement)
model.save_pretrained("./phi3-support-lora")
Conclusion
Les Small Language Models marquent un tournant dans l’IA : performances proches des géants, mais exécution locale, coût zéro, privacy totale.
Points clés à retenir :
- SLMs (1-14B) rivalisent GPT-3.5 sur de nombreuses tâches
- Top 3 modèles 2025 : Phi-3.5 mini (3.8B), Gemma 2 9B, Qwen 2.5 7B
- Exécution on-device : Mac M2 (8-16GB), RTX 3060+, iPhone 15 Pro
- Use cases : Privacy-first apps, edge AI, mobile, dev/prototyping
- Limites : Connaissances factuelles limitées, raisonnement complexe difficile
Stratégie recommandée :
- Démarrer : Installer Ollama, tester Phi-3.5 et Gemma 2 9B
- Prototyper : Créer chatbot local avec RAG
- Évaluer : Benchmarker sur vos use cases réels
- Optimiser : Quantization INT4, fine-tuning LoRA si besoin
- Déployer : On-device (mobile, edge) ou self-hosted
L’avenir de l’IA n’est pas seulement dans le cloud avec des modèles toujours plus gros. Les SLMs démocratisent l’IA en la rendant accessible localement, à tous, sans dépendance aux géants tech.
Tendances 2025-2026 :
- 📉 SLMs 1-3B atteindront performances actuelles 7B
- 📱 IA on-device standard sur tous smartphones
- 🔒 Privacy-first AI deviendra la norme (RGPD, compliance)
- 🚀 Edge AI explosera (robotique, IoT, automotive)
Pour aller plus loin
Articles connexes :
- Quantization : Réduire la Taille des Modèles
- Ollama : Exécuter des LLMs Localement
- Comparaison APIs LLM
- IA Locale : Frameworks Open Source
Ressources externes :
- Phi-3 Technical Report
- Gemma 2 Model Card
- Mistral 7B Paper
- Qwen 2.5 Blog
- Artificial Analysis - Benchmarks SLMs
Outils pratiques :
- Ollama - Interface simple pour SLMs
- LM Studio - GUI pour télécharger et tester modèles
- PrivateLLM - App iOS pour SLMs
- MLX - Framework Apple Silicon