DEV-AI
Gemma 3 · Google DeepMind Publié le 18 mai 2026 Multimodal · 128K tokens

Gemma 3 en Python 2026 :
multimodal, 128K contexte, Ollama et fine-tuning

Google DeepMind a sorti Gemma 3 en mars 2025 : 1B à 27B paramètres, vision intégrée dès le 4B, fenêtre de contexte 128K, distillé depuis Gemini 2.0. Le 4B surpasse Gemma 2 27B — et le 27B rivalise avec Gemini 1.5 Pro. Guide technique complet avec architecture, code Python et benchmarks sourcés.

Gemma Terms of Use · Python ≥ 3.10 · CUDA 12.x · 1B · 4B · 12B · 27B

TL;DR — Gemma 3 en 5 points

  • Hybrid attention 5:1 — 5 couches locales (fenêtre 1024 tokens) pour 1 couche globale (128K). KV-cache réduit de ~60% à <15% vs attention globale seule.
  • Vision dès le 4B — encodeur SigLIP 400M (gelé), images 896×896, 256 tokens/image, pan&scan pour hautes résolutions. 1B est texte-only.
  • 4B > Gemma 2 27B — gain d'efficacité par distillation depuis Gemini 2.0. Le 27B atteint des performances comparables à Gemini 1.5 Pro selon le rapport technique officiel.
  • Ollama natifgemma3:4b à gemma3:27b avec support multimodal via images=[]. Fine-tuning via Unsloth.
  • Licence ≠ Apache 2.0 — Gemma Terms of Use autorise l'usage commercial mais interdit la distillation et se réserve une révocation. Plus restrictif que Qwen2.5 (Apache 2.0 variantes principales) ou Llama 3 (Meta Llama License, plus permissive sur la distillation).

1. Pourquoi Gemma 3 change la donne

En mars 2025, Google DeepMind a publié Gemma 3 avec une promesse inhabituelle : un modèle 4B qui surpasse son propre modèle 27B de la génération précédente. Ce n'est pas un effet de benchmark cherry-picking — c'est le résultat d'une combinaison de trois innovations architecturales majeures appliquées simultanément : une attention hybride locale/globale qui démultiplie l'efficacité mémoire, une distillation depuis Gemini 2.0 qui transfère la capacité d'un modèle frontier vers des tailles inférieures, et un tokenizer Gemini à 262K tokens qui améliore drastiquement la gestion des langues non-latines et du code.

Pour le développeur Python, l'implication pratique est directe : un modèle multimodal (texte + images) de 4B paramètres, fonctionnant avec 4 Go de VRAM via Ollama, capable de traiter des contextes de 128 000 tokens — là où Gemma 2 s'arrêtait à 8 000. Si vous avez déjà eu besoin d'analyser un PDF complet, de coder sur une grande base de code ou d'extraire des informations d'une longue conversation, Gemma 3 est une rupture de niveau par rapport à la génération précédente à la même taille.

Note 2026 — Gemma 4 est disponible

Google a sorti Gemma 4 depuis la publication de Gemma 3. Cet article se concentre sur Gemma 3, qui reste très utilisé dans l'écosystème Ollama et Unsloth et particulièrement pertinent pour les workflows multimodaux locaux — la majorité des intégrations, notebooks et fine-tunes disponibles ciblent encore Gemma 3. Pour Gemma 4, consulter la documentation Google DeepMind.

Rapport technique officiel

Toutes les données architecturales et benchmarks de cet article proviennent du rapport technique officiel Gemma 3 (arXiv:2503.19786, Google DeepMind, mars 2025) et du blog Hugging Face. Les chiffres de performance sont ceux du modèle instruction-tuned (-it), sauf mention contraire.

2. Architecture — hybrid attention et distillation Gemini

Gemma 3 est un transformer decoder-only avec Grouped-Query Attention (GQA). Ses différences architecturales par rapport à Gemma 2 sont substantielles.

Tokenizer Gemini 2.0 — Gemma 3 adopte le tokenizer de Gemini 2.0 (vocabulaire de 262 144 tokens, SentencePiece avec encodage byte-level). Vs le tokenizer de Gemma 2 (~256K tokens), l'impact principal est une meilleure compression des langues CJK (chinois, japonais, coréen), des langues à alphabet non-latin, et du code. Résultat : moins de tokens pour la même séquence dans ces langues, ce qui se traduit directement en contexte utile plus long et en inférence moins coûteuse.

