googleGemma 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 Unslotharrow-up-right.

Feinabstimmung von Gemma 3n mit unserem kostenlosen Colab-Notebookarrow-up-right

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:

Dynamisches 2.0 GGUF (nur Text)
Dynamisches 4-Bit Instruct (zum Feinabstimmen)
16-Bit Instruct

Siehe alle unsere Gemma 3n Uploads einschließlich Basis und weiteren Formaten in unserer Sammlung hierarrow-up-right.

🖥️ Gemma 3n ausführen

Derzeit wird Gemma 3n nur im Textformat für Inferenz unterstützt.

circle-info

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\n
  • Chat-Vorlage mit \nZeilenumbrüchen gerendert (außer dem letzten)

triangle-exclamation

🦙 Tutorial: Wie man Gemma 3n in Ollama ausführt

circle-check
  1. Installieren Sie ollama wenn Sie es noch nicht getan haben!

  1. 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.) in params in unserem Hugging Face Upload hinzu!

📖 Tutorial: Wie man Gemma 3n in llama.cpp ausführt

circle-info

Wir möchten zunächst danken Xuan-Son Nguyenarrow-up-right von Hugging Face, Georgi Gerganovarrow-up-right vom llama.cpp-Team dafür, dass Gemma 3N in llama.cpp funktioniert!

  1. Beschaffen Sie sich das neueste llama.cpp auf GitHub hierarrow-up-right. Sie können auch den Build-Anweisungen unten folgen. Ändern Sie -DGGML_CUDA=ON zu -DGGML_CUDA=OFF wenn Sie keine GPU haben oder nur CPU-Inferenz wünschen. Für Apple Mac / Metal-Geräte, setzen Sie -DGGML_CUDA=OFF und fahren Sie dann wie gewohnt fort - Metal-Unterstützung ist standardmäßig aktiviert.

  1. Wenn Sie llama.cpp direkt 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 zu ollama run

  1. 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).

  1. Führen Sie das Modell aus.

  2. Bearbeiten Sie --threads 32 für die Anzahl der CPU-Threads, --ctx-size 32768 für die Kontextlänge (Gemma 3 unterstützt 32K Kontextlänge!), --n-gpu-layers 99 fü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.

  3. Für den Konversationsmodus:

  1. Für den Nicht-Konversationsmodus zum Testen von Flappy Bird:

triangle-exclamation

🦥 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.

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:

circle-info

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 hierarrow-up-right.

🐛 Fehlerbehebungen für Gemma 3n

GGUF-Probleme & Fixes

Dank Diskussionen von Michaelarrow-up-right vom Ollama-Team und auch Xuanarrow-up-right von Hugging Face gab es zwei Probleme, die wir speziell für GGUFs beheben mussten:

  1. Der add_shared_kv_layers Parameter wurde versehentlich in float32 kodiert, was in Ordnung ist, aber das Decodieren auf Ollamas Seite etwas komplizierter macht - eine einfache Änderung zu uint32 löst das Problem.arrow-up-right Pull Request

  2. Der zur Behebung dieses Problems. per_layer_token_embd

    1. Die 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 einearrow-up-right, Aktualisierungarrow-up-right 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.

Name
Max

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.

circle-check

🏁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 Checkpointingarrow-up-rightein, 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

  1. 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:

  2. Es könnte ein Implementierungsproblem geben, aber das ist unwahrscheinlich, da die Inferenz zu funktionieren scheint. Multimodale Modelle zeigen dieses Verhalten scheinbar immer

circle-check

- 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 derarrow-up-right 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

eines weiteren Layers auswählen. Tatsächlich können Sie die Untermodelle, die Sie wählen, basierend auf der Eingabe selbst ändern, wenn Sie möchten. Im Grunde ist es so, als würden Sie auf jeder Schicht Ihre eigene Struktur wählen. Durch das Training eines Modells einer bestimmten Größe erstellen Sie exponentiell viele Modelle kleinerer Größen. Kein Lernen geht verloren. Ziemlich clever, oder? Bild vonarrow-up-right
circle-info

Zuletzt aktualisiert

War das hilfreich?