PEFT完全ガイド|LoRA・QLoRAで家庭用GPUでもAIをカスタマイズ
「自分のデータでAIを育てたい。でも、GPUが足りない」「OpenAIのファインチューニングは高くつきそうで怖い」——そんな悩みを抱えたことはないでしょうか。
大規模AIモデルを自分好みに再学習(ファインチューニング)しようとすると、通常は数十GBのVRAMを持つサーバー級GPUが必要です。個人開発者がすぐに用意できるものではありません。
そこで注目されているのが PEFT(ペフト) です。Hugging Faceが開発・公開しているオープンソースライブラリで、LoRA・QLoRAなどの手法を使い、モデル全体ではなくごく一部のパラメータだけを学習し直すことで、家庭用GPUでも大型AIモデルのカスタマイズを実現します。完全無料・Apache 2.0ライセンスで商用利用も可能です。
この記事では次のことをすべて解説します。
- PEFTで何ができるようになるか(具体的なユースケース)
- LoRA・QLoRAなど主要手法の違い
- インストールから動作確認までの手順とコード例
- 全体ファインチューニング・OpenAIファインチューニングとの比較
- どんな人に向く/向かないかの判断基準
---
PEFTで何ができるようになるか
PEFTを使うと、手持ちのNVIDIA GPU(VRAM 8〜24GB程度)で、数十億パラメータの大型言語モデルを自分のデータで追加学習できます。たとえば次のようなことが現実的になります。
- 社内マニュアルや過去の問い合わせログを読ませて、自社専用のチャットボットを作る
- 特定の文体・トーンで文章を生成するモデルを育てる
- 医療・法律・専門業界の用語に強いモデルを作る
- 音声認識モデル(Whisperなど)を特定の話者・方言に最適化する
- 画像生成モデル(Stable Diffusionなど)を特定の画風でファインチューニングする
従来、こうした作業は「クラウドの高額GPU」か「数十万円のワークステーション」がないと難しいとされていました。PEFTはその壁を大幅に下げます。
> 関連: AIで音声認識モデルをカスタマイズしたい方は Whisper の記事もあわせてご覧ください。
---
PEFTの仕組み——なぜ少ないGPUで動くのか
通常のファインチューニングとの違い
普通のファインチューニングは、モデルの全パラメータを更新します。7Bパラメータのモデルなら70億個の数値をすべて書き換えるため、膨大なメモリと計算資源が必要です。
PEFTはこれを根本から変えます。
元のモデルの重みは凍結(固定)したまま、小さな「アダプター」と呼ばれる追加レイヤーだけを学習します。アダプターは元モデルに比べてごく小さく、学習が終わったら元のモデルと「合体」して使えます。
イメージとしては——
> 料理の例え:既存の料理人(元モデル)のすべてのレシピを書き換えるのではなく、「この店でだけ使う特製タレ(アダプター)」を追加で覚えさせるようなもの。タレを変えれば別の料理スタイルに素早く切り替えられます。
主な学習手法の一覧
PEFTライブラリは複数の手法をサポートしています。
| 手法 | 概要 | 特徴 |
|---|---|---|
| LoRA | 重み行列を低ランク行列で近似して更新 | 最も普及・バランスが良い |
| QLoRA | モデルを4bit量子化した上でLoRAを適用 | VRAMをさらに削減。家庭用GPUに最適 |
| AdaLoRA | ランク(学習の深さ)を自動調整 | 重要な部分に集中して学習 |
| IA³ | アテンション・MLPに小さなスケーラーを追加 | パラメータ数が極めて少ない |
| Prefix Tuning | 入力の先頭に学習済みトークンを付加 | モデル本体を一切変更しない |
| Prompt Tuning | ソフトプロンプト(仮想的な指示文)を学習 | 非常に軽量 |
| DoRA | 重みを「大きさ」と「方向」に分解して学習 | LoRAをさらに改良した新手法 |
初心者が最初に使うべきはほぼ LoRA または QLoRA です。VRAMが16GB以下なら QLoRA が特に有効です。
どれくらいパラメータが減るのか
PEFTでは、モデル全体のパラメータのうちごく一部だけを学習します。たとえば、
bigscience/mt0-large(12億パラメータ)の場合、LoRAで学習するのは全体の わずか0.19% だけです- チェックポイント(学習済みファイル)のサイズも、元モデルが11GBなのに対しLoRAアダプターは 19MB 程度になります
この小ささが、家庭用GPUでの学習と、複数タスクのアダプターを低コストで管理できる理由です。
---
既存ツール・手法との比較
PEFTをどのような場面で選ぶべきか、主な選択肢と比較します。
| 比較項目 | PEFT(LoRA/QLoRA) | フルファインチューニング | OpenAI ファインチューニング |
|---|---|---|---|
| コスト | 無料(OSS) | 無料(OSS)だがGPU費用大 | 従量課金(公式サイト参照) |
| 必要VRAM | 8〜24GB(QLoRAなら少なめ) | 100GB以上(7Bモデル) | 不要(クラウド処理) |
| 精度 | フルFTと同等〜やや劣る | 最高 | GPT系モデル限定で高精度 |
| データのプライバシー | ローカル完結 | ローカル完結 | データがOpenAIに送られる |
| 使えるモデル | Llama・Mistral・Qwen等多数 | 同左 | GPT-4o mini等に限定 |
| ライセンス | Apache 2.0(商用可) | モデルによる | OpenAI利用規約に従う |
| 学習ファイルサイズ | 数MB〜数十MB | 元モデルと同サイズ(数GB〜) | クラウド管理(ユーザー不要) |
| セットアップ難易度 | 中(Pythonの基礎が必要) | 高 | 低(APIのみ) |
PEFTが優位な場面は「プライバシー重視」「複数タスクのアダプターを管理したい」「コストを抑えたい」「OpenAI以外のオープンモデルを使いたい」です。
> 関連: ローカルでLLMを動かす環境構築には llama.cpp も参照してください。
---
どんな人に向く?向かない?
PEFTが向いている人
- 個人開発者・スモールチームで、クラウドGPU費用をかけたくない人
- NVIDIA GPU(VRAM 8GB以上)をすでに持っている、または入手できる人
- 自社・自分のデータを外部サービスに送りたくない人
- Llama、Mistral、Qwen、Gemmaなどオープンウェイトモデルをカスタマイズしたい人
- Pythonの基礎(pipインストール、スクリプト実行)ができる人
- 複数の用途ごとにアダプターを切り替えて使いたい人
PEFTが向いていない人
- Pythonをまったく触ったことがなく、セットアップに時間をかけたくない人 → Dify などのノーコードAI構築ツールから始める方が現実的です(Dify・Flowise を参照)
- GPUを持っておらず、Google Colab等のクラウド環境も使いたくない人
- 「とにかく今すぐAPIで使いたい」という人 → OpenAI ファインチューニングの方が速い
- モデルをゼロから事前学習(プレトレーニング)したい人 → PEFTはあくまで「追加学習」に特化しています
---
インストールから動作確認まで(手順付き)
前提条件
以下を事前に確認・準備してください。
- OS: Linux 推奨(Windows は WSL2 経由でも可)
- Python: 3.10以上(最新リリースのPEFTはPython 3.9のサポートを終了しています)
- GPU: NVIDIA GPU(VRAM 8GB以上推奨)。CPUのみでも動きますが学習は非常に低速です
- CUDA: NVIDIAドライバーがインストール済みであること(
nvidia-smiコマンドで確認可能)
ステップ1:仮想環境の作成
ライブラリの競合を防ぐため、プロジェクト専用の仮想環境を作ります。
# 仮想環境を作成(名前は任意)
python -m venv peft-env
# 仮想環境を有効化(Linux/Mac)
source peft-env/bin/activate
# 仮想環境を有効化(Windows)
peft-env\Scripts\activate
ステップ2:PyTorchのインストール
PEFTはPyTorchの上で動きます。まずPyTorchをインストールしてください(CUDA対応版を推奨)。
# CUDA 12.1対応版の例(自分のCUDAバージョンに合わせて変更してください)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
> 自分のCUDAバージョンは nvidia-smi コマンドの出力で確認できます。PyTorchの公式サイト(pytorch.org)でバージョンに合ったコマンドを生成してください。
ステップ3:PEFTと関連ライブラリのインストール
# PEFTとHugging Face関連ライブラリをインストール
pip install peft transformers accelerate
# QLoRA(4bit量子化)を使う場合はbitsandbytesも追加
pip install bitsandbytes
ステップ4:LoRAの動作確認(最小コード例)
以下のコードは、Qwen2.5-3Bモデルに対してLoRAアダプターを設定し、学習対象パラメータ数を確認する最小サンプルです。実際の学習前の「設定確認」として使えます。
import torch
from transformers import AutoModelForCausalLM
from peft import LoraConfig, TaskType, get_peft_model
# 使用するベースモデル(Hugging Face Hub上の任意のモデルID)
model_id = "Qwen/Qwen2.5-3B-Instruct"
# ベースモデルを読み込む
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="auto" # GPUが複数あれば自動で分散
)
# LoRAの設定
# r: ランク(低いほど軽量、高いほど表現力UP。8〜32が一般的)
# lora_alpha: スケーリング係数(通常はr×2程度)
peft_config = LoraConfig(
r=16,
lora_alpha=32,
task_type=TaskType.CAUSAL_LM,
)
# LoRAをモデルに適用
model = get_peft_model(model, peft_config)
# 学習対象パラメータ数を確認
model.print_trainable_parameters()
# 出力例: trainable params: 3,686,400 || all params: 3,089,625,088 || trainable%: 0.1193
# 学習後、アダプターを保存
# model.save_pretrained("my-lora-adapter")
trainable% の数値を確認してください。全パラメータの 0.1〜1%程度 になっていれば正常です。これだけで学習するパラメータが劇的に減っていることがわかります。
ステップ5:保存したアダプターを読み込む
from transformers import AutoModelForCausalLM
from peft import PeftModel
# ベースモデルを読み込み
base_model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-3B-Instruct")
# 学習済みLoRAアダプターを重ねる
model = PeftModel.from_pretrained(base_model, "my-lora-adapter")
# アダプターとベースモデルを統合して推論速度を上げる(任意)
model = model.merge_and_unload()
> 関連: 学習したモデルのUIを素早く作りたい場合は Gradio が便利です。
---
PEFTと組み合わせると便利なツール・エコシステム
PEFTは単体でも使えますが、以下と組み合わせるとさらに強力になります。
Hugging Face TRL:強化学習(RLHF)を使った指示チューニングに対応。PEFTと統合されており、--use_peft フラグ一つでLoRA/QLoRAでの学習が可能です。
bitsandbytes:QLoRAを実現するための量子化ライブラリ。これを使うと、7Bモデルを4bitに圧縮してからLoRAで学習できます。
Hugging Face Diffusers:画像生成モデルのLoRAファインチューニングに対応。特定の画風・キャラクターのLoRAを作成できます。
Gradio / Streamlit:学習済みモデルのデモUIを素早く構築できます(Gradio 参照)。
RAGFlow・Dify:ファインチューニングではなく「手持ちの資料をAIに読ませて答えさせる仕組み(RAG)」を作りたい場合は、RAGFlow や Dify の方が適しています。用途によって使い分けましょう。
---
よくある質問(FAQ)
Q1. PEFTは完全無料で使えますか?商用利用は可能ですか?
A. PEFTライブラリ自体は完全無料のOSS(Apache 2.0ライセンス)です。商用利用も可能です。ただし、ベースモデルのライセンスは別途確認が必要です。たとえばMeta LlamaはLlamaライセンス、Qwenは独自ライセンスが適用されます。商用プロダクトに組み込む場合は、使用するベースモデルの利用規約を必ず確認してください。
Q2. GPUなしで(CPUのみで)動きますか?
A. 技術的には動きますが、現実的な時間では学習が完了しません。たとえば7Bモデルの場合、GPUなら数時間かかる学習がCPUだと数週間かかることもあります。軽い動作確認程度であればCPUでも試せますが、実用的な学習にはGPU(最低でもVRAM 8GB)を用意することを強く推奨します。Google ColabのT4 GPU(無料枠あり)を活用するのも選択肢の一つです。
Q3. LoRAとQLoRAはどちらを使えばいいですか?
A. 基本的にはVRAMの量で選んでください。
- VRAM 16GB以上 → LoRAで十分
- VRAM 8〜15GB → QLoRAを検討(4bit量子化でメモリを節約)
- VRAM 24GB(RTX 4090等) → QLoRAで7Bモデルのファインチューニングが比較的快適に動く
QLoRAはLoRAと比べて量子化のオーバーヘッドがあるため、学習速度はやや落ちますが、精度は多くのタスクでLoRAと遜色ないレベルに収まります。
Q4. フルファインチューニングと比べて、精度は落ちますか?
A. 多くの用途では同等の精度が出ますが、場合によっては劣ります。指示追従(インストラクションチューニング)や文体の変更など「行動を変える」タスクではLoRAは非常に優秀です。一方、「大量の新しい専門知識を一から覚えさせる」ような場合は、フルファインチューニングの方が有利なことがあります。また、PEFTには「学習前の知識(元の能力)を保持しやすい」という副次的なメリットもあります。フルファインチューニングでは元の能力を忘れてしまう「壊滅的忘却(Catastrophic Forgetting)」が起きやすいためです。
---
まとめ——次のアクション
PEFTは、家庭用GPUでも大型AIモデルのカスタマイズを現実的にする、個人開発者にとって強力な選択肢です。
| あなたの状況 | 次のアクション |
|---|---|
| まず試してみたい | Google ColabのGPU環境でLoRAの最小コードを動かす |
| NVIDIAのGPU(8GB以上)がある | ローカルにPEFTをインストールし、好きなオープンモデルでQLoRAを試す |
| GPUがなく、コードも書きたくない | Dify や RAGFlow などノーコードのRAGツールを検討する |
| 画像生成モデルをカスタマイズしたい | PEFTとDiffusersを組み合わせたLoRAを試す(ComfyUI も参照) |
| AIアシスタント環境を整えたい | LibreChat でローカルモデルを使う環境を整備する |
公式リソース
- 公式ドキュメント: huggingface.co/docs/peft
- GitHub リポジトリ: github.com/huggingface/peft
- Hugging Face Hub のPEFTモデル一覧: huggingface.co/models?library=peft
まずは公式ドキュメントのQuick Tourを眺めながら、Google ColabでLoRAの最小コードを動かすことから始めてみてください。動く体験を1回積むと、その後の理解がぐっと深まります。