Distillation depuis Gemini 2.0 — 1 à 3% des tokens d'entraînement sont utilisés pour une distillation de connaissance depuis un modèle Gemini 2.0. Cette technique, combinée au pré-entraînement massif (2T tokens pour le 1B, 14T pour le 27B), explique le saut de qualité par rapport à la taille de paramètres. Le 4B absorbe des capacités de raisonnement que son nombre de paramètres ne permettrait pas d'acquérir par pré-entraînement seul.

QK-norm à la place du soft-capping — Gemma 2 utilisait un logit soft-capping pour stabiliser l'entraînement. Gemma 3 le remplace par une normalisation QK (Query-Key normalization avec RMSNorm), ce qui donne un training plus stable à large batch size et permet d'allonger le contexte sans instabilité numérique.

Les dimensions architecturales exactes selon le rapport technique officiel :

Dimension1B4B12B27B
Couches26344862
Hidden size2 3042 5603 8405 376
Attention heads8162432
GQA key-value groups44816
FFN intermediate9 2169 21614 08021 760
Contexte max32K128K128K128K
Tokens d'entraînement2T4T12T14T

3. La famille Gemma 3 — 1B à 27B

Cet article couvre les quatre tailles principales : 1B, 4B, 12B et 27B. Depuis la sortie initiale, des variantes plus petites comme 270M sont également disponibles dans l'écosystème Ollama pour des cas d'usage edge et embarqué.

Gemma 3 1B — texte-only, contexte 32K

Le plus petit de la famille. Texte uniquement, contexte 32K. Tourne sur CPU puissant ou 2 Go de VRAM. Idéal pour l'edge computing, les appareils mobiles (Gemma 3N), ou les cas d'usage où la latence prime sur la qualité. Base d'entraînement : 2T tokens.

Gemma 3 4B — multimodal, 128K, sweet spot

Le modèle recommandé pour la plupart des usages. Surpasse Gemma 2 27B sur les benchmarks instruction-following. Vision (SigLIP), contexte 128K, 4 Go de VRAM en Q4. Pour la grande majorité des tâches : extraction, analyse, Q&A sur documents, code. Base : 4T tokens.

Gemma 3 12B — multimodal, 128K, qualité renforcée

Compromis qualité/coût pour les applications exigeantes. Vision, 128K, 8-12 Go de VRAM en Q4. Raisonnement plus robuste que le 4B pour les tâches complexes (math, code avancé, analyse multi-documents). Base : 12T tokens.

Gemma 3 27B — multimodal, 128K, niveau Gemini 1.5 Pro

Le plus capable. Performances comparables à Gemini 1.5 Pro selon le rapport technique. 16-24 Go de VRAM en Q4. Pour la production qui demande le maximum de qualité sur des tâches ouvertes. Base : 14T tokens.

4. Hybrid attention 5:1 — l'innovation clé

C'est l'innovation architecturale qui rend le contexte 128K viable sur GPU grand public. Comprendre pourquoi nécessite de revenir au problème fondamental de l'attention longue-distance.

Le coût quadratique de l'attention globale

L'attention standard de type "full global" calcule les relations entre tous les paires de tokens. Le coût est O(n²) en mémoire pour le KV-cache : doubler la longueur de séquence quadruple la mémoire d'attention. Pour 128K tokens avec attention purement globale sur le 27B, le KV-cache occuperait une fraction prohibitive de la VRAM.

Gemma 3 résout ce problème par une alternance structurée :

Ce ratio 5:1 réduit l'occupation du KV-cache de ~60% (modèle global-only) à moins de 15% de la VRAM totale — sans sacrifier la capacité à capturer les dépendances à distance, puisque les couches globales s'en chargent.

Le RoPE est configuré différemment selon le type de couche : base de fréquence 10k pour les couches locales (contexte court), 1M pour les couches globales (contexte long), avec un facteur de rescaling ×8 appliqué. Cette asymétrie permet au modèle d'utiliser efficacement ses embeddings positionnels sur les deux échelles de contexte.

