✨Gemma 3n: Ausführen & Finetunen
Führe Googles neues Gemma 3n lokal mit Dynamic GGUFs auf llama.cpp, Ollama, Open WebUI aus und finetune es mit Unsloth!
Das multimodale Modell Gemma 3n von Google verarbeitet Bild-, Audio-, Video- und Texteingaben. Es ist in den Größen 2B und 4B verfügbar und unterstützt 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.
Feinabstimmen von Gemma 3n mit unserem kostenloses Colab-Notebook
Gemma 3n hat 32K Kontextlänge, 30s Audioeingabe, OCR, automatische Spracherkennung (ASR) und Sprachanalyse/Übersetzung über Prompts.
Ausführungs-TutorialFeinabstimmungs-TutorialFixes + Technische Analyse
Unsloth Gemma 3n (Instruct) Uploads mit optimalen Konfigurationen:
Sehen Sie 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 bei 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 Standard in llama.cpp ist 0,1)
Top_P von 0.95
Repetition Penalty 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 Bugfixes gibt. Sie können Folgendes tun, um die alte Datei zu löschen und sie zu aktualisieren:
Installieren Sie
ollamafalls du es noch nicht getan hast!
Führen Sie das Modell aus! Beachten Sie, dass Sie aufrufen können
ollama servein einem anderen Terminal, falls es fehlschlägt! Wir fügen alle unsere Fixes und vorgeschlagenen Parameter (Temperatur usw.) inparamsin unserem Hugging Face-Upload hinzu!
📖 Tutorial: Wie man Gemma 3n in llama.cpp ausführt
Wir möchten uns zunächst bedanken bei Xuan-Son Nguyen von Hugging Face, Georgi Gerganov vom llama.cpp-Team dafür, dass sie Gemma 3N in llama.cpp zum Laufen gebracht haben!
Holen Sie sich die neueste
llama.cppauf GitHub hier. Sie können auch den unten stehenden Build-Anweisungen folgen. Ändern Sie-DGGML_CUDA=ONzu-DGGML_CUDA=OFFwenn Sie keine GPU haben oder nur CPU-Inferenz wünschen.
Wenn Sie
llama.cppdirekt zum Laden von Modellen kannst du Folgendes tun: (:Q4_K_XL) ist der Quantisierungstyp. Du kannst auch über Hugging Face herunterladen (Punkt 3). Das ist ähnlich wieollama run
ODER lade das Modell herunter über (nach der Installation
pip install huggingface_hub hf_transfer). Du kannst Q4_K_M oder andere quantisierte Versionen wählen (wie BF16 Vollpräzision).
Führe das Modell aus.
Bearbeiten
--threads 32für die Anzahl der CPU-Threads bearbeiten,--ctx-size 32768für Kontextlänge (Gemma 3 unterstützt 32K Kontextlänge!),--n-gpu-layers 99für das GPU-Offloading für wie viele Schichten. Versuchen Sie, es anzupassen, wenn Ihre GPU nicht mehr genügend Speicher hat. Entfernen Sie es auch, wenn Sie nur CPU-Inferenz haben.Für Konversationsmodus:
Für 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.
Feinabstimmen von Gemma 3n-E4B mit unserem kostenloses Colab-Notebook
Audio: Feinabstimmen von Gemma 3n-E4B mit unserem Nur-Audio-Notebook
Vision: Feinabstimmen von Gemma 3n-E4B mit unserem Nur-Vision-Notebook
Wir haben außerdem festgestellt, dass Gemma 3n's einzigartige Architektur versteckte Zustände im Vision-Encoder wiederverwendet, was eine weitere interessante Eigenheit in Verbindung mit Gradient Checkpointing, unten beschrieben, darstellt
Unsloth ist das einzige Framework, das auf Float16-Maschinen für Gemma 3n Inferenz und Training funktioniert. Das bedeutet, dass Colab-Notebooks mit kostenlosen Tesla T4-GPUs ebenfalls funktionieren! Insgesamt macht Unsloth das Gemma 3n-Training 1,5x schneller, benötigt 50% weniger VRAM und erlaubt 4x längere Kontextlängen.
Unsere kostenlosen Gemma 3n Colab-Notebooks sind standardmäßig auf die Feinabstimmung von Textschichten ausgelegt. Wenn Sie auch Vision- oder Audioschichten feinabstimmen möchten, beachten Sie, dass dies viel mehr VRAM erfordert - über die 15 GB, die Colab oder Kaggle kostenlos bereitstellen. Sie können können trotzdem alle Schichten einschließlich Audio und Vision feinabstimmen und Unsloth erlaubt es Ihnen auch, nur bestimmte Bereiche feinabzustimmen, z. B. nur Vision. Passen Sie 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:
Feinabstimmen von Gemma 3 (4B) mit Vision-Unterstützung mithilfe unseres kostenloses 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 mit Michael aus dem Ollama-Team und auch Xuan von Hugging Face gab es 2 Probleme, die wir speziell für GGUFs beheben mussten:
Der
add_shared_kv_layersParameter wurde versehentlich infloat32kodiert, was in Ordnung ist, aber auf Ollamas Seite etwas komplizierter zu dekodieren wird - eine einfache Änderung zuuint32löst das Problem. Pull Request der dieses Problem anspricht.Der
per_layer_token_embdLayer sollte in Q8_0 Präzision sein. Alles darunter funktioniert nicht richtig und verursacht Fehler in der Ollama-Engine - um Probleme für unsere Community zu reduzieren, haben wir dies in allen Quants auf Q8_0 gesetzt - leider benötigt das mehr Speicherplatz.
♾️Unendlichkeiten und NaN-Gradienten und -Aktivierungen
Gemma 3n hat genauso 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 maximalen Gewichtseinträge für Gemma 3N geplottet, und wir sehen Folgendes:

