Google が gemma-trainer スキルを発表——自分のPCで、AIに自分専用のGemmaを微調整させる
- Google がオープンソースの gemma-skills リポジトリに、自分のPC上でGemmaをファインチューニングする方法をAIアシスタントに教える gemma-trainer というスキルを新規追加しました。
- 本体はAI Agent向けに書かれたマニュアル(
SKILL.md)と、すぐ使える5本のPythonスクリプトです。あなたが日常会話で指示すれば、アシスタントがそれに沿ってパラメータを選び、トレーニングを実行します。 - 3つのトレーニング方式をカバー——SFTで新しい知識を教え、DPOでスタイルの選好を調整し、RMでスコアリングモデルを1本訓練する。各ルートのデータ形式と主要パラメータはすべて固定値で決まっています。
- 優先されるのは Unsloth。公式によれば最大70%の省VRAM、速度は2倍とされ、コンシューマー向けGPU1枚で12Bクラス、あるいはそれ以上のモデルをファインチューニングでき、画像や音声のトレーニングにも対応します。
- 訓練後は GGUF のような軽量フォーマットに変換でき、LiteRT-LM を使ってスマートフォンやIoTデバイスに組み込んで動かせます。
自分のPCで、自分の分野だけを理解するGemmaを作る
欲しいのは専用モデルです——自分のニッチな分野の専門用語を訳し、自分の好みに合わせて答え、自分の仕事だけをこなす。オープンソースのGemmaはもともとこうしたカスタマイズのために作られていますが、実際にファインチューニングしようとすると、まず複雑な環境構築とわかりにくいガイドの山を突破しなければなりませんでした。
Google の Gemma チームは最近、この最初のハードルを取り払いました。オープンソースの gemma-skills リポジトリに、gemma-trainer という新しいスキルを追加したのです。
github.com/google-gemma/gemma-skills
本体はAI向けに書かれたマニュアル
gemma-trainer の本体は SKILL.md ファイル1本と、すぐ使える5本のPythonスクリプトのテンプレートです。GUIは付いておらず、あなたが直接呼び出して使うトレーニングライブラリでもありません。
SKILL.md はAI Agent向けに書かれた設計図です。ローカルファインチューニングのベストプラクティス、各パラメータの適正値、避けるべき落とし穴が、すべて固定値として書き込まれています。あなたのアシスタントはこれを読むことで、「なんとなくトレーニング方法を知っている」状態から、「この環境ではどのスクリプトをどう調整し、各ツマミをいくつに設定すべきか知っている」状態に変わります。リポジトリ内の5本のスクリプトはそれぞれ役割が異なり、1本が教師ありファインチューニングを、1本が選好の最適化を、1本がスコアリングモデルの訓練を、1本がデータ形式の検証専用を、もう1本がデータ蒸留を担当します。
gemma-trainer を読む
パラメータを決定
イテレーション
このスキルは特定の流派を選ばず、具体的なAIツールとは無関係で、Gemini から Claude までどれでも使えます。Google 自身のコマンドラインツール Antigravity(agy)と組み合わせることも可能です。使い方は一言で言えるほどシンプルです——gemma-trainer フォルダをAIアシスタントのスキルディレクトリにコピーするだけで、アシスタントはすぐにやり方がわかります。
さらに興味深いのは、アシスタントが単に言われた通りに実行するだけでなく、スキルに書かれた能力の制約に基づいてミスを未然に防いでくれる点です。実例があります——あるトレーニング依頼で、誤って Gemma 4 31B を音声タスクに使おうとしたところ、アシスタントがその場で指摘しました。31Bはテキストと画像しか扱えないモデルで、音声機能は一切なく、E2B か 12B への変更を提案してきたのです。
知識を教える、選好を調整する、スコアを学ばせる——どう選ぶか
このスキルではファインチューニングを3つの方式に分類しており、それぞれ目的が異なります。モデルに何を学ばせたいかがはっきりすれば、どのルートを選ぶべきかがわかります。
DPOには厳格なルールがあります——必ず自分の分野で先にSFTを終わらせてから、DPOに進むことです。あなたのデータを一度も見たことのない基礎モデルにいきなりDPOをかけると、たいてい失敗するか、出力フォーマットを壊してしまいます。
3つの方式で学習率が桁単位で異なる
見落とされがちですが、実は物事の本質をよく表している細部があります。3つのルートで推奨される学習率(1ステップごとにパラメータをどれだけ動かすか)は大きくかけ離れており、しかも「教える量が多いほど歩幅も大きい」という単純な話ではありません。DPOはモデルがすでに身につけているものの上でスタイルを軽く補正するだけなので、歩幅が少しでも大きいと以前学んだフォーマットが壊れてしまいます。だからSFTの200分の1という小ささが必要です。一方RMが訓練するのは新しく追加され、ゼロから学ぶスコアリング用ヘッドなので、逆に3つの中で最も歩幅が大きくなります。
バーは桁の大小を示すだけで、線形比例ではありません。実際の数値はRM=1e-3、SFT=2e-4、DPO=1e-6で、DPOはSFTよりさらに200分の1小さくなります。
この2種類のデータがどんな形をしているか、スキルに標準サンプルが用意されているので、それに沿って自分のデータセットを準備できます。
{
"messages": [
{"role": "user", "content": "Tell me a joke."},
{"role": "model", "content": "Why did the computer go to the doctor? It had a virus!"}
]
}
{
"prompt": "Write a python function to compute factorial.",
"chosen": "def factorial(n):\n return 1 if n <= 1 else n * factorial(n - 1)",
"rejected": "factorial is computed using recursion or loops. Just import math."
}
訓練時、覚えるのは「どう答えるか」だけで、質問文は覚えない
スクリプトの中には、もう一つ見落としやすい工夫が隠れています。入力するのは「ユーザーの質問+モデルの回答」を1セットにしたものですが、訓練時に両方を学習させるわけではありません。スクリプトはまずモデルの回答が始まる位置を見つけ、回答部分のみに対して損失を計算し損失(loss)とは、モデルの答えが合っているかどうかを表す減点のことです。回答部分だけを採点対象にすることで、モデルは「どう答えるか」だけを学び、ユーザーの質問文を覚え込むことはありません、ユーザーの質問部分は丸ごとスキップします。こうすることでモデルは「この種の質問にはこう答える」というパターンを学び、あなたの質問文そのものを丸暗記することはありません。
データ形式の設定ミスが、訓練結果が悪くなる最大の原因です。だからこそこのスキルには専用の検証スクリプト dataset_prep.py が用意されており、訓練を始める前にデータを一通りチェックしてくれます。SFTデータでは最後の発言が必ずモデルの回答であることを確認し、DPOデータでは「より良い」と「より悪い」の2つの回答が完全に同一でないことを確認します(同一だとモデルが選好を何も学べないため)。さらに質問文を単独でトークン化し、この前置き部分が「良い回答」「悪い回答」双方の中で完全に一致した語で現れているかを照合します。これは分かち書きがずれて訓練が知らぬ間に狂ってしまう落とし穴を、専門にふさぐための仕組みです。
手元にデータがない?大規模モデルに作らせればいい
ファインチューニングで最も不足しがちなのはデータです。このスキルにはデータ蒸留(distillation)用のスクリプト distill_dataset.py も同梱されています。発想はシンプルで、大規模な「教師」モデル(たとえば Gemma 4 31B)に高品質な訓練データを生成させ、そのデータを使って小型の「生徒」モデル(たとえば E2B)を訓練するというものです。データの作り方は2パターン用意されています。
教師モデルはローカルの Ollama 上で動かすこともでき、データ生成から訓練まで一切外部に出さず、すべて自分のPC内で完結させられます。
大型モデルをどうやって自分のGPUに収めるか
自分のPCでファインチューニングをする際、最も恐れるのはVRAM不足で訓練が途中で落ちてしまうこと(VRAM超過、いわゆるOOM)です。gemma-trainer はLoRA、QLoRA、そして Unsloth という3つの仕組みで大型モデルをコンシューマー向けGPUに収めます。
大型モデルのファインチューニングとは、本を丸ごと書き直すことではありません。LoRA のやり方は、元の本にはまったく手を加えず、その脇に訓練可能な小さな付箋の束を貼り付け、変更点はすべて付箋の上に書き込むというものです。QLoRA はさらに省エネで、まず元の本をより省スペースな方式(4-bit圧縮)で縮小コピーしてから、その上に付箋を貼って訓練します。こうして元のモデルは凍結されたまま動かず、あなたが訓練しているのはその小さな付箋の束だけなので、VRAMが自然と節約されるわけです。
具体的な役割分担はこうです——GPU1枚の環境では Unsloth を優先します。Gemma 4 をネイティブサポートしており、公式によれば標準的な Hugging Face トレーニングと比べて最大70%省VRAM、速度は2倍とされています。GPU複数枚の環境や、Unslothがインストールできない場合にのみ、Hugging Face の TRL と PEFT の組み合わせにフォールバックします。どちらの経路でも QLoRA(4-bit量子化)モデルパラメータを、よく使われる16bit精度から4bitへ圧縮して保存する方式。サイズとVRAM消費が約4分の1にまで下がり、代償はごくわずかな精度低下だけ の有効化が推奨されています。これが12Bや31BといったサイズのGemmaをコンシューマー向けVRAMに収める鍵になります。
もう一つ注意すべき落とし穴があります。Gemma 4 自体は最大256Kという非常に長いコンテキストに対応していますが、ローカル訓練でこれを欲張ってはいけません。スキルの推奨は2048〜8192で、それを超えるとVRAM不足で簡単に落ちます。
どんなPCが必要なのか
QLoRAとUnslothを組み合わせれば、多くの人が思うよりハードルは低くなります。Unsloth 公式が示す数値によれば、Gemma 4 の各サイズをファインチューニングするのに必要なのはコンシューマー向けGPU1枚から。小型モデルなら無料の Google Colab でも動きます。
| モデル | ファインチューニングVRAM(QLoRA) | 必要なGPUの目安 |
|---|---|---|
| Gemma 4 E2B | 約8GB | エントリー向けコンシューマーGPU(例:RTX 3060 12G)、または無料 Colab の T4 |
| Gemma 4 E4B | 10〜17GB | ミドルレンジのコンシューマーGPU |
| Gemma 4 31B | 約22GB | ハイエンドコンシューマーGPU(例:RTX 4090 / 3090(24G)) |
| Gemma 4 26B-A4B | 40GB以上 | A100クラスのプロ向けGPUが必要 |
VRAM数値は Unsloth 公式の Gemma 4 トレーニングドキュメントに基づくQLoRA / LoRAファインチューニングの参考値です。フルファインチューニング(圧縮なし)はこの数倍を要し、通常マルチGPUが必要になります。
そのままコピペできるLoRAパラメータのレシピ
このスキルには、よく使うLoRAパラメータのデフォルト値がすべて書き込まれています。訓練を始める際はそのまま埋めるだけで使えます。
| パラメータ | 推奨値 | 役割 |
|---|---|---|
rank(r) | 16 または 32 | 付箋の「厚み」。高いほど複雑な挙動を学べるが、VRAMもより消費する |
lora_alpha | 32 または 64 | スケーリング係数。経験則として rank の2倍に設定する |
lora_dropout | 0.05 | モデルに固定パターンだけに頼らせず、より頑健な特徴を学ばせる |
| 学習率 | SFT 2e-4 DPO 1e-6 RM 1e-3 | 1ステップごとの移動量。3方式で桁が大きく異なるため取り違え注意 |
| コンテキスト長 | 2048〜8192 | ローカル訓練でのVRAM超過防止。256Kフルは避ける |
パラメータが決まれば、実行はコマンド一発です。AIアシスタントを介さず自分でスクリプトを直接叩くことも可能です。たとえばデフォルト設定で E2B に対して一度SFTを実行する場合はこうなります。
python sft_train.py \ --model google/gemma-4-E2B \ --dataset your_data.json \ --lora-r 16 --lora-alpha 32 \ --epochs 3 --lr 2e-4
DPOと報酬モデリングにはそれぞれ専用の dpo_train.py、reward_train.py があり、パラメータの書式は同じです。Unslothがインストールできない場合は --force-hf を付けると自動的に Hugging Face 側にフォールバックします。
もう一歩深く: DPOはどうやってモデル1本分のVRAMを節約しているか
DPO訓練は理論上、モデルを同時に2つロードする必要があります——訓練中の1つと、「参照」用(reference、新しいモデルがずれていないか判定するため)の1つです。これだと2倍のVRAMを消費してしまいます。gemma-trainer のやり方は、参照モデルを直接「空」に設定するというものです。参照出力が必要になった瞬間だけ、訓練中のLoRA付箋の束を一時的にオフにし、モデルを元の状態に戻して都度計算し直し、使い終わったらまたオンに戻します。1本のモデルを2本分として使うことで、VRAMをかなり節約できるわけです。Unsloth 使用時にはさらに、DPOトレーナーを高速化する追加パッチが当てられます。
画像や音声も教えられ、さらにスマホに収められる
Gemma 4 はもともとマルチモーダルで、画像や音声を処理できます。画像や音声を訓練しようとすると変更点は思いのほか小さく、データ形式の content ブロックのタイプを text から image または audio に切り替えるだけです。
{
"messages": [
{"role": "user", "content": [
{"type": "text", "text": "Describe this audio."},
{"type": "audio", "url": "path/to/audio.wav"}
]},
{"role": "assistant", "content": [
{"type": "text", "text": "This is an audio file of a bird chirping."}
]}
]
}
音声にはいくつかコツがあります——16kHzモノラルのサンプリングを使う必要があり、スクリプト側にも専用のパッチが当てられていて、音声データ型が合わずに訓練エラーになる古くからの不具合を修正済みです。自分で踏まずに済みます。画像・音声ファインチューニングに対応する型番もはっきり示されており、音声は E2B、E4B、12B のみ対応で、31Bは非対応です。これがまさに、先ほどアシスタントに止められた理由でもあります。
訓練が終われば、モデルはそのままあなたのポケットまで運ばれます。Unsloth ネイティブのエクスポート機能、または llama.cpp を使ってモデルを GGUF のような軽量フォーマットに変換し、LiteRT-LM に渡せば、スマートフォン、Web、IoTデバイスに組み込んで動かせるようになり、CPU、GPU、NPUのハードウェアアクセラレーションも活用できます。「ローカルでファインチューニングし、ローカルにデプロイする」という流れが一本の鎖としてつながります。
実践: Gemmaを古朝鮮文学の翻訳家に育てる
実際に動作した実例を一つ——Gemma 4 E2B を『洪吉童伝』(古朝鮮文学の一作品)の翻訳専門家にファインチューニングします。プロセス全体を通して、あなたがやることはアシスタントに一言伝えるだけです。
Fine-tune Gemma 4 E2B on the dataset bebechien/HongGildongJeon.
ここからアシスタントが4ステップに付き合ってくれます。まず検証スクリプトであなたのデータが形式に合っているか確認し、次にモデルに言語の微妙なニュアンスを教え込めつつVRAMを圧迫しすぎないLoRAパラメータのセットを選び、省リソースのデフォルト設定で訓練を開始し、最後に結果を評価して、その表現をもとにパラメータを調整しながら次のラウンドへ進みます。転写の類似度を専門にチェックするスクリプトのような、カスタム評価スクリプトをその場で書かせることもできます。訓練が終わると、アシスタントはこのラウンドの結果と、次のラウンドで改善できる点を明記した完全なレポートをまとめてくれます。
始め方は? gemma-trainer フォルダをAIアシスタントのスキルディレクトリにコピーするだけで、アシスタントはすぐにやり方がわかります。gemma-skills リポジトリ全体はGitHub上でオープンソース公開されています——github.com/google-gemma/gemma-skills。
ローカルでGemmaをファインチューニングする: 「まず環境構築と難解なガイドを読破」から「AIに一言伝えるだけ」へ
Google がAI向けに書かれたトレーニングマニュアル gemma-trainer をオープンソース公開。方式選び、パラメータ設定、VRAM超過防止をすべて固定値化し、コンシューマー向けGPU1枚で始められる内容を、図解付きで1ページにまとめました。
↓ 1ページで読み切り · 動く図が1枚あります
Gemma は Google が無料でオープンソース公開しているAIモデルで、もともと自分の分野だけを理解する専用版に改造できることを狙って作られています。しかし実際に自分で改造しようとすると、ずっと入口で足止めされていました。
✘ しかし自分でファインチューニングしようとすると、複雑な環境構築とわかりにくい技術ガイドの山にまず入口で阻まれる
ファインチューニング = 自分のデータでモデルを再訓練し、欲しい知識や話し方を学ばせること。難しいのはいつだってアイデアではなく、この一連の技術的ハードルの方です。
Google がオープンソースリポジトリに gemma-trainer を追加しました。これはまた別のトレーニングソフトではなく、AIアシスタント向けに書かれたマニュアル(ベストプラクティスとパラメータをすべて固定値化)と、すぐ使える5本のスクリプトです。あなたが日常会話で指示すれば、アシスタントがそれに沿ってスクリプトを選び、パラメータを決め、訓練を実行します。
自分でトレーニングスクリプトを組む · LoRAパラメータを勘で決める
さらにVRAM超過も手動で防がねばならない
Fine-tune Gemma 4 E2B on the
dataset bebechien/HongGildongJeon
ではこの一言の裏で、アシスタントは実際にどんな技術的作業を代行しているのか。次の図で一目瞭然です。
小互 が「『洪吉童伝』データセットでGemma 4 E2Bをファインチューニングして」と一言伝えるだけで、アシスタントはマニュアルを読み終えると代わりにルートを選び(今回は新しい知識を教えたいのでSFTを選択)、パラメータを決めて訓練を開始し評価する。あなたは一言発するだけで、スクリプトの選定、パラメータの調整、エラー防止といった技術的作業は一手に引き受けてくれる。3つのルート: 新しい知識を教えるならSFT、話し方の傾向を調整するならDPO、採点係を1本訓練するならRM。
数千元クラスの家庭用GPUでも、これほど大きなモデルを訓練できるようにするにはどうすればいいのか。鍵はLoRAです。モデル全体を再訓練するのではなく、脇に訓練可能な小さな「付箋」の束を貼るだけで、元のモデルは凍結したまま動きません。さらにそれを4bit精度に圧縮(QLoRA)し、GPU1枚向けに最適化された Unsloth エンジンに実行を任せます。節約されるVRAM(GPU上のメモリで、訓練はすべてこれに頼っており、足りなければ落ちる)はこの通りです。
標準トレーニング
Unsloth+QLoRA
訓練が終われば軽量フォーマットに変換してスマートフォンやIoTデバイスに組み込んで動かすこともできます。画像を見せたり音を聞かせたりしたい場合も、データの一項目を「テキスト」から「画像」や「音声」に切り替えるだけ。ローカルで訓練し、ローカルにデプロイするという流れが一本の鎖としてつながっています。
壁にぶつかった。
- × 複雑な環境構築
- × わけのわからないガイドの山
- × VRAM超過も手動で防がねば
あきらめかけたその時、
Gemma 4 E2Bをファインチューニングして。
自分のGPUに入るの?!
QLoRA: さらに4bitに圧縮して保存
省VRAM
「テキスト」から
「画像」や「音声」に切り替えるだけ。