Comparaison avec Flash Attention 2

Flash Attention 2 (Dao et al.) réduit la complexité computationnelle de l'attention globale en IO-bound vs compute-bound. L'hybrid attention de Gemma 3 réduit la complexité mémoire structurellement — ce sont deux approches complémentaires. En pratique, Ollama et Transformers peuvent activer FA2 sur Gemma 3 pour cumuler les deux gains.

5. Vision multimodale — SigLIP encoder

Les modèles Gemma 3 4B, 12B et 27B intègrent un encodeur visuel SigLIP de 400M paramètres, gelé pendant le fine-tuning du LLM. SigLIP (Sigmoid Loss for Language-Image Pre-Training, Zhai et al., 2023) utilise une fonction de perte sigmoid binaire plutôt que contrastive softmax, ce qui le rend plus stable et efficace à entraîner.

Pipeline de traitement d'images

Redimensionnement — toute image est redimensionnée à 896×896 pixels (résolution native de SigLIP dans la configuration Gemma 3).

Encodage — SigLIP produit un embedding par patch. Un pooling 4×4 réduit ensuite la représentation à 256 tokens image. Ces tokens sont concaténés avec les tokens texte dans la séquence d'entrée du LLM.

Pan & Scan pour la haute résolution — pour des images de résolution élevée ou de format très large/haut, Gemma 3 applique un mécanisme adaptatif : l'image originale est découpée en tuiles (chacune redimensionnée à 896×896), chaque tuile est encodée séparément, et les embeddings sont concaténés. Une représentation "thumbnail" de l'image complète est également encodée à 896×896 et ajoutée. Ce mécanisme permet de traiter des captures d'écran, des documents scannés et des images médicales sans perte excessive de détail.

Attention pour les images — contrairement à l'attention causale des tokens texte, les tokens image bénéficient d'une attention bidirectionnelle non-causale entre eux. Chaque token image peut attendre tous les autres tokens image (pas de masque causal), ce qui améliore la compréhension spatiale.

6. Installation Ollama

bash
# Installer Ollama (Linux / macOS)
curl -fsSL https://ollama.com/install.sh | sh

# Télécharger un modèle Gemma 3
ollama pull gemma3:1b    # ~1.5 Go — texte-only, 32K
ollama pull gemma3:4b    # ~2.5 Go — multimodal, 128K (recommandé)
ollama pull gemma3:12b   # ~7 Go  — multimodal, 128K
ollama pull gemma3:27b   # ~16 Go — multimodal, 128K

# Tester en ligne de commande
ollama run gemma3:4b "Explique l'attention hybride en 3 phrases."

# Installer la librairie Python Ollama
pip install ollama

7. API Python — texte avec Ollama

python
import ollama

# Appel simple
response = ollama.chat(
    model="gemma3:4b",
    messages=[
        {"role": "user", "content": "Qu'est-ce que le Rotary Position Embedding ?"}
    ]
)
print(response.message.content)


# Conversation multi-tours avec contexte système
messages = [
    {
        "role": "system",
        "content": "Tu es un expert Python. Réponds en français, de façon concise."
    },
    {"role": "user", "content": "Explique les générateurs Python."},
]

response = ollama.chat(model="gemma3:4b", messages=messages)
messages.append({"role": "assistant", "content": response.message.content})
messages.append({"role": "user", "content": "Donne un exemple avec yield from."})

response = ollama.chat(model="gemma3:4b", messages=messages)
print(response.message.content)


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


# API compatible OpenAI (port 11434)
from openai import OpenAI

client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
resp = client.chat.completions.create(
    model="gemma3:4b",
    messages=[{"role": "user", "content": "Bonjour Gemma 3"}]
)
print(resp.choices[0].message.content)

8. API Python — images et multimodal

Gemma 3 4B, 12B et 27B acceptent des images via Ollama. Le modèle 1B est texte-only.

python
import ollama
import json

# Le SDK Python Ollama accepte directement un chemin de fichier
# (le SDK gère la conversion — le REST attend du base64)

# Décrire une image
response = ollama.chat(
    model="gemma3:4b",
    messages=[{
        "role": "user",
        "content": "Décris cette image en détail.",
        "images": ["screenshot.png"],   # chemin local, URL ou bytes
    }]
)
print(response.message.content)


