【初心者向け】LoRA(Low-Rank Adaptation)の作り方をゼロから解説

最終更新日: 2025-02-13

「Stable DiffusionやGPTのような大規模AIモデルを、自分の手元で微調整したい」「専門的な環境構築から教えてほしい」といったニーズをお持ちの方に向けて本記事では環境構築の初歩的なステップから、LoRAの仕組み・実装・チューニング方法まで、幅広くやさしく解説します。

また、弊社では「AI使いたいが、どのような適用領域があるのかわからない…」「AI導入の際どのサービス提供者や開発企業を組めばいいかわからない…」という事業者の皆様に、マッキンゼーやBCGで生成AIプロジェクトを経験したエキスパートが完全無料で相談に乗っております。

興味のある方はぜひ以下のリンクをご覧ください:
代表への無料相談はこちら

仲 思成
監修者: 仲 思成

AI導入.comを提供する株式会社FirstShift 代表取締役。トロント大学コンピューターサイエンス学科卒業。株式会社ANIFTYを創業後、世界初のブロックチェーンサービスを開発し、東証プライム上場企業に売却。その後、マッキンゼー・アンド・カンパニーにコンサルタントとして入社。マッキンゼー日本オフィス初の生成AIプロジェクトに従事後、株式会社FirstShiftを創業。

AI事業者の選定を完全無料でサポート。今すぐ相談する

1. LoRA(Low-Rank Adaptation)とは?

LoRA(Low-Rank Adaptation)は、大規模モデルをわずかな追加パラメータで微調整できる革新的な手法です。Microsoftの研究者により提案され、近年の大規模言語モデル(GPT系)や画像生成モデル(Stable Diffusion等)を、低リソースで効率良く再学習できる点が注目されています。

ざっくり言うと

  • 従来、数億〜数百億パラメータのモデル全体を微調整するには膨大なGPUメモリが必要だった
  • LoRAは元の重みは凍結し、代わりに低ランク行列(小さなパラメータ)だけを学習する
  • 更新すべきパラメータ数が大幅に減るため、少ないメモリや短い時間で微調整可能

LoRAに関する詳しい解説記事はこちら

【徹底解説】LoRAとは?仕組みや作り方まで完全ガイド
【徹底解説】LoRAとは?仕組みや作り方まで完全ガイド

2. 環境構築の手順:初心者向け解説

LoRAを試すには、Python環境GPU(できればNVIDIA)があるとスムーズです。ここでは典型的な構成例を紹介します。

2-1. GPUの準備

  • NVIDIA GPU + CUDA対応ドライバ
    • GPUドライバをインストールし、CUDA Toolkit(対応するバージョン)を導入します。
    • WindowsならNVIDIA公式サイトから適切なドライバをダウンロードしましょう。
    • Linuxの場合はディストリビューションごとにインストール手順が異なるため、公式ドキュメントを参照してください。

GPUが無い場合でもCPUで動かすことはできますが、大規模モデルの学習は非常に遅くなるのであまり現実的ではありません。ColabなどのクラウドGPUを利用する手もあります。

2-2. Python環境を作る

Pythonを扱うのが初めてなら、Anacondaminicondaを使うと便利です。

  1. Anaconda/Minicondaをインストール
    ダウンロードしてインストーラを実行するだけです。

  2. 仮想環境を作成
    例として「lora-env」という名前の環境を作る場合:

    conda create -n lora-env python=3.9
    conda activate lora-env
    
  3. PyTorchやその他ライブラリを導入
    たとえばPyTorch(CUDA対応版)を入れるなら:

    pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
    

    cu117はCUDA 11.7用ホイールの例です。お使いのCUDAバージョンに合わせてください)

2-3. Hugging Faceライブラリやbitsandbytesのインストール

LoRAを手軽に使うなら、下記をインストールしましょう。

pip install transformers accelerate peft   # Hugging Faceの基本ツール
pip install bitsandbytes                  # 4bit/8bit量子化に対応
  • transformers: GPTやBERTなど、各種モデルの読み込み・トークナイザ・Trainer等を提供
  • accelerate: 分散学習やメモリ最適化を簡単にするライブラリ
  • peft: Parameter-Efficient Fine-Tuningをまとめたライブラリ。LoRA実装が数行で可能
  • bitsandbytes: 4bit/8bit量子化用。大規模モデルを省メモリで扱える

2-4. インストール確認

以下のスクリプトを動かして、エラーが出ないかをチェックしておきましょう。

import torch
print("PyTorchバージョン:", torch.__version__)
print("CUDAは使用可能?:", torch.cuda.is_available())

from transformers import AutoTokenizer, AutoModel
print("Transformers動作テスト完了")

from peft import LoraConfig
print("PEFT動作テスト完了")

import bitsandbytes as bnb
print("bitsandbytes動作テスト完了")

問題なく実行できれば、準備完了です。


