取り組みの背景:なぜ Gemma 4 をファインチューニングするのか
Google が 2026 年 4 月に公開した Gemma 4 は、マルチモーダル対応・高い推論精度・商用利用可能なライセンスという三つの特長を備えたオープンソース LLM です。Antigravity との親和性も高く、多くの開発者が活用しています。
しかし、汎用モデルをそのまま使うだけでは物足りないケースもあります。
- 社内専門用語や独自ドメインへの対応が弱い
- 特定のフォーマット(JSON 出力・コードスタイル等)で精度が安定しない
- プライバシー上、クラウド API に送りたくないデータを扱う必要がある
こうした課題を解決するのが ファインチューニング です。ここではGemma 4 を LoRA / QLoRA でファインチューニングし、その結果を Antigravity 上でローカル LLM として活用するまでの全工程をご紹介します。
まず Gemma 4 の API 連携の基礎を押さえたい方は、Antigravity × Gemma 4 API 実践実装ガイド もご参照ください。
Gemma 4 ファインチューニングの基礎知識
LoRA と QLoRA の違い
フルファインチューニングはモデル全パラメータを更新するため、数十 GB の VRAM が必要です。個人開発の現場では現実的ではありません。そこで登場するのが LoRA(Low-Rank Adaptation) と QLoRA(Quantized LoRA) です。
LoRA の仕組み:
- 元のモデルの重みを凍結し、小さな「アダプター行列」だけを学習する
- 学習対象パラメータが全体の 0.1〜1% 程度に削減できる
- 推論時はアダプターを元の重みにマージして使う
QLoRA の特長:
- LoRA に 4-bit 量子化を組み合わせることで VRAM 消費をさらに削減
- 16 GB 未満の GPU でも Gemma 4 の 7B クラスモデルを学習可能
- 精度の低下は最小限(フルファインチューニング比で数%程度)
実際の開発では、まず QLoRA で試してみることを推奨します。精度が不足する場合に LoRA(bf16)へ移行するフローが効率的です。
必要な環境
- GPU: VRAM 16 GB 以上(Google Colab Pro / A100 推奨)または Apple Silicon Mac(Metal バックエンド使用)
- Python: 3.11 以上
- ライブラリ:
transformers,peft,trl,bitsandbytes,datasets - Antigravity: v1.20 以降(カスタムモデルのローカル接続サポート済み)
環境準備:Python 環境と Antigravity の設定
Python パッケージのインストール
# 必要パッケージのインストール
pip install transformers==4.48.0 peft==0.13.0 trl==0.13.0 \
bitsandbytes==0.44.1 datasets==3.2.0 accelerate==1.2.0
# Gemma 4 は HuggingFace Hub からダウンロード
huggingface-cli login
# → HuggingFace のアクセストークンを入力
# → google/gemma-4-7b-it へのアクセス許可(要 HF アカウント)Antigravity のカスタムモデル設定
Antigravity の設定ファイル(~/.antigravity/config.json)に以下を追記します。
{
"models": {
"custom": [
{
"name": "gemma4-finetuned",
"provider": "ollama",
"endpoint": "http://localhost:11434",
"modelId": "gemma4-custom:latest"
}
]
}
}ファインチューニング後のモデルを Ollama 経由で提供することで、Antigravity のコード補完・チャット機能をカスタムモデルで動作させられます。
データセットの作成と Antigravity での効率化
データセット形式
Gemma 4 のインストラクションチューニング(SFT: Supervised Fine-Tuning)では、以下の形式のデータセットを用意します。
# データセットのサンプル構造
dataset_sample = [
{
"instruction": "次のコードのバグを修正し、修正理由を説明してください。",
"input": "def divide(a, b):\n return a / b",
"output": "def divide(a, b):\n if b == 0:\n raise ValueError('ゼロ除算は許可されていません')\n return a / b\n\n# 修正理由: ゼロ除算による ZeroDivisionError を防ぐため、事前チェックを追加しました。"
},
# ... 最低 100 件以上を推奨
]Antigravity でデータセット作成を効率化
Antigravity のマルチファイル編集機能を活用すると、データセット作成が格段に効率化されます。
# generate_dataset.py - Antigravity のエージェント機能で自動生成するスクリプト例
import json
import random
def create_coding_sample(code_snippet: str, language: str) -> dict:
"""コードスニペットからファインチューニング用サンプルを生成する"""
templates = [
f"以下の{language}コードをレビューし、改善点を提案してください。",
f"以下の{language}コードにドキュメントを追加してください。",
f"以下の{language}コードのパフォーマンスを改善してください。",
]
return {
"instruction": random.choice(templates),
"input": code_snippet,
"output": "(実際のデータでは人間が作成した高品質な回答を入れる)"
}
# 少なくとも 500〜1,000 件のサンプルを用意することを推奨Antigravity 上でこのスクリプトを開き、「エージェントに指示する」機能を使って「既存のコードベースからレビュータスクのサンプルを 200 件生成して」と依頼すると、AI が自動的にデータセットを拡充してくれます。
QLoRA によるファインチューニング実行
# fine_tune_gemma4.py
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
from peft import LoraConfig, get_peft_model, TaskType
from trl import SFTTrainer, SFTConfig
from datasets import load_dataset
# 1. 量子化設定(QLoRA: 4-bit)
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True,
)
# 2. モデルとトークナイザーのロード
model_id = "google/gemma-4-7b-it"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
quantization_config=bnb_config,
device_map="auto",
)
# 3. LoRA アダプターの設定
lora_config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
lora_dropout=0.05,
bias="none",
task_type=TaskType.CAUSAL_LM,
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# 出力例: trainable params: 83,886,080 || all params: 7,262,437,376 || trainable%: 1.155
# 4. データセットの読み込み
dataset = load_dataset("json", data_files="my_dataset.jsonl", split="train")
# 5. トレーニング設定
training_args = SFTConfig(
output_dir="./gemma4-finetuned",
num_train_epochs=3,
per_device_train_batch_size=2,
gradient_accumulation_steps=8,
learning_rate=2e-4,
warmup_ratio=0.1,
lr_scheduler_type="cosine",
save_steps=100,
logging_steps=10,
bf16=True,
max_seq_length=2048,
)
trainer = SFTTrainer(
model=model,
args=training_args,
train_dataset=dataset,
)
trainer.train()
# 6. アダプターの保存
model.save_pretrained("./gemma4-lora-adapter")
tokenizer.save_pretrained("./gemma4-lora-adapter")
print("LoRA アダプターを保存しました: ./gemma4-lora-adapter")学習時間の目安として、A100 GPU(40 GB VRAM)で 500 件のデータセット・3 エポックで約 30〜60 分です。Google Colab Pro で実行可能なコストです。
カスタムモデルを Antigravity で使う
ファインチューニング後のモデルを Ollama 経由で Antigravity に接続するには、まずモデルをエクスポートします。
# 1. LoRA アダプターを元モデルにマージ
python -c "
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer
base = AutoModelForCausalLM.from_pretrained('google/gemma-4-7b-it')
model = PeftModel.from_pretrained(base, './gemma4-lora-adapter')
model.merge_and_unload().save_pretrained('./gemma4-merged')
AutoTokenizer.from_pretrained('google/gemma-4-7b-it').save_pretrained('./gemma4-merged')
"
# 2. GGUF 形式に変換(llama.cpp の convert スクリプトを使用)
python llama.cpp/convert_hf_to_gguf.py ./gemma4-merged \
--outfile gemma4-custom.gguf --outtype q4_k_m
# 3. Ollama に登録して起動確認
cat > Modelfile << 'EOF'
FROM ./gemma4-custom.gguf
PARAMETER temperature 0.7
SYSTEM あなたは優秀なソフトウェアエンジニアです。日本語で簡潔に答えてください。
EOF
ollama create gemma4-custom -f Modelfile
ollama run gemma4-custom "テストメッセージです"これで Antigravity の設定から gemma4-custom を選択すれば、ファインチューニング済みモデルがコード補完・チャットに使えるようになります。
さらに高度なプロダクション環境での活用については、Antigravity × Gemma 4 完全ガイド:プロダクション・エージェントをローカルLLMで構築する で詳しく解説しています。
よくあるエラーと対処法
CUDA out of memory:
QLoRA の batch size を 1 に減らし、gradient_accumulation_steps を 16 に増やすことで実効バッチサイズを維持しつつ VRAM 消費を削減できます。また、max_seq_length を 1024 に下げることも効果的です。
bitsandbytes が見つからないエラー:
pip install bitsandbytes --upgrade を実行してください。Mac(Apple Silicon)では bitsandbytes の代わりに Metal バックエンドを使う方法があります。
Ollama でモデルが起動しない:
GGUF ファイルのサイズが大きすぎる場合(例: q8_0 形式)、より軽量な量子化形式(q4_k_m)を試してください。ollama list でモデルが正しく登録されているか確認しましょう。
まとめ
ここではGemma 4 を QLoRA でファインチューニングし、Ollama 経由で Antigravity に組み込むまでの全工程を解説しました。
- LoRA / QLoRA: 少ない VRAM でも効率的に学習できる手法
- データセット作成: Antigravity のエージェント機能で効率化が可能
- Ollama 連携: カスタムモデルを Antigravity のローカル LLM として活用
自社ドメインに特化した AI アシスタントを手元の開発環境で動かすことは、プライバシーとパフォーマンスの両立という観点から非常に価値があります。ぜひ本記事のコードをベースに、自分だけの Gemma 4 カスタムモデルを作成してみてください。
ファインチューニングの理論的背景をさらに深く