# Extraire des données structurées depuis une image
response = ollama.chat(
    model="gemma3:12b",
    messages=[{
        "role": "user",
        "content": """Analyse ce tableau et retourne un JSON avec :
{
  "colonnes": [...],
  "lignes": [[...], ...],
  "total": ...
}
Retourne uniquement le JSON valide.""",
        "images": ["tableau.png"],
    }]
)
data = json.loads(response.message.content)


# Comparer deux images
response = ollama.chat(
    model="gemma3:12b",
    messages=[{
        "role": "user",
        "content": "Quelles sont les différences entre ces deux images ?",
        "images": ["before.png", "after.png"],
    }]
)


# Si tu passes par le REST API directement : base64 requis
import base64, requests
img_b64 = base64.b64encode(open("screenshot.png", "rb").read()).decode()
requests.post("http://localhost:11434/api/chat", json={
    "model": "gemma3:4b",
    "messages": [{"role": "user", "content": "Décris.", "images": [img_b64]}]
})

Cas d'usage vision avec Gemma 3

Analyse de captures d'écran d'erreurs, extraction de tableaux depuis des PDFs scannés, description d'images pour accessibilité, contrôle qualité visuel en production, analyse de graphiques et dashboards. Le mécanisme pan&scan permet d'analyser des documents entiers (A4 haute résolution) sans perte de lisibilité sur le texte fin.

9. Hugging Face Transformers

Pour un contrôle plus fin hors Ollama — quantization personnalisée, fine-tuning, intégration dans un pipeline HF — utiliser Transformers directement. Deux classes différentes selon l'usage :

python
# --- Modèle texte-only (1B, ou 4B/12B/27B sans vision) ---
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

model_id = "google/gemma-3-4b-it"

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,   # bfloat16 recommandé — qualité dégradée avec fp16
    device_map="auto",
    attn_implementation="sdpa",   # ou "flash_attention_2" si installé
)

messages = [
    {"role": "user", "content": "Explique la hybrid attention en 3 phrases."}
]
inputs = tokenizer.apply_chat_template(
    messages, return_tensors="pt", return_dict=True, add_generation_prompt=True
).to(model.device)

with torch.no_grad():
    output = model.generate(**inputs, max_new_tokens=256, do_sample=False)

response = tokenizer.decode(
    output[0][inputs["input_ids"].shape[-1]:], skip_special_tokens=True
)
print(response)


# --- Modèle multimodal (4B / 12B / 27B avec vision) ---
from transformers import Gemma3ForConditionalGeneration, AutoProcessor
from PIL import Image

model_id = "google/gemma-3-4b-it"

processor = AutoProcessor.from_pretrained(model_id)
model = Gemma3ForConditionalGeneration.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,
    device_map="auto",
)

image = Image.open("diagram.png")

messages = [{
    "role": "user",
    "content": [
        {"type": "image", "image": image},
        {"type": "text", "text": "Décris ce diagramme et explique les relations entre les composants."},
    ]
}]

inputs = processor.apply_chat_template(
    messages, add_generation_prompt=True,
    tokenize=True, return_dict=True, return_tensors="pt"
).to(model.device, dtype=torch.bfloat16)

with torch.no_grad():
    output = model.generate(**inputs, max_new_tokens=512)

response = processor.decode(
    output[0][inputs["input_ids"].shape[-1]:], skip_special_tokens=True
)
print(response)

bfloat16 obligatoire pour Gemma 3

Google déconseille explicitement fp16 pour Gemma 3 — la précision en est dégradée. Toujours utiliser torch_dtype=torch.bfloat16. Sur GPU sans support natif bfloat16 (pré-Ampere), utiliser load_in_4bit=True via bitsandbytes plutôt que fp16.

10. Contexte 128K — cas d'usage concrets

128 000 tokens correspondent approximativement à 100 000 mots — soit un roman entier, une base de code de taille moyenne, ou plusieurs heures de transcription. Pour les modèles 4B, 12B et 27B, ce contexte est natif (le 1B est limité à 32K).

python
import ollama
from pathlib import Path

# Analyser un fichier de code entier (~10 000 lignes)
code = Path("large_codebase.py").read_text()