3. LoRAのメリット

LoRAの導入理由として、以下のポイントが挙げられます。

  1. メモリ使用量が圧倒的に少ない
    フル微調整に比べて、0.1〜1%程度のパラメータ更新で済むケースも。巨大モデルでも数GBのGPUメモリで可能になることもあります。
  2. 元モデルの知識を壊しにくい
    追加パラメータ(LoRAアダプタ)のみ学習するため、ベースモデルの一般知識を保ったまま新タスクへ適応できます。
  3. ファイルサイズが小さい
    LoRAの差分パラメータは数MB~数百MB程度。Stable Diffusionなどではこの差分ファイルを配布するだけでスタイルや新キャラクターを共有できます。
  4. 複数のLoRAアダプタを切り替え可能
    1つのベースモデルに対して、場面ごとに異なるLoRAをロードするだけで多機能化できます。

4. LoRAの実装手順

4-1. 全体像

LoRAの基本的な流れは以下のとおりです。

  1. ベースとなる事前学習モデルをロード
  2. 元重みは凍結し、追加の低ランク行列だけを学習対象に設定
  3. 損失関数を定義し、通常のPyTorchの学習ループまたはHugging FaceのTrainerで学習
  4. 学習完了後、LoRAの差分パラメータを保存
  5. 推論時はベースモデルにLoRAパラメータを適用して推論

4-2. Hugging Face PEFTによる実装例(PyTorch)

以下に自己回帰型言語モデル(CausalLM)へのLoRA適用例を示します。

from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training

model_name = "huggingface/llama-7b"  # 実際に使うモデル名に置き換え

# 1. トークナイザ・ベースモデルの読み込み
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    load_in_8bit=True,  # 8bit量子化でロードする場合
    device_map="auto"
)

# 2. LoRAトレーニングに必要な下準備(8bit量子化したモデル向け)
model = prepare_model_for_kbit_training(model)

# 3. LoRAのパラメータ設定
lora_config = LoraConfig(
    r=8,                # ランク
    lora_alpha=16,      # スケーリング係数
    target_modules=["q_proj", "v_proj"],  # 適用する層
    lora_dropout=0.05,
    bias="none",
    task_type="CAUSAL_LM"
)

# 4. モデルをLoRA化
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()  # 学習対象パラメータ数の確認

# 5. あとはTrainerや独自ループで学習を進める
# 例: Trainerを使う場合(学習設定は適宜変更)
# from transformers import Trainer, TrainingArguments
#
# training_args = TrainingArguments(
#     output_dir="lora-output",
#     num_train_epochs=3,
#     per_device_train_batch_size=4,
#     gradient_accumulation_steps=4,
#     learning_rate=1e-4,
# )
# trainer = Trainer(
#     model=model,
#     args=training_args,
#     train_dataset=...,
#     eval_dataset=...,
# )
# trainer.train()
#
# model.save_pretrained("lora_output_dir")

以上の手順で学習を行えば、LoRAの差分パラメータのみが保存されるため、モデル全体を再配布する必要がありません。推論時には、

from peft import PeftModel

base_model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto")
lora_model = PeftModel.from_pretrained(base_model, "lora_output_dir")
# これでLoRA適用済みモデルとして推論可能

というようにベースモデル+LoRAアダプタを合体させるだけでOKです。

GUIツールを使った簡単にLoRAを作成する方法について知りたい方はこちらもご覧ください。

【徹底解説】LoRAとは?仕組みや作り方まで完全ガイド
【徹底解説】LoRAとは?仕組みや作り方まで完全ガイド

5. 学習データの準備方法

LoRAによる微調整は、ベースモデルがすでに持っている汎用能力を特定タスクやスタイルに最適化するためのものです。したがって、自分が学習させたい分野やスタイルに合わせたデータを用意する必要があります。

5-1. 具体例

  • 画像生成(Stable Diffusionなど)
    • スタイルLoRA: あるイラストレーターの画風を学習したい→ そのイラストの画像+テキストキャプションを数十枚準備
    • キャラクターLoRA: 特定人物やキャラクターの写真・絵を集めて学習
  • 自然言語(GPT系、BERT系など)
    • 対話モデル向け: ユーザー指示(質問文)と望ましい回答のペアを多数用意
    • 分類タスク: テキストとラベルのセット
  • 音声合成
    • ターゲット話者の音声データとそのテキスト原稿

5-2. 前処理のコツ

  • テキストの場合
    • モデル付属のトークナイザを使い、トークン列に変換
    • 長過ぎる場合は適宜分割
    • 不必要なタグやHTMLコードを除去
  • 画像の場合
    • モデルに合わせた解像度にリサイズ(例: Stable Diffusion v1系→512×512)
    • 画像とキャプションを正しく対応づける
    • ぼやけた画像、関係のない画像は外す
  • データ拡張(オーグメンテーション)
    • 画像ならランダムクロップ・回転・色彩変化など
    • テキストなら軽い言い換え(パラフレーズ)や同義語置換
    • データが少ない場合、適度に増やして汎化性能を高める

