googleGemma 3n: Wie man ausführt & finetunt

Führe Googles neues Gemma 3n lokal mit Dynamic GGUFs auf llama.cpp, Ollama, Open WebUI aus und finetune mit Unsloth!

Das multimodale Modell Gemma 3n von Google verarbeitet Bild-, Audio-, Video- und Texteingaben. Erhältlich in den Größen 2B und 4B, unterstützt es 140 Sprachen für Text- und multimodale Aufgaben. Sie können jetzt ausführen und feinabstimmen Gemma-3n-E4B und E2B lokal mit Unslotharrow-up-right.

Feinabstimmen von Gemma 3n mit unserem kostenloses Colab-Notebookarrow-up-right

Gemma 3n hat 32K Kontextlänge, 30s Audioeingang, OCR, automatische Spracherkennung (ASR) und Sprachübersetzung über Prompts.

AusführungsanleitungFeinabstimmungsanleitungFixes + Technische Analyse

Unsloth Gemma 3n (Instruct) Uploads mit optimalen Konfigurationen:

Dynamic 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 bei GGUFs, die nur in Ollama nicht richtig funktionierten. Bitte laden Sie erneut herunter, wenn Sie Ollama verwenden.

⚙️ Offizielle 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

  • 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\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. In Ollama ausführen Installieren Sie falls Sie es noch nicht getan haben!

  1. curl -fsSL https://ollama.com/install.sh | sh Führen Sie das Modell aus! Beachten Sie, dass Sieollama serve in einem anderen Terminal aufrufen können, wenn es fehlschlägt! Wir fügen alle unsere Fixes und vorgeschlagenen Parameter (Temperatur usw.) in params

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

circle-info

Wir möchten uns zuerst bedanken bei 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. Hole dir die neueste llama.cpp auf GitHub hierarrow-up-right. Du kannst auch den Build-Anweisungen unten folgen. Ändere -DGGML_CUDA=ON zu -DGGML_CUDA=OFF wenn du keine GPU hast oder nur CPU-Inferenz möchtest. Für Apple Mac / Metal-Geräte, setze -DGGML_CUDA=OFF dann wie gewohnt fort - Metal-Unterstützung ist standardmäßig aktiviert.

  1. Wenn du 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 ähnelt 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ühre das Modell aus.

  2. Bearbeiten Sie können --threads 32 --ctx-size 32768 für Kontextlänge (Gemma 3 unterstützt 32K Kontextlänge!), --n-gpu-layers 99 --n-gpu-layers 2

  3. Für den Konversationsmodus:

  1. Für den Nicht-Konversationsmodus, um Flappy Bird zu testen:

triangle-exclamation

🦥 Feinabstimmung von Gemma 3n mit Unsloth

Gemma 3n, wie Gemma 3, hatte Probleme bei der Ausführung 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 haben ebenfalls festgestellt, dass aufgrund der einzigartigen Architektur von Gemma 3n, die versteckte Zustände im Vision-Encoder wiederverwendet, eine weitere interessante Eigenheit mit Gradient Checkpointing wie unten beschrieben

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 Colab oder Kaggle kostenlos bereitstellen. Sie kannst können trotzdem alle Schichten einschließlich Audio und Vision feinabstimmen 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 du Kaggle liebst, veranstaltet Google einen Wettbewerb, bei dem das beste Modell, das mit Gemma 3n und Unsloth feinabgestimmt wurde, 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. Die add_shared_kv_layers Parameter wurde versehentlich in float32 kodiert, was in Ordnung ist, aber die Dekodierung auf Ollamas Seite etwas verkompliziert - eine einfache Änderung zu uint32 löst das Problem.arrow-up-right Pull Request

  2. Die der dieses Problem adressiert. per_layer_token_embd

    1. Layer sollte in Q8_0 Präzision sein. Alles darunter funktioniert nicht richtig und führt im Ollama-Engine zu Fehlern - um Probleme für unsere Community zu reduzieren, haben wir dies in allen Quants auf Q8_0 gesetzt - leider benötigt das mehr Platz. Alsarrow-up-right, Updatearrow-up-right Matt

♾️erwähnte, können wir auch Q4_0, Q4_1, Q5_0, Q5_1 für die Embeddings verwenden - 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 nicht 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 sindhier diskutiert 65504.

. Für Gemma 3 stellten wir fest, dass Aktivierungen die maximale Reichweite von float16 überschreiten von

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 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. Nachfolgend eine Tabelle für Conv2D-Gewichte, die große Magnituden haben. Unsere Hypothese ist, dass während einer Conv2D-Operation große Gewichte multipliziert und aufsummiert werden und leider zufällig die maximale Reichweite von float16 von 65504 überschreiten.

Bfloat16 ist in Ordnung, da seine maximale Reichweite 10^38 ist.
Name

Max

98.000000