response = ollama.chat(
    model="gemma3:12b",
    messages=[{
        "role": "user",
        "content": f"""Analyse ce code Python et identifie :
1. Les patterns architecturaux utilisés
2. Les potentiels problèmes de performance
3. Les dépendances circulaires éventuelles

Code :
{code}"""
    }],
    options={"num_ctx": 32768}  # Spécifier le contexte si > 8K tokens
)


# Q&A sur un long document (rapport annuel, contrat, documentation)
document = Path("rapport_annuel.txt").read_text()

messages = [
    {"role": "system", "content": "Tu es un assistant d'analyse documentaire. Réponds uniquement à partir du document fourni."},
    {"role": "user", "content": f"Document :\n\n{document}\n\nQuestion : Quel est le chiffre d'affaires 2024 et sa progression ?"},
]

response = ollama.chat(
    model="gemma3:4b",
    messages=messages,
    options={"num_ctx": 65536}
)

num_ctx — paramètre critique avec Ollama

Ollama alloue par défaut un contexte de 2 048 tokens, même pour des modèles capables de 128K. Pour exploiter le long contexte, toujours spécifier options={"num_ctx": N} où N est la longueur en tokens estimée de votre prompt + réponse. Chaque token supplémentaire de contexte alloué consomme de la VRAM — adapter à vos besoins réels.

11. Fine-tuning avec Unsloth

Unsloth supporte Gemma 3 (1B, 4B, 12B, 27B) via ses modèles pré-optimisés sur le Hub. Le pipeline est identique à celui décrit dans notre guide Unsloth complet, avec quelques spécificités Gemma 3.

python
from unsloth import FastLanguageModel
from unsloth.chat_templates import get_chat_template

# Chargement — utiliser les modèles unsloth/ pour un chargement optimisé
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name="unsloth/gemma-3-4b-it",   # ou gemma-3-12b-it, gemma-3-27b-it
    max_seq_length=8192,
    dtype=None,              # auto-detect bfloat16
    load_in_4bit=True,
)

# Template de chat Gemma 3
tokenizer = get_chat_template(tokenizer, chat_template="gemma-3")

# Configuration LoRA
model = FastLanguageModel.get_peft_model(
    model,
    r=16,
    target_modules=[
        "q_proj", "k_proj", "v_proj", "o_proj",
        "gate_proj", "up_proj", "down_proj",
    ],
    lora_alpha=16,
    lora_dropout=0,
    bias="none",
    use_gradient_checkpointing="unsloth",
    random_state=42,
)

model.print_trainable_parameters()
# trainable params: ~84M / 4B total → ~2%


# Entraînement avec SFTTrainer (même pattern qu'avec Llama)
from trl import SFTTrainer
from transformers import TrainingArguments
from unsloth import is_bfloat16_supported

trainer = SFTTrainer(
    model=model,
    processing_class=tokenizer,
    train_dataset=dataset,
    dataset_text_field="text",
    max_seq_length=8192,
    args=TrainingArguments(
        per_device_train_batch_size=2,
        gradient_accumulation_steps=4,
        num_train_epochs=3,
        learning_rate=2e-4,
        bf16=is_bfloat16_supported(),
        fp16=not is_bfloat16_supported(),
        optim="adamw_8bit",
        output_dir="gemma3-finetuned",
    ),
)
trainer.train()

# Export GGUF pour Ollama
model.save_pretrained_gguf("gemma3-gguf", tokenizer, quantization_method="q4_k_m")

12. VRAM par taille et configuration

ModèleInférence Q4 (Ollama)Fine-tuning QLoRA UnslothGPU minimum
Gemma 3 1B~2 Go~3-4 GoRTX 3060 8 Go
Gemma 3 4B~4 Go~6-8 GoRTX 3080 10 Go
Gemma 3 12B~8-10 Go~12-16 GoRTX 4090 24 Go
Gemma 3 27B~16-20 Go<22 Go (Unsloth)RTX 4090 24 Go / A100
Gemma 3 27B (bfloat16)~54 Go2× A100 40 Go

Le fine-tuning du 27B en moins de 22 Go est rendu possible par Unsloth (gradient checkpointing async + quantization 4-bit NF4). Sans Unsloth, le même entraînement nécessiterait un A100 80 Go.

