重要なポイント
- LoRA = 事前学習済みモデルに小さなトレーニング可能な層を追加。モデルの重量の1~5%のみがトレーニング可能で、VRAM と時間を大幅に削減。
- ファインチューニング要件:500~1000の高品質な例、8~16GB VRAM、1~4時間のトレーニング時間。
- 最高のツール:Unsloth(最速)、Hugging Face TRL、Axolotl(最も柔軟)。
- LoRA ランク (r): 低い (r=8) はより小さく、より高速。高い (r=64) はより表現力がある。デフォルト: r=16~32。
- 2026年4月現在、LoRA は本番対応で、推論エンジン全体で広くサポートされています。
LoRA の仕組み
LoRA は、元のモデルの重みの横に小さな「アダプター」マトリックスを追加します。 トレーニング中、アダプターのみが更新されます。元の重みは凍結されたままです。
例:13B モデルには 130 億の重みがあります。LoRA は 5000 万のトレーニング可能なパラメータを追加するだけです(元の約0.4%)。トレーニングは 100 倍高速です。
推論時、アダプター出力は行列乗算を介してメインモデル出力と融合します。最小限の速度低下(約5%)。
結果:ドメイン固有のモデルがタスクでより良く機能し、26GB ではなく 8GB VRAM のみが必要です。
QLoRA(4ビット量子化 LoRA)とは
QLoRA は LoRA と 4 ビット量子化を組み合わせます — ベースモデルは 4 ビット(QLoRA)でロードされ、アダプターのみ 16 ビットでトレーニングされます。 これにより VRAM 要件が半分になります:
2026年4月現在、QLoRA はコンシューマーハードウェアの標準です。 上記のコード例の Unsloth の `load_in_4bit=True` フラグは QLoRA を自動的に有効にします。完全な LoRA と比較した 2% の品質差は、ほとんどのドメイン適応タスクでは無視できます。
LoRA (16 ビット) vs QLoRA (4 ビット) をいつ使用するか:
• 最大精度が必要なタスク(医療、法的契約分析)
• 16GB 以上の VRAM が利用可能
• 3B 以下のモデルのファインチューニング(QLoRA の節約は小さいサイズでは最小限)
| 方法 | 7B モデル VRAM | 13B モデル VRAM | フルとの比較品質 |
|---|---|---|---|
| フルファインチューニング | 28GB | 52GB | 100%(基準) |
| LoRA (16 ビットベース) | 16GB | 30GB | 約97% |
| QLoRA (4 ビットベース) | 8GB | 14GB | 約95% |
ファインチューニング vs RAG
決定マトリックス:
LoRAファインチューニングに投資する前に、より良いプロンプティングで問題が解決できないか確認してください——プロンプトエンジニアリングはより速く、可逆的で、モデルに依存しません。完全な意思決定フレームワークについては、プロンプトエンジニアリング vs ファインチューニング:決め方をご覧ください。
ファインチューニングは、オフラインでもコーディングワークフローを生産的に保つ手段の一つです。モデル、IDE、パッケージキャッシュ、ドキュメントミラーを含むより広いオフライン構成については、インターネットなしのローカルコーディング LLMを参照してください。
| 基準 | ファインチューニング | RAG |
|---|---|---|
| ドキュメント変更頻度 | 年1回以下 | 週1回以上 |
| 知識要件 | モデルが深い理解を必要とする | 検索で十分 |
| トレーニングデータ利用可能 | 500+ 高品質例が必要 | あらゆるドキュメント |
| コスト(長期) | ワンタイム($50~200) | 継続的な埋め込み |
| レイテンシ | より高速(検索なし) | より遅い(検索 + LLM) |
| ベスト用途 | コード、創作、ドメインスタイル | ナレッジベース、Q&A |
トレーニングデータの準備方法
トレーニングデータの品質がファインチューニング成功を決定します。 悪いデータ=悪いモデル。
最小: 500例。各例=入力+期待される出力。
最適: 1000~5000例。より多くのデータ=より高い精度。
フォーマット: JSON または JSONL。各行=1つのトレーニング例。
[\n {"instruction": "英語に翻訳", "input": "Bonjour le monde", "output": "Hello world"},\n {"instruction": "要約", "input": "長いテキスト...", "output": "要約..."},\n {"instruction": "コードレビュー", "input": "Python コード...", "output": "レビューコメント..."}\n]\n\n# または instruction のみフォーマット:\n[\n {"text": "<|user|>英語に翻訳\nBonjour<|assistant|>Hello"},\n {"text": "<|user|>要約\nテキスト<|assistant|>要約"}\n]Unsloth でのファインチューニング設定
Unsloth は最速の LoRA フレームワークです(標準トレーニングより最大2倍高速、unsloth.ai 公式ベンチマーク):
# unsloth をインストール\npip install unsloth[colab-new] xformers bitsandbytes\n\nfrom unsloth import FastLanguageModel\nfrom datasets import load_dataset\n\n# LoRA でベースモデルをロード\nmodel, tokenizer = FastLanguageModel.from_pretrained(\n model_name="unsloth/llama-3.1-8b-bnb-4bit",\n max_seq_length=2048,\n load_in_4bit=True,\n lora_r=16, lora_alpha=32,\n lora_dropout=0.05\n)\n\n# トレーニングデータをロード\ndataset = load_dataset("json", data_files="training.jsonl")\n\n# トレーナーを設定\nfrom trl import SFTTrainer\ntrainer = SFTTrainer(\n model=model,\n tokenizer=tokenizer,\n train_dataset=dataset["train"],\n dataset_text_field="text",\n max_seq_length=2048,\n args=TrainingArguments(\n per_device_train_batch_size=4,\n num_train_epochs=3,\n learning_rate=2e-4,\n output_dir="output"\n )\n)\n\n# トレーニング\ntrainer.train()LoRA ファインチューニングの主要ハイパーパラメータ
| ハイパーパラメータ | 推奨値 | 典型的な範囲 | 効果 |
|---|---|---|---|
| learning_rate | 2e-4 | 1e-5 から 1e-3 | 低い=安定、遅い収束 |
| lora_r (ランク) | 16 | 4 から 64 | 高い=より表現力豊か、遅い |
| lora_alpha | 32 | 8 から 256 | 高い=より強い LoRA 効果 |
| num_train_epochs | 3 | 1 から 10 | より多い=過学習のリスク |
| batch_size | 4 | 1 から 32 | 大きい=高速トレーニング、VRAM 増加 |
| warmup_steps | 100 | 0 から 1000 | 段階的 LR 増加、トレーニング安定化 |
ファインチューニングされたモデルの評価方法
トレーニングロス: エポック全体で減少する必要があります。フラットな場合、学習率が低すぎる可能性があります。
検証ロス: 減少する必要がありますが、トレーニングロスより上に留まります(正常)。増加した場合、過学習。
手動テスト: ファインチューニングされたモデルをテスト例で実行し、出力と期待される結果を比較します。
ベンチマークタスク: 標準ベンチマーク(MMLU、HumanEval)を使用してパフォーマンス向上を測定します。
よくあるファインチューニング間違い
- トレーニング例が少なすぎる。 <200例は過学習につながることが多い。少なくとも500を収集してください。
- エポックが多すぎる。 モデルはデータを記憶します。汎化可能なパターンを学びません。最大3~5エポック。
- 未見のデータで検証しない。 常にデータを分割してください(80/20)。過学習を検出するために頻繁に検証します。
- ファインチューニングと評価に同じデータを使用。 トレーニングデータで評価した場合、報告される精度は意味がありません。
- チェックポイントを保存しない。 トレーニングは数時間かかることがあります。クラッシュから回復するため、毎エポック保存します。
LoRA ファインチューニングについてよくある質問
トレーニングデータはどのくらい必要ですか?
最小500例、最適1000~5000例。品質が量より優先。100の高品質例は1000の低品質例より優れています。
ノートパソコンでファインチューニングできますか?
はい。4ビット量子化と LoRA を使用してください。7B モデルは 8GB VRAM が必要で、CPU(遅い)では1~2時間、GPU では10~15分かかります。
LoRA アダプターをベースモデルにマージするにはどうすればよいですか?
Unsloth または HF Transformers を使用:`model.merge_and_unload()`。単一ファイル(7B で約3~4GB)を作成し、推論の準備ができます。
複数の LoRA アダプターを組み合わせることはできますか?
はい、制限付き。連続適用のためにスタック、または DoRA などのアダプター構成技術を使用します。
ファインチューニングされたモデルはドメイン知識に関して RAG より優れていますか?
ほとんどのタスクではい。ファインチューニングされたモデルはドメイン概念を深く理解します。ドキュメントが大きく頻繁に変わる場合、RAG が優れています。
LoRA と QLoRA の違いは何ですか?
LoRA はベースモデルを16ビットでロードし、小さなアダプター層をトレーニングします。QLoRA は4ビットでロードし、16ビットでアダプターをトレーニングします。QLoRA は約半分の VRAM を使用:7B で8GB vs 16GB。品質差は約2%で、ほとんどのタスクでは無視できます。Unsloth は `load_in_4bit=True` で QLoRA を有効にします。
Ollama でファインチューニングされた LoRA モデルを使用するにはどうすればよいですか?
トレーニング後、アダプターをマージ:`model.merge_and_unload()`。llama.cpp の `convert.py` を使用して GGUF に変換します。GGUF ファイルを指す Ollama Modelfile を作成:`FROM ./my-finetuned-model.gguf`。次に:`ollama create my-model -f Modelfile` と `ollama run my-model`。ファインチューニングされたモデルはあらゆる Ollama モデルと同じに機能します。
コンシューマーハードウェア上で LoRA を使用して Llama 3.3 70B をファインチューニングできますか?
はい、QLoRA を使用。Llama 3.3 70B は4ビットで約40GB VRAM が必要で、デュアル RTX 4090(2×24GB)または単一 A100 80GB に適合します。1000例で4~8時間のトレーニング。ほとんどのユーザーにとって、7B または 13B のファインチューニングがより実用的で、ドメインタスクで 70B の品質向上の 90% 以上を提供します。
LoRA ファインチューニングに最適なツールはどれですか?
Unsloth はコンシューマーハードウェアで最速です — 標準トレーニングより 2 倍高速で 70% 少ない VRAM。HF TRL with PEFT は最も広く使用されています。Axolotl は設定の柔軟性が必要な上級ユーザーに最適です。
LoRA アダプター重みはどのファイル形式を使用しますか?
LoRA アダプターは Safetensors ファイル(例:adapter_model.safetensors)として adapter_config.json とともに保存されます。合計サイズは典型的には50~500MB で、ランク(lora_r)と適応されたレイヤー数に依存します。
出典
- Hu, E. et al. (2021). "LoRA: Low-Rank Adaptation of Large Language Models." https://arxiv.org/abs/2106.09685 — 元のLoRA論文で、0.4%のトレーニング可能パラメータが完全なファインチューニング品質と一致することを示しています。
- Dettmers, T. et al. (2023). "QLoRA: Efficient Finetuning of Quantized LLMs." https://arxiv.org/abs/2305.14314 — QLoRA論文:4ビット量子化ベースモデル + 16ビット LoRA アダプターが VRAM 要件を半分にします。
- Unsloth. (2026). "Train LLMs up to 2× faster with 70% less VRAM (Unsloth)." https://github.com/unslothai/unsloth — 最速の LoRA フレームワークで、Llama 3.x、Qwen3、Mistral をサポートし、最大2倍のトレーニング高速化を提供します。
- Hugging Face. (2025). "TRL: Transformer Reinforcement Learning." https://github.com/huggingface/trl — LoRA アダプター サポート付きの教師あり ファインチューニング用 SFTTrainer。