SLM v roce 2026: Přehled malých jazykových modelů a benchmarků
V roce 2023 „model AI“ téměř vždy znamenal GPT-4 nebo Claude. V roce 2026 se krajina a radikálně odlišné: Phi-4-mini (3,8 miliardy parametrů) překonává Mixtral 8x7B (46B) v benchmarcích matematického uvažování běží 135 milionů parametru SmolLM2 Raspberry Pi 4 a Gemma 3n E4B mají LMArena Elo nad 1300 – vyšší než mnoho jiných 70B modely před rokem. Nastala éra malých jazykových modelů a to má důsledky konkrétně pro ty, kteří vyvíjejí aplikace AI.
Co se naučíte
- Mapa hlavních SLM v roce 2026: Phi-4-mini, Gemma 3n, Qwen 3, SmolLM2, DeepSeek
- Jak interpretovat benchmarky: MMLU, HumanEval, MATH, GPQA
- Jaký model zvolit pro kódování, uvažování, chat a klasifikační úkoly
- Hardware potřebný pro místní odvození u každého modelu
- Jak spustit vlastní benchmarky na vašem případu použití
Co definuje „malý“ jazykový model v roce 2026
Definice „malého“ se postupem času měnila. V roce 2024 „malé“ znamenalo pod 7B parametry. V roce 2026, kdy modely 1B konkurují 13B před dvěma lety, bude prahová hodnota praxe se posunula: považujeme SLM za modely s parametry 10B, které lze spustit na spotřebním hardwaru bez agresivní kvantizace.
| Model | Parametry | Tvůrce | Licence | VRAM (fp16) |
|---|---|---|---|---|
| SmolLM2 | 135 mil. - 1,7 mld | Objímání tváře | Apache 2.0 | 0,3 – 3,5 GB |
| Phi-4-mini | 3,8B | Microsoft | MIT | 7,6 GB |
| Gemma 3n E4B | 4B ef. | Gemma ToS | 8 GB | |
| Qwen 3 (1,7B) | 1,7B | Alibaba | Apache 2.0 | 3,4 GB |
| Qwen 3 (7B) | 7B | Alibaba | Apache 2.0 | 14 GB |
| DeepSeek-R1 (7B) | 7B destilovaná | DeepSeek | MIT | 14 GB |
| Mistral 7B v0.3 | 7B | Mistral AI | Apache 2.0 | 14 GB |
| Lama 3.2 (3B) | 3B | Půl | Lamy 3.2 | 6 GB |
Benchmarky: Jak je správně interpretovat
Akademické benchmarky jsou užitečné, ale měly by být vykládány opatrně. Model, který vyniká na MMLU (všeobecné znalosti) mohou být nedostatečné pro generování čistého kódu Pythonu. Zde jsou hlavní benchmarky a to, co skutečně měří.
Klíčová akademická měřítka
# Confronto benchmark principali (valori approssimativi, Febbraio 2026)
benchmarks = {
"Phi-4-mini (3.8B)": {
"MMLU": 72.8, # Conoscenza generale, 57 soggetti
"HumanEval": 62.3, # Completamento codice Python
"MATH": 70.5, # Ragionamento matematico (AMC/AIME)
"GPQA Diamond": 36.2, # PhD-level science questions
"MT-Bench": 7.8, # Conversazione multi-turno (1-10)
},
"Gemma 3n E4B": {
"MMLU": 74.1,
"HumanEval": 58.7,
"MATH": 65.3,
"GPQA Diamond": 34.8,
"MT-Bench": 8.1,
"LMArena Elo": 1312, # Confronto umano (stile chess ELO)
},
"Qwen 3 7B": {
"MMLU": 78.3,
"HumanEval": 72.1,
"MATH": 78.9,
"GPQA Diamond": 41.2,
"MT-Bench": 8.4,
},
"DeepSeek-R1 7B distilled": {
"MMLU": 75.2,
"HumanEval": 68.4,
"MATH": 82.3, # Eccelle nel ragionamento matematico
"GPQA Diamond": 38.7,
"MT-Bench": 8.0,
},
# Per confronto: modelli piu grandi
"Mixtral 8x7B (46B)": {
"MMLU": 71.4, # Phi-4-mini (3.8B) lo supera!
"HumanEval": 60.1,
"MATH": 66.8,
},
}
# NOTA IMPORTANTE: i benchmark non misurano tutto
# - Hallucination rate (frequenza di invenzioni plausibili)
# - Instruction following su task complessi
# - Context handling su documenti lunghi
# - Velocita di inferenza su hardware specifico
# - Consumo energetico
Jak vytvořit měřítko pro váš případ použití
from lm_eval.api.model import LM
from lm_eval import evaluator
import json
def benchmark_slm_for_custom_task(
model_name: str,
task_examples: list[dict],
metric_fn: callable
) -> dict:
"""
Benchmark di un SLM su un task personalizzato.
task_examples: lista di {"input": str, "expected": str}
metric_fn: funzione che restituisce float 0-1 (accuracy, F1, etc.)
"""
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.float16,
device_map="auto"
)
results = []
total_time = 0
for example in task_examples:
import time
start = time.time()
inputs = tokenizer(example["input"], return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=256,
temperature=0.1, # bassa temperatura per task deterministici
do_sample=False
)
elapsed = time.time() - start
generated = tokenizer.decode(
outputs[0][inputs.input_ids.shape[1]:],
skip_special_tokens=True
)
score = metric_fn(generated, example["expected"])
results.append({
"input": example["input"][:50],
"expected": example["expected"],
"generated": generated,
"score": score,
"latency_ms": elapsed * 1000
})
total_time += elapsed
avg_score = sum(r["score"] for r in results) / len(results)
avg_latency = sum(r["latency_ms"] for r in results) / len(results)
return {
"model": model_name,
"task_score": round(avg_score, 4),
"avg_latency_ms": round(avg_latency, 1),
"total_examples": len(results),
"hardware": torch.cuda.get_device_name(0) if torch.cuda.is_available() else "CPU",
"detail": results
}
# Esempio di uso per classificazione del sentiment in italiano
sentiment_examples = [
{"input": "Classifica il sentiment: 'Il prodotto e eccellente!' -> ", "expected": "positivo"},
{"input": "Classifica il sentiment: 'Esperienza terribile, non lo raccomando' -> ", "expected": "negativo"},
# ... 100 esempi dal proprio dataset reale ...
]
def exact_match(generated: str, expected: str) -> float:
return 1.0 if expected.lower() in generated.lower() else 0.0
# Eseguire il benchmark su piu modelli
for model in ["microsoft/phi-4-mini", "Qwen/Qwen3-7B", "google/gemma-3n-e4b"]:
result = benchmark_slm_for_custom_task(model, sentiment_examples, exact_match)
print(f"{model}: score={result['task_score']}, latency={result['avg_latency_ms']}ms")
Hardwarové požadavky: Co potřebujete ke spuštění SLM
Jednou z hlavních výhod SLM je, že běží na spotřebním hardwaru. Zde je praktický návod.
| Železářské zboží | VRAM / RAM | Kompatibilní modely (fp16) | Tokeny/s (přibližně) |
|---|---|---|---|
| MacBook M3 Pro (18 GB) | 18 GB sjednocených | Phi-4-mini, Gemma 3n, Llama 3.2 3B | 25-40 tok/s |
| MacBook M4 Max (48 GB) | 48 GB sjednocených | Vše 7B, lama 3 8B | 60-80 tok/s |
| RTX 4060 (8 GB) | 8GB VRAM | Phi-4-mini q4, SmolLM2 1,7B | 35-55 tok/s |
| RTX 4070 (12 GB) | 12GB VRAM | Phi-4-mini fp16, Qwen 3 7B q4 | 50-70 tok/s |
| RTX 4090 (24 GB) | 24GB VRAM | Vše 7B fp16, Llama 3 8B | 100-130 tok/s |
| Server A100 (80 GB) | 80 GB VRAM | Modely do 40B | 200-400 tok/s |
# Verificare se un modello entra nella VRAM disponibile
def check_model_fits_vram(
model_name: str,
quantization: str = "fp16",
safety_margin: float = 0.85
) -> dict:
"""
Stima il VRAM necessario e verifica la compatibilita.
quantization: 'fp32', 'fp16', 'int8', 'int4' (gguf q4)
"""
import torch
# Stima parametri del modello
param_counts = {
"microsoft/phi-4-mini": 3.8e9,
"google/gemma-3n-E4B": 4.0e9,
"Qwen/Qwen3-7B": 7.6e9,
"deepseek-ai/DeepSeek-R1-Distill-Qwen-7B": 7.6e9,
"meta-llama/Llama-3.2-3B": 3.2e9,
"HuggingFaceTB/SmolLM2-1.7B": 1.7e9,
}
bytes_per_param = {
"fp32": 4, "fp16": 2, "bf16": 2, "int8": 1, "int4": 0.5
}
params = param_counts.get(model_name, 0)
if params == 0:
return {"error": f"Model {model_name} not in database"}
model_vram_gb = (params * bytes_per_param.get(quantization, 2)) / 1e9
overhead_gb = 1.5 # KV cache + activations
total_vram_gb = model_vram_gb + overhead_gb
available_vram = 0
if torch.cuda.is_available():
available_vram = torch.cuda.get_device_properties(0).total_memory / 1e9
elif hasattr(torch.backends, 'mps') and torch.backends.mps.is_available():
# Apple Silicon: usare la memoria di sistema disponibile
import psutil
available_vram = psutil.virtual_memory().available / 1e9 * 0.7
fits = total_vram_gb <= available_vram * safety_margin
return {
"model": model_name,
"quantization": quantization,
"model_vram_gb": round(model_vram_gb, 2),
"total_with_overhead_gb": round(total_vram_gb, 2),
"available_gb": round(available_vram, 2),
"fits": fits,
"recommendation": "OK" if fits else
f"Insufficiente: prova int4 o un modello piu piccolo"
}
# Test
for model in ["microsoft/phi-4-mini", "Qwen/Qwen3-7B"]:
for quant in ["fp16", "int8", "int4"]:
result = check_model_fits_vram(model, quant)
status = "OK" if result["fits"] else "NO"
print(f"[{status}] {model} ({quant}): {result['total_with_overhead_gb']:.1f}GB needed")
Jaký SLM si vybrat pro svůj případ použití
Výběr modelu závisí především na úkolu. Zde je praktická příručka založená na benchmarky a komunitní testování v roce 2026.
Doporučení pro případ použití
- Kódování (Python, TypeScript, SQL): Qwen 3 7B nebo DeepSeek-R1 7B – nejlepší ve své třídě za 7B
- Matematicko-logické uvažování: DeepSeek-R1 7B destilováno – obrovské zlepšení oproti základu
- Chat a obecný asistent: Phi-4-mini nebo Gemma 3n — nejlepší poměr kvalita/velikost
- Jednoduchá klasifikace a NLU: SmolLM2 1.7B — již nad prahem pro mnoho úkolů
- Mobil na zařízení: Gemma 3n E4B (optimalizováno pro NPU) nebo SmolLM2 135M
- Italský RAG: Phi-4-mini (vícejazyčný forte) nebo Mistral 7B v0.3
Závěry
Rok 2026 definitivně potvrdil éru malých jazykových modelů: modely 3-7B s správná architektura a správná tréninková data porážejí modely 10x starší než dva roky před. Na výběr už není „LLM vs SLM“, ale „který SLM pro který úkol na jakém hardwaru“.
Další článek v sérii podrobně porovnává Phi-4-mini a Gemma 3n: dvě možnosti nejzajímavější pro okrajové nasazení v roce 2026, s paralelními srovnávacími testy kódování, logické a konverzační úkoly v italštině a angličtině.
Řada: Small Language Models
- článek 1 (tento): SLM v roce 2026 – Přehled a benchmark
- Článek 2: Phi-4-mini vs Gemma 3n – podrobné srovnání
- Článek 3: Doladění pomocí LoRA a QLoRA
- Článek 4: Kvantování pro Edge – GGUF, ONNX, INT4
- Článek 5: Ollama - SLM lokálně za 5 minut







