✨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 は推論で テキスト形式でのみ 利用可能です。
私たちは 問題を修正しました Ollama のみで GGUF が正しく動作しない問題です。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まだの場合はぜひ!
モデルを実行してください!失敗した場合は別の端末で
ollama serveを呼び出せます!私たちのすべての修正と推奨パラメータ(temperatureなど)はparamsにHugging Faceのアップロードで含めています!
📖 チュートリアル:llama.cpp で Gemma 3n を実行する方法
まず感謝を伝えたいのは、 Xuan-Son Nguyen Hugging Face から、 Georgi Gerganov llama.cpp チームから、llama.cpp で Gemma 3N を動作させてくれたことに対してです!
最新の
llama.cppを GitHub で入手できます。下のビルド手順に従うこともできます。変更してください-DGGML_CUDA=ONから-DGGML_CUDA=OFFGPU がない場合や CPU 推論のみを行いたい場合は。
直接モデルを読み込むために
llama.cppモデルを直接読み込むには、以下を実行できます:(:Q4_K_XL)は量子化タイプです。Hugging Face(ポイント3)経由でダウンロードすることもできます。これは次に似ていますollama run
または (をインストールした後)経由でモデルをダウンロードします。
pip install huggingface_hub hf_transferQ4_K_M や他の量子化バージョン(BF16 フル精度のような)を選択できます。
モデルを実行してください。
編集
--threads 32でCPUスレッド数を編集できます、--ctx-size 32768コンテキスト長用(Gemma 3 は 32K のコンテキスト長をサポートします!)、--n-gpu-layers 99で何層をGPUにオフロードするかを指定します。GPUがメモリ不足になる場合は調整してみてください。CPUのみの推論の場合はこれを削除してください。会話モードの場合:
会話モード以外で 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 を搭載した Colab ノートブックでも動作します!全体として、Unsloth により Gemma 3n のトレーニングは 1.5 倍高速、VRAM は 50% 削減、コンテキスト長は 4 倍になります。
当社の無料 Gemma 3n Colab ノートブックはデフォルトでテキストレイヤーのファインチューニングを行います。ビジョンや音声レイヤーもファインチューニングしたい場合は、これがはるかに多くの VRAM を必要とすることに注意してください — 無料の Colab や Kaggle が提供する 15GB を超える可能性があります。あなたは あなたは それでも音声やビジョンを含むすべてのレイヤーをファインチューニングできますし、Unsloth はビジョンのみのように特定の領域だけをファインチューニングすることも可能にします。必要に応じて次のように調整してください:
🏆ボーナスコンテンツ
皆さんが欲しかったのは、 Gemma 3(4B)用のビジョンノートブック なので、こちらです:
当社のツールを使ってビジョン対応で Gemma 3(4B)をファインチューニングする 無料のColabノートブック
Kaggle が好きなら、Google は Gemma 3n と Unsloth でファインチューニングされた最良のモデルに 10,000 ドルの賞金を授与するコンペティションを開催しています! 詳細はこちら.
🐛 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 の何が特別なのか?それは次に基づいています: マトリョーシカトランスフォーマー、または MatFormer アーキテクチャで、各トランスフォーマーレイヤー/ブロックが段階的に小さくなる FFN を埋め込み(ネスト)していることを意味します。これは入れ子になった段々小さいカップのように考えてください。トレーニングは、推論時に望むサイズを選べばより大きなモデルの性能を最大限に引き出せるように行われます。
また、レイヤーごとの埋め込み(Per Layer Embedding)があり、推論時のメモリ使用量を減らすためにキャッシュできます。したがって 2B モデル(E2B)は 4B(別名 5.44B)モデル内のサブネットワークであり、これはレイヤーごとの埋め込みのキャッシュと、音声およびビジョンコンポーネントをスキップしてテキストにのみ注力することで実現されます。
MatFormer アーキテクチャは通常、指数的に間隔を空けたサブモデル(すなわち サイズが Age, S/2、S/4、S/8 など)で各レイヤーにおいて訓練されます。トレーニング時には入力がランダムにこれらのサブブロックのいずれかを通過し、各サブブロックが等しく学習する機会を得ます。ここでの利点は、推論時に元のサイズの 1/4 にしたい場合、各レイヤーで S/4 サイズのサブブロックを選べることです。
また、次のことも選択できます: 組み合わせて選ぶ(Mix and Match) 例えば、あるレイヤーでは S/4 サイズのサブブロックを、 S/2 別のレイヤーではそのサブブロックを、そして S/8 さらに別のレイヤーではそのサブブロックを選ぶ、というように。実際には、好みに応じて入力自体に基づいて選択するサブモデルを変更することもできます。基本的には各レイヤーで自分好みの構造を選べるということです。したがって特定のサイズのモデルを一つだけ訓練することで、より小さいサイズの指数的に多数のモデルを生成できます。学習が無駄になりません。なかなか良い仕組みです。

当社のツールで Gemma 3n のマルチモーダル推論をファインチューニングして試す 無料のColabノートブック
最終更新
役に立ちましたか?