msfa.ffn.pw_proj.conv.weight

37.000000

blocks.2.21.attn.key.down_conv.weight

34.750000

blocks.2.32.pw_exp.conv.weight

33.750000

blocks.2.30.pw_exp.conv.weight

33.750000

🎇blocks.2.34.pw_exp.conv.weight

Lösung für Unendlichkeiten Die naive Lösung ist, aufzuheben (upcast) alle Conv2D-Gewichte zu float32 (falls bfloat16 nicht verfügbar ist). Aber das würde den VRAM-Verbrauch erhöhen. Um dies anzugehen, nutzen wir stattdessen autocast

circle-check

🏁Unsloth ist das einzige Framework, das Gemma 3n Inferenz und Training auf Float16-GPUs ermöglicht, daher funktionieren Colab-Notebooks mit kostenlosen Tesla T4s!

Probleme mit Gradient Checkpointing Wir fanden den Vision-Encoder von Gemma 3N ebenfalls recht einzigartig, da er versteckte Zustände wiederverwendet. Das begrenzt leider die Nutzung vonarrow-up-rightUnsloth's Gradient Checkpointing

, das den VRAM-Verbrauch deutlich hätte reduzieren können, da es nicht auf den Vision-Encoder angewendet werden kann. Wir haben es jedoch geschafft, Unsloth's automatischen Compiler

🌵zu nutzen, um Gemma 3N zu optimieren!

Große Verluste während der Feinabstimmung

  1. Wir stellten auch 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 aus zwei Möglichkeiten resultieren könnte:

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

circle-check

- wir stellten fest, dass Llama 3.2 Vision mit Verlusten bei 3 oder 4 beginnt, Pixtral bei etwa 8 und Qwen 2.5 VL ebenfalls bei ca. 4. Da Gemma 3N auch Audio einschließt, könnte dies den anfänglichen Verlust verstärken. Aber das ist nur eine Hypothese. Wir stellten auch fest, dass die Quantisierung von Qwen 2.5 VL 72B Instruct extrem hohe Perplexity-Werte von etwa 30 ergab, das Modell jedoch interessanterweise trotzdem gut arbeitet.

🛠️ Technische Analyse

Gemma 3n : MatFormer Was ist also so besonders an Gemma 3n, fragen Sie? Es basiert aufarrow-up-right Matryoshka Transformer oder MatFormer

Architektur, was bedeutet, dass jede Transformer-Schicht/-Block FFNs von progressiv kleineren Größen einbettet/verschachtelt. Stellen Sie es sich vor wie progressiv kleinere Tassen, die ineinander gesetzt werden. Das Training wird so durchgeführt, dass Sie zur Inferenzzeit die gewünschte Größe wählen können und die meiste Leistung der größeren Modelle erhalten.

Es gibt auch Per-Layer-Embedding, das gecached werden kann, um den Speicherverbrauch zur Inferenzzeit zu reduzieren. Das 2B-Modell (E2B) ist also ein Subnetzwerk innerhalb des 4B (auch bekannt als 5,44B) Modells, das sowohl durch Per-Layer-Embedding-Caching als auch durch das Überspringen von Audio- und Vision-Komponenten erzielt wird und sich ausschließlich auf Text konzentriert. Die MatFormer-Architektur wird typischerweise mit exponentiell gestaffelten Submodellen trainiert, d. h. in Größen von, S S/2, S/4, S/8 usw. in jeder der Schichten. Während des Trainings werden Eingaben zufällig durch einen der genannten Subblöcke weitergeleitet, sodass jeder Subblock die gleiche Chance zum Lernen erhält. Der Vorteil ist, dass man zur Inferenzzeit, wenn man das Modell auf ein Viertel der ursprünglichen Größe setzen möchte, S/4

große Subblöcke in jeder Schicht wählen kann. Sie können auch wählen, Mix and Match usw. in jeder der Schichten. Während des Trainings werden Eingaben zufällig durch einen der genannten Subblöcke weitergeleitet, sodass jeder Subblock die gleiche Chance zum Lernen erhält. Der Vorteil ist, dass man zur Inferenzzeit, wenn man das Modell auf ein Viertel der ursprünglichen Größe setzen möchte, wo Sie beispielsweise große Subblöcke einer Schicht wählen, S/2 große Subblöcke einer anderen Schicht und S/8

große Subblöcke einer weiteren Schicht. Tatsächlich können Sie die gewählten Submodelle sogar basierend auf der Eingabe ändern, wenn Sie möchten. Im Grunde ist es, als würden Sie Ihre eigene Struktur in jeder Schicht auswählen. Durch das Trainieren 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

Gemma 3n Modellübersicht (Model overview auf Deutsch: Modellübersicht von Gemma 3n?) kostenloses Colab-Notebookarrow-up-right

Zuletzt aktualisiert

War das hilfreich?