Gemma 3n: Wie man ausführt & feinabstimmt
Führen Sie Googles neues Gemma 3n lokal mit Dynamic GGUFs auf llama.cpp, Ollama, Open WebUI aus und feinabstimmen Sie es mit Unsloth!
Das multimodale Modell Gemma 3n von Google verarbeitet Bild-, Audio-, Video- und Texteingaben. Verfügbar in den Größen 2B und 4B, unterstützt es 140 Sprachen für Text- und multimodale Aufgaben. Sie können jetzt lokal ausführen und feinabstimmen Gemma-3n-E4B und E2B lokal mit Unsloth.
Feinabstimmung von Gemma 3n mit unserem kostenlosen Colab-Notebook
Gemma 3n hat 32K Kontextlänge, 30s Audioeingang, OCR, automatische Spracherkennung (ASR) und Sprachübersetzung über Prompts.
Ausführungs-TutorialFeinabstimmungs-TutorialFehlerbehebungen + technische Analyse
Unsloth Gemma 3n (Instruct) Uploads mit optimalen Konfigurationen:
Siehe alle unsere Gemma 3n Uploads einschließlich Basis und weiteren Formaten in unserer Sammlung hier.
🖥️ Gemma 3n ausführen
Derzeit wird Gemma 3n nur im Textformat für Inferenz unterstützt.
Wir haben Probleme behoben mit GGUFs, die in Ollama nicht richtig funktionierten. Bitte laden Sie sie erneut herunter, wenn Sie Ollama verwenden.
⚙️ Offiziell empfohlene Einstellungen
Laut dem Gemma-Team sind die offiziell empfohlenen Einstellungen für die Inferenz:
temperature = 1.0, top_k = 64, top_p = 0.95, min_p = 0.0
Temperatur von 1.0
Top_K von 64
Min_P von 0.00 (optional, aber 0.01 funktioniert gut, der llama.cpp-Standard ist 0.1)
Top_P von 0.95
Repetitionsstrafe von 1.0. (1.0 bedeutet deaktiviert in llama.cpp und Transformers)
Chat-Vorlage:
<bos><start_of_turn>user\nHello!<end_of_turn>\n<start_of_turn>model\nHey there!<end_of_turn>\n<start_of_turn>user\nWhat is 1+1?<end_of_turn>\n<start_of_turn>model\nChat-Vorlage mit
\nZeilenumbrüchen gerendert (außer dem letzten)
llama.cpp und andere Inferenz-Engines fügen automatisch ein <bos> hinzu - FÜGEN SIE NICHT ZWEI <bos>-Tokens HINZU! Sie sollten das <bos> beim Prompten des Modells ignorieren!
🦙 Tutorial: Wie man Gemma 3n in Ollama ausführt
Bitte laden Sie die Gemma 3N-Quants erneut herunter oder entfernen Sie die alten über Ollama, da es einige Fehlerbehebungen gibt. Sie können untenstehendes tun, um die alte Datei zu löschen und zu aktualisieren:
Installieren Sie
ollamawenn Sie es noch nicht getan haben!
Führen Sie das Modell aus! Beachten Sie, dass Sie
ollama servein einem anderen Terminal aufrufen können, wenn es fehlschlägt! Wir fügen alle unsere Fehlerbehebungen und empfohlenen Parameter (Temperatur usw.) inparamsin unserem Hugging Face Upload hinzu!
📖 Tutorial: Wie man Gemma 3n in llama.cpp ausführt
Wir möchten zunächst danken Xuan-Son Nguyen von Hugging Face, Georgi Gerganov vom llama.cpp-Team dafür, dass Gemma 3N in llama.cpp funktioniert!
Beschaffen Sie sich das neueste
llama.cppauf GitHub hier. Sie können auch den Build-Anweisungen unten folgen. Ändern Sie-DGGML_CUDA=ONzu-DGGML_CUDA=OFFwenn Sie keine GPU haben oder nur CPU-Inferenz wünschen. Für Apple Mac / Metal-Geräte, setzen Sie-DGGML_CUDA=OFFund fahren Sie dann wie gewohnt fort - Metal-Unterstützung ist standardmäßig aktiviert.
Wenn Sie
llama.cppdirekt zum Laden von Modellen verwenden möchten, können Sie Folgendes tun: (:Q4_K_XL) ist der Quantisierungstyp. Sie können auch über Hugging Face herunterladen (Punkt 3). Dies ist ähnlich zuollama run
ODER laden Sie das Modell herunter via (nach Installation von
pip install huggingface_hub hf_transfer). Sie können Q4_K_M oder andere quantisierte Versionen wählen (wie BF16 Vollpräzision).
Führen Sie das Modell aus.
Bearbeiten Sie
--threads 32für die Anzahl der CPU-Threads,--ctx-size 32768für die Kontextlänge (Gemma 3 unterstützt 32K Kontextlänge!),--n-gpu-layers 99für GPU-Offloading, also wie viele Schichten. Versuchen Sie, dies anzupassen, wenn Ihre GPU keinen Speicher mehr hat. Entfernen Sie es auch, wenn Sie nur CPU-Inferenz haben.Für den Konversationsmodus:
Für den Nicht-Konversationsmodus zum Testen von Flappy Bird:
Denken Sie daran, <bos> zu entfernen, da Gemma 3N automatisch ein <bos> hinzufügt!
🦥 Feinabstimmung von Gemma 3n mit Unsloth
Gemma 3n, wie Gemma 3, hatte Probleme beim Ausführen auf Float16-GPUs wie Tesla T4s in Colab. Sie werden auf NaNs und Unendlichkeiten stoßen, wenn Sie Gemma 3n nicht für Inferenz oder Feinabstimmung patchen. Weitere Informationen unten.
Feinabstimmung von Gemma 3n-E4B mit unserem kostenlosen Colab-Notebook
Audio: Feinabstimmung von Gemma 3n-E4B mit unserem Nur-Audio-Notebook
Vision: Feinabstimmung von Gemma 3n-E4B mit unserem Nur-Vision-Notebook
Wir stellten auch fest, dass Gemma 3n durch seine einzigartige Architektur die versteckten Zustände im Vision-Encoder wiederverwendet, was eine weitere interessante Eigenart im Zusammenhang mit Gradient Checkpointing, das unten beschrieben wird,
darstellt. Unsloth ist das einzige Framework, das auf float16-Maschinen für Gemma 3n Inferenz und Training funktioniert. Das bedeutet, Colab-Notebooks mit kostenlosen Tesla T4-GPUs funktionieren ebenfalls! Insgesamt macht Unsloth das Training von Gemma 3n 1,5x schneller, benötigt 50% weniger VRAM und ermöglicht 4x längere Kontextlängen.
Unsere kostenlosen Gemma 3n Colab-Notebooks sind standardmäßig auf Feinabstimmung der Textschichten eingestellt. Wenn Sie auch Vision- oder Audioschichten feinabstimmen möchten, beachten Sie, dass dies viel mehr VRAM erfordert - über die 15 GB hinaus, die das kostenlose Colab oder Kaggle bereitstellt. Sie können immer noch alle Schichten feinabstimmen, einschließlich Audio und Vision, und Unsloth ermöglicht es Ihnen auch, nur bestimmte Bereiche feinabzustimmen, z. B. nur Vision. Passen Sie es einfach nach Bedarf an:
🏆Bonus-Inhalte
Wir haben auch gehört, dass ihr euch ein Vision-Notebook für Gemma 3 (4B) gewünscht habt, also hier ist es:
Feinabstimmung von Gemma 3 (4B) mit Vision-Unterstützung mithilfe unseres kostenlosen Colab-Notebook
Wenn Sie Kaggle lieben: Google veranstaltet einen Wettbewerb, bei dem das beste mit Gemma 3n und Unsloth feinabgestimmte Modell einen Preis von 10.000 $ gewinnt! Siehe mehr hier.
🐛 Fehlerbehebungen für Gemma 3n
✨GGUF-Probleme & Fixes
Dank Diskussionen von Michael vom Ollama-Team und auch Xuan von Hugging Face gab es zwei Probleme, die wir speziell für GGUFs beheben mussten:
Der
add_shared_kv_layersParameter wurde versehentlich infloat32kodiert,was in Ordnung ist, aber das Decodieren auf Ollamas Seite etwas komplizierter macht - eine einfache Änderung zuuint32 löst das Problem. Pull RequestDer
zur Behebung dieses Problems.per_layer_token_embdDie Schicht sollte in Q8_0 Präzision sein. Alles niedrigere funktioniert nicht richtig und führt in der Ollama-Engine zu Fehlern - um Probleme für unsere Community zu reduzieren, haben wir dies in allen Quants auf Q8_0 gesetzt - leider verwendet dies mehr Speicher. Als eine, Aktualisierung erwähnte Matt, dass wir auch Q4_0, Q4_1, Q5_0, Q5_1 für die Embeddings verwenden können - und wir haben bestätigt, dass es auch in Ollama funktioniert! Das bedeutet erneut, dass die kleineren 2-, 3- und 4-Bit-Quants kleiner in der Größe sind und kein Q8_0 benötigen!
♾️Unendlichkeiten und NaN-Gradienten und -Aktivierungen
Gemma 3n hat, genau wie Gemma 3, Probleme auf FP16-GPUs (z. B. Tesla T4s in Colab).
Unsere vorherigen Fixes für Gemma 3 werden hier diskutiert. Für Gemma 3 stellten wir fest, dass Aktivierungen den maximalen Bereich von float16 von 65504.
Gemma 3N hat dieses Aktivierungsproblem nicht, aber wir sind dennoch auf Unendlichkeiten gestoßen!