Wir stellen fest, dass die grünen Kreuze die Conv2D-Faltungsgewichte sind. Wir sehen, dass die Magnitude der Conv2D-Schichten im Durchschnitt deutlich größer ist.
Unten ist eine Tabelle für Conv2D-Gewichte mit großen Magnituden. Unsere Hypothese ist, dass während einer Conv2D-Operation große Gewichte multipliziert und summiert werden, und leider 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, hochzukonvertieren alle Conv2D-Gewichte auf float32 (falls bfloat16 nicht verfügbar ist). Das würde jedoch den VRAM-Verbrauch erhöhen. Um dem zu begegnen, verwenden wir stattdessen autocast on-the-fly, um die Gewichte und Eingaben auf float32 hochzukonvertieren, und führen die Akkumulation während der Matrixmultiplikation selbst in float32 durch, ohne die Gewichte dauerhaft hochkonvertieren zu müssen.
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 den Vision-Encoder von Gemma 3N ebenfalls recht einzigartig, da er versteckte Zustände wiederverwendet. Das schränkt leider die Nutzung 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!
🌵Große Verluste während der Feinabstimmung
Wir stellten außerdem fest, dass die Verluste zu Beginn der Feinabstimmung ungewöhnlich hoch sind - im Bereich von 6 bis 7, sie sinken jedoch schnell im Laufe der Zeit. Wir vermuten, dass dies entweder wegen zweier Möglichkeiten ist:
Es könnte ein Implementierungsfehler vorliegen, aber das ist unwahrscheinlich, da die Inferenz zu funktionieren scheint.
Multimodale Modelle zeigen dieses Verhalten offenbar immer - wir fanden heraus, dass Llama 3.2 Vision mit einem Verlust von 3 oder 4 startet, Pixtral bei etwa 8, und Qwen 2.5 VL ebenfalls bei etwa 4. Da Gemma 3N auch Audio einschließt, könnte dies den anfänglichen Verlust verstärken. Aber das ist nur eine Hypothese. Wir haben auch festgestellt, dass die Quantisierung von Qwen 2.5 VL 72B Instruct extrem hohe Perplexity-Werte von etwa 30 ergab, das Modell jedoch interessant genug trotzdem gut funktioniert.

Feinabstimmen von Gemma 3n mit unserem kostenloses Colab-Notebook
🛠️ Technische Analyse
Gemma 3n : MatFormer
Was ist also so besonders an Gemma 3n, fragen Sie? Es basiert auf Matryoshka Transformer oder MatFormer Architektur, was bedeutet, dass jede Transformer-Schicht/-Block FFNs zunehmend kleinerer Größen einbettet/verschachtelt. Denken Sie daran wie an eine Reihe von immer kleiner werdenden Bechern, die ineinander gesteckt werden. Das Training erfolgt so, dass Sie zur Inferenzzeit die gewünschte Größe wählen können und so die Leistung der größeren Modelle bestmöglich nutzen.
Es gibt außerdem Per-Layer-Embedding, das zwischengespeichert werden kann, um den Speicherverbrauch zur Inferenzzeit zu reduzieren. Das 2B-Modell (E2B) ist also ein Subnetz innerhalb des 4B-(aka 5,44B)-Modells, das durch Per-Layer-Embedding-Caching und das Überspringen der Audio- und Vision-Komponenten erreicht wird, wobei der Fokus ausschließlich auf Text liegt.
Die MatFormer-Architektur wird typischerweise mit exponentiell gestaffelten Sub-Modellen trainiert, d. h. mit Größen Fare, S/2, S/4, S/8 usw. in jeder der Schichten. Während des Trainings werden Eingaben zufällig durch einen der genannten Teilblöcke geleitet, sodass jeder Subblock die gleiche Chance zum Lernen erhält. Der Vorteil ist nun, dass Sie zur Inferenzzeit, wenn Sie möchten, dass das Modell ein Viertel der ursprünglichen Größe ist, S/4 große Subblöcke in jeder Schicht auswählen können.
Sie können auch wählen, Mix and Match wo Sie beispielsweise S/4 einen großformatigen Subblock einer Schicht S/2 einen Subblock einer anderen Schicht und S/8 einen Subblock einer weiteren Schicht auswählen. Tatsächlich können Sie die gewählten Submodelle sogar basierend auf der Eingabe selbst ändern, wenn Sie möchten. Grundsätzlich ist es so, als würden Sie bei jeder Schicht Ihre eigene Struktur wählen. Indem Sie also nur ein Modell einer bestimmten Größe trainieren, erzeugen Sie exponentiell viele Modelle kleinerer Größen. Kein Lernen geht verloren. Ziemlich clever, oder?

Feinabstimmen und multimodale Gemma 3n-Inferenz mit unserem kostenloses Colab-Notebook
Zuletzt aktualisiert
War das hilfreich?

