LLMファインチューニング比較:Unsloth vs Axolotl vs LLaMA-Factory でカスタムモデルを作る
オープンソースラボ編集部 ・ 2026年6月14日
LLMファインチューニング比較:Unsloth vs Axolotl vs LLaMA-Factory でカスタムモデルを作る
Llama・Mistral・Qwen・GemmaなどのオープンウェイトLLMを自社データでファインチューニングするOSSトレーニングフレームワークが急速に成熟しています。Unsloth(最速・メモリ効率)・Axolotl(柔軟・設定ファイル方式)・LLaMA-Factory(GUI対応・多フォーマット)の3つが2026年のLLMファインチューニングOSSデファクトスタンダードです。
LLMファインチューニングを行う理由
- ドメイン特化: 医療・法律・製造業など専門領域の用語・回答スタイルをモデルに学習させる
- コスト削減: GPT-4o APIコスト($5/M tokens)→自社モデルで$0のインファレンスを実現
- プライバシー: 機密データをOpenAIに送信せずオンプレミスで完全処理
- 高速推論: 7Bモデルをローカルで動かしてGPT-3.5相当の応答速度を$20/月のVPSで実現
主要フレームワークの概要
Unsloth
2023年公開、Python製のOSSです。GitHubスター23k+。LoRAファインチューニングをCUDA Kernelレベルで最適化して通常比2〜5倍高速・メモリ使用量40〜70%削減を実現します。LlamaCPPへの変換・GGUF出力もワンコマンドで対応します。
# Unsloth: Llama-3.1-8B を LoRA でファインチューニング
from unsloth import FastLanguageModel
from datasets import load_dataset
from trl import SFTTrainer
from transformers import TrainingArguments
# 4bit量子化でモデルをロード(VRAM 8GB以下で動作)
model, tokenizer = FastLanguageModel.from_pretrained(
model_name='unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit',
max_seq_length=2048,
dtype=None, # 自動検出(bfloat16推奨)
load_in_4bit=True, # QLoRA有効
)
# LoRAアダプターを追加(パラメーター数の1〜5%のみ学習)
model = FastLanguageModel.get_peft_model(
model,
r=16, # LoRAランク(大きいほど表現力UP・VRAM増)
target_modules=['q_proj', 'k_proj', 'v_proj', 'o_proj',
'gate_proj', 'up_proj', 'down_proj'],
lora_alpha=16,
lora_dropout=0.0,
bias='none',
use_gradient_checkpointing='unsloth', # VRAM最小化
random_state=42,
)
# ChatMLフォーマットでデータを準備
def format_chat(example):
messages = [
{'role': 'system', 'content': 'あなたは役立つAIアシスタントです。'},
{'role': 'user', 'content': example['instruction']},
{'role': 'assistant', 'content': example['output']},
]
return {'text': tokenizer.apply_chat_template(messages, tokenize=False)}
dataset = load_dataset('json', data_files={'train': 'data/train.jsonl'})
dataset = dataset['train'].map(format_chat)
# SFTTrainer でトレーニング
trainer = SFTTrainer(
model=model,
tokenizer=tokenizer,
train_dataset=dataset,
dataset_text_field='text',
max_seq_length=2048,
args=TrainingArguments(
per_device_train_batch_size=2,
gradient_accumulation_steps=4, # 実効バッチサイズ = 2*4 = 8
warmup_steps=10,
num_train_epochs=3,
learning_rate=2e-4,
fp16=True,
logging_steps=10,
output_dir='outputs/llama3-finetuned',
optim='adamw_8bit', # Unsloth最適化Adam
save_steps=100,
save_total_limit=3,
),
)
trainer.train()
# GGUF形式で保存(Ollama・llama.cppで使用可能)
model.save_pretrained_gguf(
'models/llama3-custom-q4',
tokenizer,
quantization_method='q4_k_m', # バランス型量子化
)
print('GGUFモデル保存完了')
Axolotl
2023年公開、Python製のOSSです。GitHubスター9k+。YAMLファイル1枚で様々なモデル・データフォーマット・トレーニング手法(SFT/RM/DPO/RLHF)を設定できるフレームワークです。DeepSpeed ZeRO・FSDP・マルチGPU対応が充実しており、本番規模のトレーニングに適しています。
# config.yml: Axolotlでの設定ファイル(Qwen2.5-7B DPOファインチューニング)
base_model: Qwen/Qwen2.5-7B-Instruct
model_type: AutoModelForCausalLM
tokenizer_type: AutoTokenizer
load_in_4bit: false
load_in_8bit: false
# LoRA設定
adapter: lora
lora_r: 32
lora_alpha: 64
lora_dropout: 0.05
lora_target_linear: true
# データセット
datasets:
- path: data/dpo_dataset.jsonl
type: chatml.intel
split: train
val_set_size: 0.05
output_dir: ./outputs/qwen-dpo
# トレーニング設定
sequence_len: 4096
sample_packing: true # シーケンスパッキングで効率化
pad_to_sequence_len: true
# オプティマイザー設定
optimizer: adamw_torch_fused
lr_scheduler: cosine
learning_rate: 5e-5
num_epochs: 2
micro_batch_size: 1
gradient_accumulation_steps: 8
warmup_ratio: 0.1
# DPO(Direct Preference Optimization)設定
rl: dpo
dpo_beta: 0.1
# マルチGPU(DeepSpeed ZeRO-2)
deepspeed: deepspeed_configs/zero2.json
# 評価・保存
eval_steps: 50
save_steps: 100
logging_steps: 10
save_total_limit: 3
# W&B ロギング
wandb_project: qwen-dpo-experiment
wandb_run_id: run-001
# Axolotlでトレーニング実行
pip install axolotl
# 単一GPU
python -m axolotl.cli.train config.yml
# マルチGPU(4GPU)
accelerate launch --num_processes=4 -m axolotl.cli.train config.yml
# DeepSpeedで実行
deepspeed --num_gpus=4 -m axolotl.cli.train config.yml
LLaMA-Factory
2023年公開、Python製のOSSです。GitHubスター39k+。WebUI(LLaMA Board)付きで最も多くのモデル(100+)・データフォーマット・学習手法(SFT/RM/PPO/DPO/KTO/ORPO)に対応したフレームワークです。コマンドラインとWeb UIの両方で操作できます。
# LLaMA-Factory のセットアップ
git clone https://github.com/hiyouga/LLaMA-Factory
cd LLaMA-Factory
pip install -e '.[torch,metrics]'
# Web UI でファインチューニング(LLaMA Board)
llamafactory-cli webui
# CLI でトレーニング(Gemma-2-9B SFT)
llamafactory-cli train --stage sft --model_name_or_path google/gemma-2-9b-it --do_train --dataset alpaca_gpt4_ja --template gemma --finetuning_type lora --lora_rank 16 --lora_alpha 32 --output_dir ./saves/gemma2-sft --per_device_train_batch_size 2 --gradient_accumulation_steps 4 --lr_scheduler_type cosine --logging_steps 10 --save_steps 100 --learning_rate 5e-5 --num_train_epochs 3.0 --bf16
# OllamaでカスタムモデルをGGUF変換して実行
llamafactory-cli export --model_name_or_path google/gemma-2-9b-it --adapter_name_or_path ./saves/gemma2-sft --template gemma --finetuning_type lora --export_dir ./export/gemma2-merged --export_quantization_bit 4 --export_legacy_format true
機能比較表
| 比較項目 | Unsloth | Axolotl | LLaMA-Factory |
|---|---|---|---|
| 速度 | ✅ 最速 | ✅ | ✅ |
| 対応モデル数 | 中 | 多 | ✅ 最多(100+) |
| Web UI | ❌ | ❌ | ✅ |
| DPO/RLHF | △ | ✅ | ✅ |
| マルチGPU | ✅ | ✅ | ✅ |
| GitHub Stars | 23k+ | 9k+ | 39k+ |
LLMファインチューニングはLLM Toolsカテゴリ/categories/llm-toolsのOllamaやvLLMと組み合わせて、トレーニング後のカスタムモデルをセルフホストAPIとして提供します。DevOpsカテゴリ/categories/devopsのMLflow・Weights & Biasesで実験を記録して、LoRAランク・学習率・エポック数のハイパーパラメーター探索を体系的に管理します。
FAQ
Q. どのGPUが必要ですか?最低スペックは?
A. モデルサイズによって最低VRAM要件が異なります。目安(4bit QLoRA使用時): 7Bモデル→VRAM 8GB(RTX 3080・4070・A10G)、13Bモデル→VRAM 16GB(RTX 4090・A30)、34Bモデル→VRAM 40GB(A100 40GB)、70Bモデル→VRAM 80GB×2(A100 80GB×2)。クラウドGPUコスト(2026年時点): RunPod A100 80GB→$2.5/h、Lambda Labs A100→$2.0/h、Vast.ai RTX 3090→$0.3〜0.5/h。7BモデルのLoRAファインチューニングはRTX 3090(24GB・中古$1000前後)またはコンシューマーGPUで実現可能です。
Q. QLoRAとLoRAの違いは?どちらを選べばいいですか?
A. QLoRAはベースモデルを4bit/8bit量子化してLoRAアダプターを追加する手法です。LoRA: ①ベースモデルをfloat16またはbfloat16でロード②アダプター行列(小)をfloat16で学習③精度は高いがVRAM消費大。QLoRA: ①ベースモデルをnf4(4bit)でロード→VRAM50〜70%削減②アダプターをbfloat16で学習③精度はLoRAと同等(論文での実証)。選び方: VRAM 24GB以下→QLoRA一択、VRAM 40GB+→LoRAで最大精度を狙う。Unslothのメモリ最適化(カスタムCUDAカーネル)を使うとQLoRAでもLoRAより速くなるケースがあります。
Q. ファインチューニング用データはどう準備しますか?
A. Alpaca形式(instruction/input/output)またはChatML形式(messages配列)が最も広くサポートされています。Alpaca形式: {"instruction": "〇〇してください", "input": "コンテキスト", "output": "期待する回答"}。ChatML形式: {"messages": [{"role": "system", "content": "..."}, {"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}]}。データ量目安: タスク特化(RAG・要約)→500〜2000サンプルで効果あり、スタイル変換→100〜500サンプル、ドメイン全般→5000〜50000サンプル。品質>量: データ品質が精度に最も影響するため、GPT-4oやClaude APIでデータを生成・フィルタリングしてから学習させる手法(Synthetic Data)が主流です。
Q. ファインチューニング後のモデルをOllamaで動かすには?
A. GGUFに変換してOllamaのモデルレジストリに登録します。①Unslothでmodel.save_pretrained_gguf()またはLLaMA-Factoryでllamafactory-cli export --export_quantization_bit 4でGGUF出力②Modelfileを作成: FROM ./model.gguf + SYSTEM あなたは〇〇に特化したAIアシスタントです。③ollama create my-model -f ModelfileでOllamaに登録④ollama run my-modelで対話テスト⑤curl http://localhost:11434/api/generateでOpenAI互換APIとして呼び出し。vLLM利用: vllm serve ./merged-model/ --served-model-name custom-modelでOpenAI API互換の高スループットサーバーを起動してFastAPIのバックエンドとして使用できます。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| 最速・省メモリ・GGUF出力 | Unsloth |
| YAML設定・DPO/RLHF・マルチGPU | Axolotl |
| Web UI・多モデル・多学習手法 | LLaMA-Factory |