Gemma 3n:実行とファインチューニング
Google の新しい Gemma 3n を Dynamic GGUF で llama.cpp、Ollama、Open WebUI 上でローカルに実行し、Unsloth でファインチューニングする方法。
GoogleのGemma 3nマルチモーダルモデルは、画像、音声、動画、テキスト入力を扱います。2Bおよび4Bサイズで利用可能で、テキストおよびマルチモーダルタスクに対して140言語をサポートします。今ではローカルで実行および微調整できます Gemma-3n-E4B と E2B を使用してローカルで Unsloth.
当社のツールでGemma 3nを微調整する 無料のColabノートブック
Gemma 3nは 32Kのコンテキスト長、30秒の音声入力、OCR、自動音声認識(ASR)、およびプロンプトを介した音声翻訳をサポートします。
実行チュートリアルファインチューニングチュートリアル修正 + 技術分析
UnslothのGemma 3n(Instruct)アップロードに対する最適な構成:
ベースやその他の形式を含む当社のすべてのGemma 3nアップロードは以下で確認できます ここにあるコレクション.
🖥️ Gemma 3nの実行
現在Gemma 3nは テキスト形式 での推論のみサポートされています。
我々は 問題を修正しました GGUFがOllamaで正しく動作しない問題を修正しました。Ollamaを使用している場合は再ダウンロードしてください。
⚙️ 公式推奨設定
Gemmaチームによると、推論の公式推奨設定は:
temperature = 1.0, top_k = 64, top_p = 0.95, min_p = 0.0
Temperature(温度)を1.0に設定
Top_K = 64
Min_Pを0.00(オプション、但し0.01がよく機能します。llama.cppのデフォルトは0.1)
Top_P = 0.95
Repetition Penalty = 1.0。(llama.cppおよびtransformersでは1.0は無効を意味します)
チャットテンプレート:
<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次を使ったチャットテンプレート
\n改行がレンダリングされる(最後を除く)
llama.cppや他の推論エンジンは自動的に<bos>を追加します - <bos>を二重に追加しないでください!モデルにプロンプトを送る際は<bos>を無視するべきです!
🦙 チュートリアル:OllamaでGemma 3nを実行する方法
いくつかのバグ修正があるため、Gemma 3Nの量子化ファイルを再ダウンロードするか、Ollama経由で古いものを削除してください。古いファイルを削除して更新するには次のようにします:
Ollamaで実行する
をインストールしてくださいまだインストールしていない場合は!
curl -fsSL https://ollama.com/install.sh | sh
モデルを実行してください!失敗した場合は別のターミナルでollama serveを呼び出すことができます!私たちはすべての修正と推奨パラメータ(temperatureなど)をparams
📖 チュートリアル:llama.cppでGemma 3nを実行する方法
まず感謝を伝えたいのは Xuan-Son Nguyen (Hugging Face) Georgi Gerganov (llama.cppチーム)で、Gemma 3Nをllama.cppで動作させてくれたことに感謝します!
最新の
llama.cppを GitHubで入手してください。以下のビルド手順にも従うことができます。を変更してください-DGGML_CUDA=ONに-DGGML_CUDA=OFFGPUを持っていない場合やCPUで推論したい場合は Apple Mac / Metalデバイスの場合、次を設定してください-DGGML_CUDA=OFFその後通常通り続行してください — Metalサポートはデフォルトで有効です。
もし直接
llama.cppを使用したい場合、以下のようにできます:(:Q4_K_XL)は量子化タイプです。Hugging Face(ポイント3)からダウンロードすることもできます。これはollama runに類似しています。ollama run
または モデルをダウンロードする(以下をインストールした後)
モデルをダウンロードするには()。Q4_K_Mや他の量子化バージョン(BF16のフル精度など)を選択できます。
モデルを実行してください。
編集
次の--threads 32--ctx-size 32768コンテキスト長のため(Gemma 3は32Kのコンテキスト長をサポートします!)--n-gpu-layers 99--n-gpu-layers 2会話モードの場合:
非会話モードでFlappy Birdをテストする場合:
Gemma 3Nは自動的に<bos>を追加するため、<bos>を削除することを忘れないでください!
🦥 UnslothでGemma 3nを微調整する
Gemma 3nは、 Gemma 3での実行に問題がありました ColabのようなTesla T4などのFloat16 GPU。推論や微調整のためにGemma 3nをパッチしないと、NaNや無限大に遭遇します。 詳細は以下をご覧ください.
当社のツールでGemma 3n-E4Bを微調整する 無料のColabノートブック
オーディオ: 当社のツールでGemma 3n-E4Bを微調整する オーディオ専用ノートブック
ビジョン:当社のツールでGemma 3n-E4Bを微調整する ビジョン専用ノートブック
また、Gemma 3nの独特のアーキテクチャがビジョンエンコーダで隠れ状態を再利用するため、別の興味深い特性があることも分かりました。それが 以下に記載するグラディエントチェックポイント
UnslothはGemma 3nの推論とトレーニングをfloat16マシンで動作させる唯一のフレームワークです。 つまり、無料のTesla T4 GPUを備えたColabノートブックでも動作します!全体として、UnslothはGemma 3nのトレーニングを1.5倍速くし、VRAMを50%削減し、コンテキスト長を4倍にします。
当社の無料Gemma 3n Colabノートブックはデフォルトでテキスト層の微調整を行います。ビジョンやオーディオ層も微調整したい場合は、はるかに多くのVRAMが必要になることに注意してください — 無料の15GBのColabやKaggleの範囲を超える可能性があります。あなたは できます 依然としてオーディオとビジョンを含むすべての層を微調整できますし、Unslothはビジョンだけのように特定の領域だけを微調整することも可能です。必要に応じて次のように調整してください:
🏆ボーナスコンテンツ
皆さんからの要望で、 Gemma 3(4B)のビジョン用ノートブック をご用意しました:
当社のツールを使用してビジョンサポート付きのGemma 3(4B)を微調整する 無料のColabノートブック
Kaggleが好きなら、GoogleはGemma 3nとUnslothで微調整された最良のモデルに1万ドルの賞金を授与するコンペティションを開催しています! 詳細はこちら.
🐛 Gemma 3nの修正
✨GGUFの問題と修正
次の議論のおかげで感謝します: Michael (Ollamaチーム)とまた Xuan (Hugging Face)から、GGUFに特化して修正しなければならなかった2つの問題がありました:
最新の
add_shared_kv_layersパラメータが誤ってエンコードされていましたfloat32で問題ないものの、Ollama側でデコードがやや複雑になるため - 単純な変更をuint32にすると問題が解決します。 この問題に対処するプルリクエスト があります。
♾️無限大とNaNの勾配および活性化
Gemma 3nはGemma 3と同様にFP16 GPU(例:ColabのTesla T4)で問題があります。
以前のGemma 3に対する修正は ここで議論されています。Gemma 3では、活性化がfloat16の最大範囲を超えることが分かりました(最大値は 65504.
Gemma 3Nはこの活性化問題は持っていませんが、それでも無限大に遭遇することがありました!

これらの無限大の原因を突き止めるために、Gemma 3Nの重みの絶対最大値をプロットし、以下のような結果を確認しました:

緑の×印はConv2Dの畳み込み重みです。Conv2D層の大きさが平均的に大きいことが見て取れます。
以下は大きな大きさを持つConv2D重みの表です。我々の仮説は、Conv2D演算中に大きな重みが乗算されて加算され、 残念ながら偶然にもfloat16の最大範囲65504を超えてしまう、というものです。 Bfloat16は問題ありません。最大範囲が10^38だからです。
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
🎇無限大への対処法
素朴な解決策は、 アップキャストして すべてのConv2D重みをfloat32にすること(bfloat16が利用できない場合)です。しかしそれではVRAM使用量が増加します。これに対処するために、代わりに autocastを オンザフライで使用して、重みと入力をfloat32にアップキャストし、行列乗算の一部として蓄積をfloat32で実行するようにしています。これにより重みを恒久的にアップキャストする必要がありません。
UnslothはGemma 3nの推論とトレーニングをfloat16 GPUで可能にする唯一のフレームワークであるため、無料のTesla T4を備えたColabノートブックでも動作します!
🏁グラディエントチェックポイントの問題
Gemma 3Nのビジョンエンコーダは隠れ状態を再利用するという点で非常に特異であることが分かりました。残念ながらこれは Unslothのグラディエントチェックポイントの使用を制限します。ビジョンエンコーダには適用できないため、VRAM使用量を大幅に削減できない可能性があります。
しかしながら、我々はそれでも Unslothの自動コンパイラ を活用してGemma 3Nを最適化することに成功しました!
🌵微調整中の大きな損失値
微調整の開始時に損失が非常に大きく(約6〜7の範囲)なることがありましたが、時間とともに急速に減少します。我々はこれが主に次の2つの可能性のいずれかによると考えています:
実装上の問題がある可能性がありますが、推論は機能しているためその可能性は低いです。
マルチモーダルモデルは常にこのような挙動を示すようです — 我々はLlama 3.2 Visionの損失が3〜4で始まり、Pixtralは約8、Qwen 2.5 VLも約4で始まることを確認しました。Gemma 3Nは音声も含むため、初期の損失が増幅される可能性があります。しかしこれは仮説に過ぎません。Qwen 2.5 VL 72B Instructを量子化すると非常に高いパープレキシティ(約30)を示すことがありますが、興味深いことにモデルは正常に動作します。

当社のツールでGemma 3nを微調整する 無料のColabノートブック
🛠️ 技術分析
Gemma 3n : MatFormer
では、Gemma 3nの何が特別なのでしょうか?それは Matryoshka Transformer(MatFormer) アーキテクチャに基づいており、各トランスフォーマーレイヤー/ブロックが段階的に小さくなるFFNを埋め込み(ネスト)することを意味します。入れ子になった段階的に小さなカップのように考えてください。訓練は、推論時に望むサイズを選んで大きなモデルの性能を最大限に活用できるように行われます。
また、レイヤーごとの埋め込みをキャッシュして推論時のメモリ使用量を削減することもできます。したがって2Bモデル(E2B)は、4B(別名5.44B)モデル内のサブネットワークであり、これはレイヤーごとの埋め込みキャッシュと音声およびビジョンコンポーネントをスキップしてテキストにのみ焦点を当てることで実現されます。
MatFormerアーキテクチャは通常、指数的に間隔をあけたサブモデル(すなわちサイズ)で訓練されます S, S/2, S/4, S/8 などが各レイヤーで用意されます。訓練時には入力がランダムにこれらのサブブロックのいずれかにフォワードされ、各サブブロックが学習する機会を均等に得ます。利点は、推論時にモデルを元のサイズの1/4にしたい場合、各レイヤーで S/4 サイズのサブブロックを選べることです。
さらに、 Mix and Match(組み合わせ) を選択することもできます。例えば、 S/4 あるレイヤーでのあるサイズのサブブロック、 S/2 別のレイヤーでのS/2サイズのサブブロック、そして S/8 別のレイヤーでのS/8サイズのサブブロックを選ぶことができます。実際には、入力に応じて選ぶサブモデルを変更することも可能です。基本的には各レイヤーで自分好みの構造を選べるようなものです。つまり特定のサイズのモデルを一つ訓練するだけで、指数関数的に多くの小さなサイズのモデルを作成していることになります。学習が無駄になりません。かなり巧妙です。

当社のツールでGemma 3nを微調整してマルチモーダル推論を試してください 無料のColabノートブック
最終更新
役に立ちましたか?

