パラメータ効率ファインチューニング:LoRA と QLoRA
巨大モデルを丸ごと再学習せず、追加した小さな行列だけ動かす。LoRA なら学習対象を1%未満に、QLoRA なら家庭用GPU1枚でも数十Bモデルを微調整できる。
- 1.LoRA は元の重みを凍結し、更新分を低ランク行列の積 ΔW=BA で近似して、その B と A だけを学習する。学習パラメータ数を数百〜数千分の1に圧縮できる。
- 2.推論時は W+BA を1つの行列に畳み込めるため追加レイテンシはゼロ。アダプタ(B,A)はMB単位で、1つの土台に複数タスク分を差し替えられる。
- 3.QLoRA は土台を4bit(NF4)に量子化して凍結し、その上に16bitのLoRAアダプタを乗せる。65Bクラスを48GB単一GPUで微調整できる。
なぜ「全部の重みを動かす」のが現実的でないのか
ファインチューニングと RAG で触れたとおり、土台モデルを手元のタスクに寄せる王道がファインチューニングです。しかし全パラメータを更新する(フルファインチューニング)のは、数十億パラメータ級の LLM では極めて重い。理由はパラメータ数そのものより学習時のメモリ内訳にあります。
70 億(7B)パラメータのモデルを 16bit(2バイト)で持つだけで重みは約 14GB。これに加えて、勾配降下(勾配降下法)に必要な付帯データが乗ります。
| 学習時に常駐するもの | 7B・Adam・混合精度での概算 | 備考 |
|---|---|---|
| モデル重み | 約 14GB(fp16, 2B/param) | 推論でも必要 |
| 勾配 | 約 14GB(重みと同サイズ) | 全パラメータ分 |
| Adam の状態(1次・2次モーメント) | 約 56GB(fp32で2つ分) | ここが最も重い |
| 合計(活性化を除く) | 約 84GB+ | 単一GPUにまず載らない |
注目すべきは、重み本体より「オプティマイザの状態」がはるかに大きい点です。Adam はパラメータごとに1次・2次モーメントを fp32 で保持するため、更新するパラメータが多いほどここが膨らみます。つまり「学習対象のパラメータ数を減らせば、勾配もオプティマイザ状態も比例して減る」——これが PEFT(Parameter-Efficient Fine-Tuning)の動機です。
PEFT は「土台の重みは凍結し、ごく一部の追加パラメータだけ学習する」手法群の総称です。LoRA のほか、入力側に学習可能なベクトルを足す Prefix/Prompt Tuning、各層に小さな全結合を挿入する Adapter などがあります。本稿の主役 LoRA は、追加レイヤを設けず既存の重み行列に対する更新量そのものを低ランクで近似する点で、推論コストを増やさないのが特徴です。
LoRA の核心:更新量 ΔW を低ランク近似する
フルファインチューニングは、各重み行列 W(形状 d×k)を W + ΔW に更新します。LoRA の出発点は1つの観察です——ファインチューニングで生じる更新 ΔW は、実は「本質的な次元(intrinsic rank)」が低い。膨大な要素を持つ ΔW も、情報としては少数の方向に集中している、という仮説です。
そこで LoRA は ΔW を2つの細長い行列の積で表します。
W' = W + ΔW = W + B·A
W : d×k (元の重み。凍結=勾配を流さない)
B : d×r (学習対象)
A : r×k (学習対象)
r : ランク。r ≪ min(d,k)(例 r=8, 16)
d=k=4096、r=8 なら、フルなら 4096×4096 ≈ 1678万 個のパラメータを学習するところ、LoRA は B(4096×8) + A(8×4096) = 6.5万 個で済みます。約 256 分の1です。順伝播は次のように書けます。
h = W·x + (B·A)·x = W·x + B·(A·x)
W·x は凍結した元の経路、B·(A·x) が学習で足される補正経路です。A·x でいったん r 次元に絞ってから B で元の次元へ戻すので、r がボトルネックとして更新の表現力を制限します。
A はランダム(ガウス)に、B はゼロで初期化します。すると学習開始時点では B·A = 0、つまり ΔW=0 となり、モデルは事前学習済みの状態そのものから滑らかに学習を始められます。最初から余計な摂動を加えないので、転移学習(転移学習)の利点を壊しません。スケーリング係数 α/r を掛けて学習率と分離するのも実装上の定石です。
なぜメモリが劇的に減るのか
LoRA の効きどころは、凍結した W には勾配もオプティマイザ状態も不要になることです。学習対象は B と A だけなので、先述の「勾配」「Adam の状態」がそのパラメータ数に比例して縮みます。
| 項目 | フルファインチューニング | LoRA |
|---|---|---|
| 学習パラメータ数 | 全部(例 7B) | 0.1〜1%(例 数百万) |
| 勾配・オプティマイザ状態 | 全パラメータ分で巨大 | 学習対象のみ=ごく小さい |
| 保存物のサイズ | モデル全体(GB単位) | アダプタのみ(MB単位) |
| 1土台=複数タスク | タスクごとに全コピー | アダプタを差し替えるだけ |
| 推論時の追加コスト | — | W に畳み込めばゼロ |
実務上のもう1つの利点がデプロイです。W は共通のまま、タスクごとに小さなアダプタ(B,A)を切り替えればよい。1つの土台モデルに翻訳用・要約用・社内用などのアダプタをホットスワップでき、ストレージも転送も軽量です。さらに推論前に W ← W + BA とマージしてしまえば、行列の形は元と同じなので推論レイテンシは一切増えません(Adapter 系が層を挿入して遅くなるのと対照的)。
r を小さくするほど省メモリですが、ΔW を表せる自由度が下がります。タスクが事前学習から大きく外れる(新しい言語・専門ドメイン)ほど高い r が要りがちです。経験的に r=8〜64 がよく使われますが、むやみに上げても精度が頭打ちになることが報告されています。「どの層(注意の Q/K/V/O か、FFN か)に LoRA を当てるか」も精度に効くため、r 単独で語らず適用箇所とセットで調整します。
QLoRA:4bit 量子化と LoRA を組み合わせる
LoRA は学習対象を減らしましたが、凍結した W(fp16 で 14GB)は依然メモリに常駐します。これを削るのが QLoRA です。アイデアは単純で強力——土台 W を 4bit に量子化して凍結し、その上に通常の(16bit の)LoRA アダプタを乗せて学習する。
量子化とは、重みを少ないビット数で近似表現してメモリを圧縮する技術です。fp16 の 16bit を 4bit にすれば、原理上モデルの常駐サイズは約 1/4 になります。QLoRA は精度を保つために3つの工夫を組み合わせます。
| 技術 | 何をするか | 効果 |
|---|---|---|
| 4bit NormalFloat (NF4) | 正規分布する重みに最適化した4bitデータ型で量子化 | 情報損失を抑えた4bit表現 |
| 二重量子化 (Double Quant) | 量子化に使う定数自体をさらに量子化 | パラメータあたり追加メモリをさらに削減 |
| Paged Optimizers | GPUメモリ逼迫時にオプティマイザ状態をCPUへ退避 | 長系列でのOOM(メモリ溢れ)を回避 |
肝は**「量子化するのは凍結した土台だけ」**である点です。勾配は 4bit の W を一度 16bit に逆量子化してから、16bit の LoRA アダプタ B,A にだけ流れます。W 自体は更新されないので、量子化による誤差が学習で増幅されることはありません。これにより、フルファインチューニングなら数百GBを要する 65B クラスのモデルを、48GB の単一GPU 1枚で微調整できるようになりました。
- LoRA の式:
W' = W + B·A、B:d×r,A:r×k,r ≪ min(d,k)。元のWは凍結。 - なぜ省メモリか:勾配とオプティマイザ状態が学習対象パラメータにのみ比例するから。重み本体ではなく Adam の状態が最大要因。
- 推論コスト:マージ(
W+BA)すれば増えない。Adapter 系(層挿入)との明確な差。 - QLoRA の本質:土台を 4bit(NF4) に量子化して凍結+16bit の LoRA を学習。量子化対象は土台のみ、勾配はアダプタにのみ流れる。
- 混同注意:LoRA は「低ランク近似」、量子化は「ビット数削減」。別軸の最適化で、QLoRA は両者の合わせ技。
まとめ:2つの直交する圧縮
LoRA と QLoRA は、削っている対象が異なります。整理すると見通しが良くなります。
| 観点 | LoRA | QLoRA |
|---|---|---|
| 削減の主対象 | 学習パラメータ数(更新を低ランク化) | 土台の常駐メモリ(4bit量子化) |
| 土台の重み W | fp16 のまま凍結 | 4bit(NF4) に量子化して凍結 |
| 学習する部分 | 16bit の B, A | 同じく16bit の B, A |
| 主に解決する制約 | 勾配・オプティマイザ状態の肥大 | 重み本体の置き場所(VRAM) |
| 代表的な到達点 | 学習対象を1%未満に | 65Bを48GB単一GPUで微調整 |
要点は、LoRA が「学習量」を、量子化が「保持量」を、それぞれ別の軸で圧縮していること。QLoRA はこの2つを掛け合わせ、「巨大モデルを丸ごと触れるのは大手だけ」という前提を崩しました。土台となるニューラルネットの重み更新の感覚は ニューラルネットワーク と 勾配降下法、微調整全体の位置づけは ファインチューニングと RAG を合わせて読むと、PEFT が「どこを削って何を保ったのか」が立体的に理解できます。
AI/機械学習 Article
パラメータ効率ファインチューニング:LoRA と QLoRAを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
LoRA
比較で見る軸
難易度: advanced / カテゴリ: AI/機械学習 / タグ数: 5
導入後に効く点
推論時は W+BA を1つの行列に畳み込めるため追加レイテンシはゼロ。アダプタ(B,A)はMB単位で、1つの土台に複数タスク分を差し替えられる。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- AI/機械学習
- タグ数
- 5
判断チェックリスト
- 自社の用途が「LoRA / QLoRA」に近いか確認する。
- 強みである「LoRA は元の重みを凍結し、更新分を低ランク行列の積 ΔW=BA で近似して、その B と A だけを学習する。学習パラメータ数を数百〜数千分の1に圧縮できる。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。