13. Benchmarks — chiffres officiels (Gemma 3 27B-IT)

Source : rapport technique Gemma 3, arXiv:2503.19786, mars 2025. Tous les scores concernent le modèle instruction-tuned 27B sauf mention contraire.

BenchmarkGemma 3 27B-ITGemma 3 4B-ITRéférence
MMLU Pro67,5%Raisonnement multi-domaines
GPQA Diamond42,4%Questions experts (PhD-level)
HumanEval87,8%Génération de code Python
GSM8K95,9%Arithmétique et raisonnement
BIG-Bench Hard87,6%Raisonnement difficile
IFEval90,4%Instruction following
MMMU (multimodal)64,9%Compréhension multimodale
ChartQA78,0%Analyse de graphiques

Le claim Gemma 3 4B > Gemma 2 27B

Google affirme que Gemma 3 4B-IT surpasse Gemma 2 27B-IT sur les benchmarks d'instruction-following (IFEval, MMLU). Ce gain est attribué à la combinaison distillation Gemini + meilleur tokenizer + hybrid attention. Il est reproductible sur les benchmarks publics — même si les benchmarks LLM sont toujours à interpréter dans leur contexte spécifique (distribution des questions, méthode d'évaluation).

14. Gemma 3 vs Llama 3 vs Qwen2.5

CritèreGemma 3 4BLlama 3.2 3BQwen2.5 7B
Contexte max128K128K128K
MultimodalOui (SigLIP)Non (texte-only)Non (texte)
VRAM inférence Q4~4 Go~2,5 Go~5 Go
Langues supportées140+~829+
LicenceGemma ToUMeta Llama LicenseApache 2.0 (variantes principales)
Fine-tuning distillationInterdit (ToU)AutoriséAutorisé
Disponible sur OllamaOuiOuiOui
Unsloth supportOuiOuiOui
Distillé depuisGemini 2.0NonNon

Pour les applications multilingues : Gemma 3 est le choix évident avec 140+ langues et le tokenizer Gemini. Pour les applications avec contraintes de licence strictes : Llama 3 (Meta Llama License, plus permissive que Gemma sur certains usages, mais pas équivalente à Apache 2.0) ou Qwen2.5 (Apache 2.0 sur les variantes principales) laissent plus de latitude juridique. Pour le multimodal compact : Gemma 3 4B reste l'option la plus équilibrée sur le marché actuellement.

15. Licence — Gemma Terms of Use décryptée

Gemma 3 n'est pas sous Apache 2.0 — c'est une erreur courante. La licence applicable est les Gemma Terms of Use, propriétaires à Google. Voici ce qu'elles permettent et interdisent concrètement.

Autorisé — usage commercial (construire des produits, faire payer des utilisateurs, déployer en SaaS), modification du modèle, distribution des weights modifiés, déploiement sur cloud ou infrastructure propre.

Interdit — utiliser Gemma 3 pour distiller d'autres modèles (entraîner un modèle concurrent sur les outputs de Gemma 3), usage dans des services de conseil médical, juridique ou financier non supervisé (prohibited use policy), retrait des attributions Google.

Clause de révocation — Google se réserve le droit de révoquer l'accès à Gemma 3 si des violations des Terms of Use sont détectées. Cette clause, combinée à l'interdiction de distillation, distingue Gemma des licences comme Apache 2.0. D'autres licences (Meta Llama License incluse) contiennent aussi des conditions de terminaison en cas de violation — la différence réside dans le périmètre des restrictions et leur symétrie avec les droits accordés.

Choisir sa licence en connaissance de cause

Pour un usage personnel ou un prototype commercial : Gemma 3 est parfaitement viable. Pour un produit commercial critique avec contraintes légales strictes, une revue par un juriste spécialisé IP est recommandée. Si la liberté de licence est impérative, Llama 3 (Meta Llama License — plus permissive que Gemma sur la distillation et certains usages, mais avec ses propres conditions de terminaison) ou Qwen2.5 (Apache 2.0 sur les variantes principales) offrent plus de latitude sur ces points précis. Gemma 3 est plus ouvert que GPT-4 ou Claude, mais moins libre que ces deux alternatives.

Articles liés