6. LoRAのチューニング方法・最適化のコツ

  1. ランク (r)
    • LoRAで挿入する行列の次元。
    • 4〜16あたりで試されることが多い。小さすぎると表現力不足、大きすぎるとメモリ負荷増。
  2. スケーリング係数 (lora_alpha)
    • LoRAで学習した変化をどれだけ強調するか。
    • 一般にランクより大きめの値(例: r=8, alpha=16)が用いられる。
  3. ドロップアウト (lora_dropout)
    • 過学習を防ぐために0.05〜0.1程度設定することも。
    • データ量が十分なら0.0でもOK。
  4. 学習率・バッチサイズ
    • フル微調整よりやや高めの学習率を試すことが多い(例: 2e-5→5e-5)。
    • バッチサイズはGPUメモリと相談して決める。足りない場合は勾配累積を使う。
  5. エポック数/ステップ数
    • LoRAは少ないパラメータで学習するため、わりと早く収束する。
    • 1〜3エポックほど回して検証損失が頭打ちになったら停止という流れが多い。

LoRAの学習に関する詳しい記事はこちら

LoRA学習のはじめ方  大規模モデルを効率的に微調整する手法
LoRA学習のはじめ方 大規模モデルを効率的に微調整する手法

7. LoRAを活用した応用例

7-1. Stable DiffusionでのスタイルLoRA

  • 数十枚のイラストレーターの作品を学習し、ベースのStable DiffusionにLoRAを適用
  • 好きなプロンプト+学習した新スタイルを組み合わせて生成可能
  • Civitaiなどのコミュニティで多数のLoRAファイルが公開・共有されている

7-2. 大規模言語モデル (GPT, LLaMA等)

  • Stanford Alpaca: LLaMAモデル+指示応答データでLoRA微調整し、ChatGPTに近い性能を実現
  • ドメイン特化: 医療・法律・金融など専門分野のテキストを用いてLoRA学習 → 元の言語能力を保持しつつ専門領域に強いモデルを作る

7-3. 音声合成

  • 大規模TTSモデルにLoRAを導入し、特定話者の少量音声データでカスタマイズ
  • ショートアニメやゲーム向けに、キャラクターのセリフをボイスクローンする応用研究も進行中

8. 導入に役立つツール・ライブラリ

  • Hugging Face PEFT
    • LoRAを含むパラメータ効率化微調整手法がまとまったライブラリ。
    • get_peft_model()LoraConfig を使うだけでLoRAを実装可能。
  • Transformers
    • 様々なモデル(GPT/BERT/T5など)を一貫したインターフェースで扱える。
  • Diffusers
    • Stable Diffusionを中心とした拡散モデルライブラリ。LoRA学習用サンプルスクリプトあり。
  • bitsandbytes
    • 4bit/8bit量子化でメモリを削減できる。LoRAと組み合わせやすい。
  • Kohya SS GUI/Trainer
    • Stable Diffusion向けのLoRA学習ツール。GUIで設定可能なので初心者でも扱いやすい。
  • PyTorch Lightning / Accelerate / DeepSpeed
    • 複数GPU学習・混合精度学習などを簡単に行える補助フレームワーク。

9. まとめ

LoRA(Low-Rank Adaptation)は、大規模モデルをわずかな追加パラメータで微調整できる強力な手法です。本記事では、環境構築の初歩からデータ準備、実装の流れまで解説しました。ポイントを振り返ると:

  1. GPU+Python環境が基本。Anacondaで仮想環境を作り、PyTorchやHugging Face関連ライブラリをインストール
  2. PEFTを使えばLoRAを簡単に実装できる。ベースモデルをロードし、LoRAアダプタを挿入するだけ
  3. データセットの質が極めて重要。特定タスクやスタイルに合ったデータを、前処理やデータ拡張を行って準備
  4. ランク(r)やαなどハイパーパラメータのチューニングで最適な結果を追求。エポック数を短めにして検証セットを頻繁にチェックする
  5. Stable DiffusionやLLM(GPT, LLaMA)だけでなく、音声合成やロボット分野など多彩な応用先がある

大規模モデルの微調整に手を出すのは敷居が高いイメージがありますが、LoRAを使えば思ったよりも手軽なマシンスペック&少ない学習データでトライできます。ぜひ本記事を参考に、あなたのプロジェクトにLoRAを取り入れてみてください!

AIサービス導入のご相談は AI導入.com へ(完全無料)

  • マッキンゼー出身の代表による専門的なアドバイス
  • 日本・アメリカの最先端AIサービスの知見を活用
  • ビジネスの競争力を高める実践的な導入支援
代表への無料相談はこちら