Le récit de l'IA de pointé se concentre sur des modèles toujours plus grands, mais une révolution parallele se produit a l'autre extremite du spectre. Les petits modèles de langage (SLM) -- généralement sous 10B paramètres -- atteignent des capacites surprenantes grace a de meilleures données d'entraînement, la distillation et des innovations architecturales.
Taille du Modèle vs Performance
La plage 7-14B capture 75-85% des performances du modèle de pointé a 3-5% du cout. Un Phi-3 Medium a 14B atteint 78 au MMLU, contre 88.7 pour GPT-4o -- un écart de 12% pour une difference de cout de 40x.
Comparaison des Techniques de Compression
Technique Réduction de Taille Impact sur la Qualité Gain de Vitesse Quantification INT8 2x Minimal (<1%) 1.5-2x Quantification INT4 4x Faible (1-3%) 2-3x GPTQ/AWQ 4x Tres faible 2-3x GGUF (llama.cpp) 2-8x Variable selon le niveau Optimise CPU Distillation Sur mesuré Moderee (5-15%) Proportionnel a la taille Elagage structuré 1.5-3x Moderee 1.5-2x
tadata
float x
int4 q
−7
q_min
−6
−4
−2
0
1
3
5
7
q_max
−1.2
−0.7
−0.3
0
0.25
0.6
0.9
1.4
x
−1.200
−0.700
−0.300
0.000
0.250
0.600
0.900
1.400
q = round(x/s) + z
−6
−4
−2
0
1
3
5
7
x' = s·(q − z)
−1.200
−0.800
−0.400
0.000
0.200
0.600
1.000
1.400
error x' − x
0.000
−0.100
−0.100
0.000
−0.050
0.000
0.100
0.000
scale s = 0.2 · zero-point z = 0 · levels 2⁴ = 16 · MSE = 0.004062 · max |error| = 0.1 (≤ s/2 = 0.1 inside the range)
fp32
32 bits/value
bf16
16 bits/value
int4
4 bits/value: 8× smaller than fp32, 4× than bf16
plus one scale (and zero-point) per tensor, channel or group
s = max|x| / (2^(b−1) − 1) = 1.4 / 7
q = clamp(round(x / s), −7, 7), z = 0
x' = s · (q − z)
MSE = mean((x' − x)²)
where
x
original float value
b
bits per integer code (4)
s
scale: float step between two integer codes
z
zero-point: the integer that stands for 0.0
q
stored integer code
x'
dequantised value used in compute
max, min
max|x| = largest magnitude
float x
int4 q
−7
q_min
−6
−4
−2
0
1
3
5
7
q_max
−1.2
−0.7
−0.3
0
0.25
0.6
0.9
1.4
x
−1.200
−0.700
−0.300
0.000
0.250
0.600
0.900
1.400
q = round(x/s) + z
−6
−4
−2
0
1
3
5
7
x' = s·(q − z)
−1.200
−0.800
−0.400
0.000
0.200
0.600
1.000
1.400
error x' − x
0.000
−0.100
−0.100
0.000
−0.050
0.000
0.100
0.000
scale s = 0.2 · zero-point z = 0 · levels 2⁴ = 16 · MSE = 0.004062 · max |error| = 0.1 (≤ s/2 = 0.1 inside the range)
fp32
32 bits/value
bf16
16 bits/value
int4
4 bits/value: 8× smaller than fp32, 4× than bf16
plus one scale (and zero-point) per tensor, channel or group
s = max|x| / (2^(b−1) − 1) = 1.4 / 7
q = clamp(round(x / s), −7, 7), z = 0
x' = s · (q − z)
MSE = mean((x' − x)²)
where
x
original float value
b
bits per integer code (4)
s
scale: float step between two integer codes
z
zero-point: the integer that stands for 0.0
q
stored integer code
x'
dequantised value used in compute
max, min
max|x| = largest magnitude
Huit poids projetés sur une grille symétrique 4 bits : échelle, codes entiers, valeurs déquantifiées et erreur Extrait de la fiche « Quantisation, Pruning and Distillation » · Demander la fiche complète
Matrice de Déploiement par Plateforme
Plateforme Taille Max Latence Cas d'Usage Smartphone ~3B (4-bit) 20-50 tok/s Assistant embarque Navigateur ~3B (4-bit) 10-30 tok/s Apps privées, demos Edge (RPi, Jetson) ~7B (4-bit) 5-20 tok/s IoT, traitement local Laptop (CPU) ~13B (4-bit) 15-40 tok/s Dev local, hors ligne Laptop (GPU) ~30B (4-bit) 30-80 tok/s Développement Serveur (1 GPU) ~70B (4-bit) 50-150 tok/s Inférence production API Cloud Illimite 50-200 tok/s Tous
tadata
RTX 4060 Ti 16 GB
16 GB · 288 GB/s
RTX 4090 24 GB
24 GB · 1008 GB/s
RTX 5090 32 GB
32 GB · 1792 GB/s
RTX PRO 6000 96 GB
96 GB · 1792 GB/s
DGX Spark 128 GB
128 GB · 273 GB/s
model \ device
8B model
int4 · 4 GB → 4.8 GB
✓ fits, 30 % used
≤ 72 tokens/s
✓ fits, 20 % used
≤ 252 tokens/s
✓ fits, 15 % used
≤ 448 tokens/s
✓ fits, 5 % used
≤ 448 tokens/s
✓ fits, 4 % used
≤ 68.2 tokens/s
8B model
bf16 · 16 GB → 19.2 GB
✗ needs 2 devices
does not fit on o…
✓ fits, 80 % used
≤ 63 tokens/s
✓ fits, 60 % used
≤ 112 tokens/s
✓ fits, 20 % used
≤ 112 tokens/s
✓ fits, 15 % used
≤ 17.1 tokens/s
32B model
int4 · 16 GB → 19.2 GB
✗ needs 2 devices
does not fit on o…
✓ fits, 80 % used
≤ 63 tokens/s
✓ fits, 60 % used
≤ 112 tokens/s
✓ fits, 20 % used
≤ 112 tokens/s
✓ fits, 15 % used
≤ 17.1 tokens/s
70B model
int4 · 35 GB → 42 GB
✗ needs 3 devices
does not fit on o…
✗ needs 2 devices
does not fit on o…
✗ needs 2 devices
does not fit on o…
✓ fits, 44 % used
≤ 51.2 tokens/s
✓ fits, 33 % used
≤ 7.8 tokens/s
117B MoE (gpt-oss-120b)
fp4 · 58.5 GB → 70.2 GB
✗ needs 5 devices
does not fit on o…
✗ needs 3 devices
does not fit on o…
✗ needs 3 devices
does not fit on o…
✓ fits, 73 % used
≤ 30.6 tokens/s
✓ fits, 55 % used
≤ 4.67 tokens/s
W = N × b
need = W × (1 + o)
fits when need ≤ M, else devices = ceil(need / M)
decode tokens/s ≤ BW / W (batch 1, memory-bound)
where
N
parameters (billions)
b
bytes per parameter: fp32 4, bf16/fp16 2, fp8/int8 1, int4 0.5
W
weight bytes (GB = 10⁹ bytes)
o
overhead for KV cache, activations, buffers: 20 %
M
device memory (GB = 10⁹ bytes)
BW
device memory bandwidth (GB/s = 10⁹ bytes/s)
tokens/s
upper bound: each token reads every weight once; KV-cache reads, compute and multi-device links ignored
RTX 4060 Ti 16 GB
16 GB · 288 GB/s
RTX 4090 24 GB
24 GB · 1008 GB/s
RTX 5090 32 GB
32 GB · 1792 GB/s
RTX PRO 6000 96 GB
96 GB · 1792 GB/s
DGX Spark 128 GB
128 GB · 273 GB/s
model \ device
8B model
int4 · 4 GB → 4.8 GB
✓ fits, 30 % used
≤ 72 tokens/s
✓ fits, 20 % used
≤ 252 tokens/s
✓ fits, 15 % used
≤ 448 tokens/s
✓ fits, 5 % used
≤ 448 tokens/s
✓ fits, 4 % used
≤ 68.2 tokens/s
8B model
bf16 · 16 GB → 19.2 GB
✗ needs 2 devices
does not fit on o…
✓ fits, 80 % used
≤ 63 tokens/s
✓ fits, 60 % used
≤ 112 tokens/s
✓ fits, 20 % used
≤ 112 tokens/s
✓ fits, 15 % used
≤ 17.1 tokens/s
32B model
int4 · 16 GB → 19.2 GB
✗ needs 2 devices
does not fit on o…
✓ fits, 80 % used
≤ 63 tokens/s
✓ fits, 60 % used
≤ 112 tokens/s
✓ fits, 20 % used
≤ 112 tokens/s
✓ fits, 15 % used
≤ 17.1 tokens/s
70B model
int4 · 35 GB → 42 GB
✗ needs 3 devices
does not fit on o…
✗ needs 2 devices
does not fit on o…
✗ needs 2 devices
does not fit on o…
✓ fits, 44 % used
≤ 51.2 tokens/s
✓ fits, 33 % used
≤ 7.8 tokens/s
117B MoE (gpt-oss-120b)
fp4 · 58.5 GB → 70.2 GB
✗ needs 5 devices
does not fit on o…
✗ needs 3 devices
does not fit on o…
✗ needs 3 devices
does not fit on o…
✓ fits, 73 % used
≤ 30.6 tokens/s
✓ fits, 55 % used
≤ 4.67 tokens/s
W = N × b
need = W × (1 + o)
fits when need ≤ M, else devices = ceil(need / M)
decode tokens/s ≤ BW / W (batch 1, memory-bound)
where
N
parameters (billions)
b
bytes per parameter: fp32 4, bf16/fp16 2, fp8/int8 1, int4 0.5
W
weight bytes (GB = 10⁹ bytes)
o
overhead for KV cache, activations, buffers: 20 %
M
device memory (GB = 10⁹ bytes)
BW
device memory bandwidth (GB/s = 10⁹ bytes/s)
tokens/s
upper bound: each token reads every weight once; KV-cache reads, compute and multi-device links ignored
Cinq appareils face à cinq modèles (poids + 20 % de surcoût). Les barres montrent la mémoire utilisée ; le chiffre en tokens/s est le plafond à batch 1 : bande passante ÷ octets de poids Extrait de la fiche « Consumer and Workstation GPUs for Local AI » · Demander la fiche complète
tadata
GPT-3 175B (2020) 1.7
Chinchilla 70B (2022) 20
Llama 2 70B (2023) 29
Llama 3 70B (2024) 214
Llama 3 8B (2024) 1875
Tokens par paramètre de modèles documentés (tokens d'entraînement / paramètres) Extrait de la fiche « Scaling Laws and Compute » · Demander la fiche complète
Quand Choisir Petit vs Grand
Choisir un SLM quand : tâche unique bien définie, latence critique, cout par requête minimal, confidentialite imposant le on-device, volume élevé, domaine spécifique avec bonnes données de fine-tuning.
Choisir un grand modèle quand : raisonnement multi-étapes complexe requis, connaissances larges nécessaires, types de tâches imprevisibles, qualité primordiale.
Pattern hybride (de plus en plus courant) : SLM pour le routage/classification, grand modèle pour les cas complexes. Le grand modèle généré les données d'entraînement, le SLM sert en production.
Ressources