Um diesen Unendlichkeiten auf den Grund zu gehen, haben wir die absolut größten Gewichtseinträge für Gemma 3N geplottet und folgendes beobachtet:

Wir stellen fest, dass die grünen Kreuze die Conv2D-Faltungsgewichte sind. Wir können sehen, dass die Magnitude der Conv2D-Schichten im Durchschnitt deutlich größer ist.
Nachfolgend eine Tabelle für Conv2D-Gewichte mit großen Magnituden. Unsere Hypothese ist, dass während einer Conv2D-Operation große Gewichte multipliziert und aufsummiert werden und zufällig den maximalen Bereich von float16 von 65504 überschreiten. Bfloat16 ist in Ordnung, da sein maximaler Bereich 10^38 ist.
msfa.ffn.pw_proj.conv.weight
98.000000
blocks.2.21.attn.key.down_conv.weight
37.000000
blocks.2.32.pw_exp.conv.weight
34.750000
blocks.2.30.pw_exp.conv.weight
33.750000
blocks.2.34.pw_exp.conv.weight
33.750000
🎇Lösung für Unendlichkeiten
Die naive Lösung ist, alle Conv2D-Gewichte auf float32 hochzucasten (falls bfloat16 nicht verfügbar ist). Aber das würde den VRAM-Verbrauch erhöhen. Um dies zu bewältigen, nutzen wir stattdessen autocast on-the-fly, um die Gewichte und Eingaben auf float32 hochzucasten, und führen so die Akkumulation in float32 als Teil der Matrixmultiplikation selbst durch, ohne die Gewichte dauerhaft hochzucasten.
Unsloth ist das einzige Framework, das Gemma 3n Inferenz und Training auf float16-GPUs ermöglicht, sodass Colab-Notebooks mit kostenlosen Tesla T4s funktionieren!
🏁Probleme mit Gradient Checkpointing
Wir fanden, dass Gemma 3N's Vision-Encoder ebenfalls ziemlich einzigartig ist, da er versteckte Zustände wiederverwendet. Das schränkt leider die Verwendung von Unsloth's Gradient Checkpointingein, welches den VRAM-Verbrauch erheblich hätte reduzieren können, da es nicht auf den Vision-Encoder angewendet werden kann.
Wir haben es jedoch trotzdem geschafft, Unsloth's automatischen Compiler zu nutzen,
🌵um Gemma 3N zu optimieren!
Hohe Verluste während der Feinabstimmung
Wir stellten auch fest, dass die Verluste zu Beginn der Feinabstimmung bemerkenswert hoch sind - im Bereich von 6 bis 7 -, aber sie sinken schnell im Laufe der Zeit. Wir vermuten, dass dies an zwei Möglichkeiten liegen könnte:
Es könnte ein Implementierungsproblem geben, aber das ist unwahrscheinlich, da die Inferenz zu funktionieren scheint. Multimodale Modelle zeigen dieses Verhalten scheinbar immer