Fine-tuning optimisé

Unsloth Python 2026 : fine-tuning LLM jusqu'à 2× plus rapide avec beaucoup moins de VRAM

Théorie fondamentale

Fine-tuning LoRA & QLoRA Python 2026 : théorie, code et benchmarks avec Llama 3

Déploiement local

Ollama : héberger un LLM localement en 2026 — guide complet

RAG avec Ollama

RAG avec Ollama en Python : connectez vos documents à un LLM local

16. FAQ

Quelle différence entre Gemma 3 1B, 4B, 12B et 27B ?

Le 1B est texte-only avec contexte 32K — idéal pour l'edge ou la latence. Les 4B, 12B et 27B sont multimodaux (vision + texte) avec contexte 128K. Le 4B surpasse Gemma 2 27B sur les benchmarks instruction-following. Le 27B atteint des performances comparables à Gemini 1.5 Pro selon le rapport technique officiel. Pour la plupart des usages, le 4B est le sweet spot : multimodal, 128K, 4 Go de VRAM en Q4.

Gemma 3 est-il vraiment open source ?

Non au sens strict. Gemma 3 est sous Gemma Terms of Use (propriétaire Google), pas Apache 2.0. L'usage commercial est autorisé, mais il est interdit de l'utiliser pour distiller d'autres modèles, et Google se réserve le droit de révoquer l'accès. Plus permissif que GPT-4 ou Claude, mais moins libre que Llama 3 (Meta Llama License, plus permissive que Gemma sur certains usages, mais pas équivalente à Apache 2.0) ou Qwen2.5 (Apache 2.0 pour les variantes principales — vérifier modèle par modèle).

Qu'est-ce que l'hybrid attention 5:1 de Gemma 3 ?

Gemma 3 alterne 5 couches d'attention locale (fenêtre glissante de 1024 tokens, O(n) en mémoire) pour 1 couche d'attention globale (contexte complet jusqu'à 128K). Ce ratio 5:1 réduit l'occupation KV-cache de ~60% (attention globale seule) à moins de 15%, permettant le long contexte sans exploser la VRAM. Les dépendances longue-distance sont capturées par les couches globales (1 sur 6).

Comment Gemma 3 traite-t-il les images ?

Via un encodeur SigLIP de 400M paramètres (gelé). Les images sont redimensionnées à 896×896, puis encodées en 256 tokens image via pooling 4×4. Pour les images haute résolution ou non carrées, le mécanisme pan & scan découpe l'image en tuiles (chacune encodée séparément à 896×896) et ajoute une vue thumbnail. Les tokens image bénéficient d'une attention bidirectionnelle (non causale) entre eux. Le 1B est texte-only.

Peut-on fine-tuner Gemma 3 avec Unsloth ?

Oui. Unsloth supporte Gemma 3 via unsloth/gemma-3-4b-it, unsloth/gemma-3-12b-it et unsloth/gemma-3-27b-it. Utiliser chat_template="gemma-3" dans get_chat_template(). Le fine-tuning du 27B tient dans moins de 22 Go de VRAM avec Unsloth. L'interdiction de distillation dans les Gemma Terms of Use s'applique à l'utilisation des outputs du modèle pour entraîner un autre modèle concurrent — le fine-tuning sur vos propres données est autorisé.

Gemma 3 ou Llama 3 — lequel choisir ?

Choisir Gemma 3 si : multimodal compact (4B vision), support multilingue (140+ langues), performance maximale à petite taille, écosystème Google (Vertex AI, Colab). Choisir Llama 3 si : licence plus permissive que Gemma sur certains usages (Meta Llama License — conditions d'usage avec possibilité de terminaison en cas de violation, mais sans restriction de distillation), écosystème Meta/HF très large. Choisir Qwen2.5 si : Apache 2.0 strict requis sur les variantes principales, ou besoin de performances code/math élevées. Les trois fonctionnent avec Ollama et Unsloth.

Quelle est la date de coupure des données d'entraînement ?

Août 2024 selon le rapport technique officiel Gemma 3 (arXiv:2503.19786). Pour les événements postérieurs à cette date, utiliser RAG (guide RAG avec Ollama) ou le long contexte (128K) pour injecter des documents récents directement dans le prompt.