AI

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

機能比較表

比較項目UnslothAxolotlLLaMA-Factory
速度✅ 最速
対応モデル数✅ 最多(100+)
Web UI
DPO/RLHF
マルチGPU
GitHub Stars23k+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・マルチGPUAxolotl
Web UI・多モデル・多学習手法LLaMA-Factory

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。