Feinabstimmung von Gemma 3n mit unserem kostenlosen Colab-Notebook
- wir fanden, dass Llama 3.2 Vision's Verlust bei 3 oder 4 beginnt, Pixtral bei etwa 8, und Qwen 2.5 VL ebenfalls bei ~4. Da Gemma 3N auch Audio einschließt, könnte es den Anfangsverlust verstärken. Aber das ist nur eine Hypothese. Wir fanden auch, dass das Quantisieren von Qwen 2.5 VL 72B Instruct extrem hohe Perplexity-Werte von etwa 30 ergab, aber das Modell funktioniert überraschenderweise gut.
🛠️ Technische Analyse
Gemma 3n : MatFormer Was ist also so besonders an Gemma 3n, fragen Sie? Es basiert auf der Matryoshka Transformer oder MatFormer
Architektur, was bedeutet, dass jede Transformer-Schicht/-Block FFNs von progressiv kleineren Größen einbettet/verschachtelt. Stellen Sie sich das vor wie progressiv kleinere Becher, die ineinander gesteckt werden. Das Training erfolgt so, dass Sie zur Inferenzzeit die gewünschte Größe wählen können und die beste Leistung der größeren Modelle erhalten.
Es gibt auch Per-Layer-Embedding, das zwischengespeichert werden kann, um den Speicherbedarf bei der Inferenz zu reduzieren. Das 2B-Modell (E2B) ist also ein Subnetzwerk innerhalb des 4B (auch bekannt als 5.44B) Modells, das durch Per-Layer-Embedding-Caching und das Überspringen von Audio- und Vision-Komponenten erreicht wird und sich ausschließlich auf Text konzentriert. Die MatFormer-Architektur wird typischerweise mit exponentiell gestaffelten Sub-Modellen trainiert, d. h. mit Größen, S S/2, S/4, S/8 usw. in jeder der Schichten. Während des Trainings werden Eingaben zufällig durch einen der genannten Unterblöcke weitergeleitet, sodass jeder Unterblock die gleiche Chance zum Lernen erhält. Der Vorteil ist, dass Sie zur Inferenzzeit, wenn Sie möchten, dass das Modell 1/4 der ursprünglichen Größe hat, S/4
große Unterblöcke in jeder Schicht auswählen können. Sie können auch Mix and Match usw. in jeder der Schichten. Während des Trainings werden Eingaben zufällig durch einen der genannten Unterblöcke weitergeleitet, sodass jeder Unterblock die gleiche Chance zum Lernen erhält. Der Vorteil ist, dass Sie zur Inferenzzeit, wenn Sie möchten, dass das Modell 1/4 der ursprünglichen Größe hat, wählen, einen Unterblock einer Schicht mit der Größe S/2 eines anderen Layers und S/8

Gemma 3n Modellübersicht kostenlosen Colab-Notebook
Zuletzt aktualisiert
War das hilfreich?

