Small Language Models : Phi-3, Gemma, Mistral 7B

tl;dr: SLMs (1-14B params) = performances GPT-3.5-level. Top 3 : Phi-3.5 (3.8B, 128K context, MIT), Gemma 2 9B (#1 MMLU 71%), Qwen 2.5 7B (multilingue 29 langues). Exécution locale : Mac M2, RTX 3060 (8GB), <2GB RAM, latence 50-100ms.

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)
💡 Les SLMs démocratisent l’IA : qualité proche des grands modèles, mais accessible à tous sans cloud, sans coûts récurrents, sans latence réseau.

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 ?

Illustration détaillée de les petits modèles de langage (SLM)

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égorieParamètresExemplesHardware Min
Tiny<1BSmolLM (135M-1.7B), MobileLLMCPU, 2GB RAM
Small1-3BPhi-3 mini (3.8B), Gemini Nano4-8GB RAM
Medium7-14BMistral 7B, Gemma 2 9B, Llama 3.2 8B8-16GB RAM, GPU 8GB
Large70B+Llama 3.1 70B, Mixtral 8x22BGPU 40GB+
Frontier175B-1.7TGPT-4, Claude 3 OpusCloud 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 SLMs ne sont pas des ‘grands modèles compressés’. Ce sont des modèles pensés dès le départ pour l’efficacité, entraînés sur données ultra-qualitatives.

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 :

BenchmarkPhi-3.5 miniGPT-3.5Gemma 2 2B
MMLU69.0%70.0%52.2%
HumanEval59.1%48.1%40.0%
GSM8K (math)82.5%57.1%67.8%
TruthfulQA68.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 :

BenchmarkGemma 2 9BMistral 7BLlama 3.2 8B
MMLU71.3%62.5%69.4%
HumanEval61.0%40.2%57.3%
GSM8K84.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 :

BenchmarkMistral 7BLlama 3.2 8BGemma 2 9B
MMLU62.5%69.4%71.3%
HumanEval40.2%57.3%61.0%
GSM8K52.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 :

BenchmarkQwen 2.5 7BMistral 7BGemma 2 9B
MMLU70.3%62.5%71.3%
HumanEval61.0%40.2%61.0%
GSM8K82.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èleParamsMMLUCodeMathContextTaille (Q4)Licence
Phi-3.5 mini3.8B69.0%⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐128K2.3GBMIT
Gemma 2 9B9B71.3%⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐8K5.4GBGemma
Qwen 2.5 7B7.6B70.3%⭐⭐⭐⭐⭐⭐⭐⭐⭐128K4.5GBApache 2.0
Mistral 7B7.3B62.5%⭐⭐⭐⭐⭐⭐32K4.4GBApache 2.0
Llama 3.2 8B8B69.4%⭐⭐⭐⭐⭐⭐⭐⭐128K4.9GBLlama 3

Par use case

Use CaseRecommandation #1Recommandation #2Pourquoi
Génération de codePhi-3.5 miniGemma 2 9BTop HumanEval scores
MathématiquesGemma 2 9BPhi-3.5 miniGSM8K 84% vs 82%
Analyse documentsPhi-3.5 miniQwen 2.5 7BContext 128K
ChatbotGemma 2 9BLlama 3.2 8BÉquilibre perf/taille
MultilingueQwen 2.5 7BGemma 2 9B29 langues vs bon EU
FrançaisMistral 7BGemma 2 9BCréé par Mistral FR
On-device mobilePhi-3.5 miniGemma 2 2B2.3GB vs 1.5GB
Budget RAM <4GBPhi-3.5 miniSmolLM 1.7BPlus petit
Open source totalMistral 7BQwen 2.5 7BApache 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

HardwarePhi-3.5 miniGemma 2 9BMistral 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-12700K12s (8 t/s)25s (4 t/s)18s (5 t/s)
💡 💡 Pour latence acceptable (<100ms/token), privilégiez Apple Silicon (M1/M2/M3) ou GPU NVIDIA récent (RTX 30xx+). CPU seul OK pour batch processing.

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èleRéponseCorrect ?
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èleRésultatCorrect ?
GPT-4o390km, 91.8 km/h
Phi-3.5 mini390km, 91.8 km/h
Mistral 7B370km, 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}")
⚠️ Warning
⚠️ 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 :

  1. Installer Ollama
  2. Télécharger Phi-3.5, Gemma 2 9B, Mistral 7B
  3. Créer dataset de test (10 questions : code, math, général)
  4. 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 :

  1. SLMs (1-14B) rivalisent GPT-3.5 sur de nombreuses tâches
  2. Top 3 modèles 2025 : Phi-3.5 mini (3.8B), Gemma 2 9B, Qwen 2.5 7B
  3. Exécution on-device : Mac M2 (8-16GB), RTX 3060+, iPhone 15 Pro
  4. Use cases : Privacy-first apps, edge AI, mobile, dev/prototyping
  5. 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)
💡 🎯 Testez Phi-3.5 mini dès aujourd’hui : ‘ollama run phi3.5’. Vous serez surpris par la qualité, sur votre machine, gratuitement.

Pour aller plus loin

Articles connexes :

Ressources externes :

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