AI

QLoRAとは?4bit量子化+LoRAの仕組み・VRAM目安・実装手順と採用判断を解説【2026年版】

インフラ構築AWSGCPAdureにおける主な内容

QLoRAとは、学習したいベースモデルの重みを4bitへ量子化して凍結し、その上に載せたLoRAアダプタだけを学習する微調整の手法です。読み方は「キューロラ」で、Quantized LoRAの略にあたります。ねらいは精度そのものより先に、GPUメモリの壁を下げることにあります。フル微調整では手が出ない規模のモデルを、手元の1枚のGPUで追加学習できる範囲へ引き込むための道具だと考えてください。本記事では、QLoRAを成り立たせている3つの技術要素、モデル規模ごとのVRAMの目安、現行ライブラリでの実装手順、そして学習後の配布でつまずきやすい箇所までを実装目線で整理します。

まとめ:QLoRAで下がるのはメモリで、判断すべきは配布方法

結論から述べます。QLoRAはLoRAの置き換えではなく、VRAMが足りないときに開く逃げ道です。ベースを4bitで持つぶん重みの保持コストはbf16の約4分の1へ落ちますが、計算のたびに逆量子化が挟まるため1ステップあたりの学習時間は伸びます。VRAMに余裕があるなら通常のLoRAを選ぶほうが素直でした。

技術的な中身は3つに分解できます。正規分布に沿う重みに合わせた4bitデータ型のNF4、量子化定数そのものをさらに量子化する二重量子化、そしてメモリの山を越えるときにオプティマイザ状態をCPU側へ逃がすページドオプティマイザです。原論文(Dettmersら、2023年、arXiv:2305.14314)では、この組み合わせで650億パラメータ級のモデルを48GBの単一GPUで微調整できたと報告されています。

実務でいちばん事故が起きるのは学習後です。4bitのベースへアダプタをマージすると、丸め誤差によって生成結果が学習時とずれます。マージするなら16bitで読み直したベースに対して行うか、そもそもマージせずアダプタのまま配ってください。この判断基準は独自章で条件付きに示します。

QLoRAとは?4bitへ凍結した重みの上でアダプタだけを学習する

QLoRAの定義と、量子化と微調整を同時に成立させた発想の仕組み

前提として、LoRAは元の重み行列を触らず、その変化分を低ランクな2つの小行列で近似して学習する手法です。この土台の理屈はLoRAとは?低ランク適応の仕組み・使い方・派生手法をわかりやすく解説で扱っていますので、低ランク近似の部分が曖昧であれば先にそちらをご覧ください。

従来、量子化したモデルは推論専用として扱われてきました。重みの精度が落ちた状態で勾配を流すと学習が不安定になるためです。QLoRAはここを、ベース側を4bitのまま凍結して勾配を一切流さず、学習対象を16bitのLoRAアダプタに限る、という切り分けで回避しました。つまり4bitは「保持のための形式」、16bitは「学習のための形式」と役割を分けたわけです。

この分離が効くのは、微調整で更新される情報量がもともと小さいからです。ベースの一般的な言語能力はそのまま凍結し、自社ドメインへの適応だけを別パラメータで受け持たせれば、ベースの表現精度が多少荒くても最終的な出力品質は保たれます。量子化で生じた誤差を、上に載ったアダプタが学習を通じて吸収していく構図になっている、と説明されることも多い手法です。

LoRAとQLoRAの違いを、凍結対象と資源の観点で並べて比較する

同じ「アダプタだけを学習する」系統でも、両者は前提とする資源が異なります。違いは次の表で押さえてください。

観点 LoRA(bf16) QLoRA
ベース重みの保持 16bitのまま凍結 4bit(NF4)で凍結
学習するパラメータ LoRAアダプタのみ LoRAアダプタのみ
重みのメモリ量 基準 およそ4分の1
1ステップの所要時間 基準 逆量子化のぶん伸びる
導入の前提 PEFTのみ bitsandbytesが要る
向く場面 VRAMに余裕がある 単一GPUで大型を回す

DoRAやBitFitまで含めた派生手法の横比較はPEFTとLoRAの違いとは?仕組み・使い方・QLoRA/DoRAとの比較を実装例つきで解説に整理してありますので、手法そのものの選定で迷っている段階であればそちらが近道になります。本記事はQLoRA単体の中身と運用に集中します。

QLoRAを成立させる3つの技術要素をそれぞれ分けて理解する

NF4は正規分布に沿う重みへ量子化点を寄せた4bitデータ型

ニューラルネットワークの重みは、ゼロ付近に密集し裾が薄い分布になりがちです。ここへINT4のような等間隔の量子化を当てると、値がほとんど存在しない外側の区間に貴重な表現枠を割り振ってしまいます。NF4(4-bit NormalFloat)は、正規分布を前提に区間ごとの出現確率が等しくなるよう量子化点を配置したデータ型で、同じ4bitでもゼロ付近の細かな差を保ちやすくなります。

原論文ではNF4とINT4・FP4を同条件で比較し、NF4がベンチマークの成績を保つ側に立つと報告されました。量子化方式そのものの分類、事後量子化(PTQ)と量子化を織り込んだ学習(QAT)の違いについては量子化(モデル量子化)とは?仕組み・PTQとQATの違いと実装判断を解説【2026年版】で扱っています。

二重量子化は量子化定数そのものを圧縮して端数を削る仕組みとして働く

4bit量子化ではブロック単位でスケール(量子化定数)を持ちますが、この定数自体が32bit浮動小数で保持されると、パラメータ1つあたりに換算して無視できない上乗せになります。二重量子化(Double Quantization)は、この定数の集合をさらに8bitへ量子化して持ち直す仕組みです。原論文では平均で1パラメータあたり約0.37bitの削減にあたるとされ、650億パラメータ級では数GB規模の差として効いてきます。

実装上はbnb_4bit_use_double_quant=Trueを立てるだけで有効になります。精度への影響はほぼ観測されない範囲にとどまるとされているため、VRAMがぎりぎりの構成では既定で入れて構いません。

ページドオプティマイザはメモリの山を越えるための退避機構として働く

学習中のVRAM消費は一定ではありません。系列長が長いバッチに当たった瞬間や勾配チェックポイントの復元時に山ができ、平均使用量に余裕があってもその一瞬でOOMに落ちます。ページドオプティマイザは、NVIDIAのユニファイドメモリを介してオプティマイザ状態をCPU側へページアウトし、必要になったら戻す仕組みで、この山を吸収します。

常時CPUへ逃がすオフロードとは目的が違う点に注意してください。ページドオプティマイザは平常時の速度を落とさず、山の瞬間だけを救う設計です。逆に言えば、平均使用量が慢性的に足りない構成の救済にはならないため、その場合はモデル規模かバッチ設計のほうを見直す必要があります。

モデルサイズ別に必要VRAMを見積もり、GPUの選定へつなげる

重みの保持量から逆算し、学習時の上乗せを足して容量判断の基準にする

見積りの出発点は単純です。重みの保持量はおよそ「パラメータ数 × bit数 ÷ 8」バイトで求まります。70億パラメータなら、bf16で約14GB、4bitでは約3.5GBです。ただし学習時にはここへLoRAアダプタと勾配、オプティマイザ状態、そして系列長とバッチサイズで決まる中間活性が積み上がります。実際にはこの上乗せのほうが変動要因として大きく効きます。

次の表は、系列長を短めに取り勾配チェックポイントを有効にした場合の、単一GPUでの目安です。数値は構成で上下するため、GPU調達の一次判断に使う前提で見てください。

モデル規模 QLoRAの目安 LoRA(bf16)の目安
7B級 およそ8GB前後 およそ18GB前後
13B級 およそ12GB前後 およそ30GB前後
32B級 およそ24GB前後 単一GPUでは困難
70B級 およそ48GB前後 複数GPUが前提

読み方はこうです。24GBクラスの1枚で13B級までを扱いたいならQLoRAが現実解になり、7B級で足りるならLoRAのままでも収まります。48GBクラスが1枚あれば70B級に手が届く、という線引きが見えてきました。学習コードとGPU構成の組み方そのものはファインチューニングの実行環境と実装|必要GPUと学習コードで扱っています。

速度は落ちる前提で計画し、実測してから全体の運用時間を見積もる

QLoRAは4bitで保持した重みを計算のたびに逆量子化するため、同じ設定のLoRAより1ステップの時間が伸びます。どの程度伸びるかはGPUの世代、系列長、バッチサイズで変わるので、公表値をそのまま自社の見積りへ持ち込まないでください。数十ステップだけ回して実測し、そこからエポック数を掛け算するほうが確実です。

速度が課題になる場合の打ち手として、カーネルを差し替えて学習を高速化する実装系があります。Unslothとは?読み方・使い方・対応モデルと高速ファインチューニングの仕組みで扱っている方式は4bit学習にも対応しており、対応モデルに当たっていれば検討する価値があります。

QLoRAの実装手順をTransformers 5系とPEFTの現行APIで示す

量子化設定はBitsAndBytesConfigへ集約して読み込む

2026年7月時点で、Transformersは5.14系、PEFTは0.20系、bitsandbytesは0.50系、TRLは1.9系が配布されています。実装はこの組み合わせを前提に説明します。まずベースモデルを4bitで読み込む部分です。

from transformers import AutoModelForCausalLM, BitsAndBytesConfig
import torch

bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_use_double_quant=True,
    bnb_4bit_compute_dtype=torch.bfloat16,
)

model = AutoModelForCausalLM.from_pretrained(
    "google/gemma-3-4b-it",
    quantization_config=bnb_config,
    device_map="auto",
)

ここで押さえておきたい変更点があります。Transformers 5系では、from_pretrainedload_in_4bitload_in_8bitを直接渡す書き方が廃止され、quantization_configへ設定オブジェクトを渡す形へ一本化されました。ネット上の解説記事には旧来の書き方が残っているため、動かないときはまずここを疑ってください。あわせて、読み込み時のdtypeが保存時の型を尊重する挙動へ変わっています。

アダプタは全線形層へ当て、学習前の下ごしらえを入れる実装手順

4bitモデルへそのままLoRAを載せると、正規化層のdtypeや勾配の設定が噛み合わずに落ちることがあります。PEFTのprepare_model_for_kbit_trainingがこの下ごしらえを引き受けます。

from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training

model = prepare_model_for_kbit_training(model)
model.gradient_checkpointing_enable()

lora_config = LoraConfig(
    r=16,
    lora_alpha=32,
    lora_dropout=0.05,
    bias="none",
    task_type="CAUSAL_LM",
    target_modules="all-linear",
)

model = get_peft_model(model, lora_config)
model.print_trainable_parameters()

注目してほしいのはtarget_modulesです。通常のLoRAでは注意機構の一部の射影層だけを対象にする例が多く見られますが、QLoRA流の学習ではモデル内のすべての線形層へアダプタを当てるのが基本線とされています。層ごとに名前が違うアーキテクチャでも、"all-linear"を指定すればPEFT側が対象を拾ってくれます。量子化誤差の影響を受ける層が広いぶん、当てる範囲も広く取るという考え方です。

ここから先の学習ループはTRLのトレーナへ載せるか、Transformersのトレーナをそのまま使えます。学習データの形式・件数・品質の要件はファインチューニング用データセットの作り方|サンプル形式・件数・品質の要件に切り出しているため、データ側の設計はそちらを参照してください。

量子化誤差を織り込んだ初期化という実装上の選択肢も用意されている

QLoRAではアダプタをゼロ初期化するため、学習開始時点のモデルは「量子化で劣化したベース」そのものです。この初期のずれを減らす手立てとして、PEFTにはLoftQという初期化方式が入っています。ベースの量子化誤差を打ち消す向きへLoRAの初期値を置く発想で、低ランクでも精度が伸びにくいときの選択肢になります。適用にはsafetensors形式のモデルファイルと4bit量子化という前提条件があるため、まず素のQLoRAで基準を取ってから比較するのが順序として無難です。

学習済みアダプタのマージと配布で精度が崩れる分岐点を整理する

4bitのままマージすると、学習時と違う生成へ静かにずれる原因を見極める

ここが実務でもっとも見落とされる箇所です。学習が終わってアダプタを本体へ畳み込みたくなりますが、4bitで読み込んだベースに対してmerge_and_unloadを呼ぶと、PEFTは「生成結果が変わりうる」という警告を出します。4bitの格子上へ加算結果を丸め直すため、アダプタが学習した細かな差分がそこで潰れるからです。評価スクリプトは通るのに本番の応答だけ品質が落ちる、という追いにくい形で表面化します。

回避策は決まっています。マージするなら、量子化していない16bitのベースを読み直し、そこへアダプタを重ねてから畳み込んでください。

from transformers import AutoModelForCausalLM
from peft import PeftModel
import torch

base = AutoModelForCausalLM.from_pretrained(
    "google/gemma-3-4b-it",
    dtype=torch.bfloat16,
    device_map="cpu",
)
merged = PeftModel.from_pretrained(base, "out/qlora-adapter").merge_and_unload()
merged.save_pretrained("out/merged-bf16")

そのうえで、推論側を4bitで動かしたいなら、マージ済みの16bitモデルを改めて量子化し直します。手順が一段増えますが、この順序を守るだけで学習時と推論時の食い違いはかなり減ります。配布形式としてGPTQやAWQ、GGUFのどれを選ぶかは、LLM量子化とは?仕組みとGPTQ・AWQ・GGUFの違い・企業の採用判断を解説【2026年版】の比較軸で決めてください。

QLoRAを採る条件と、素直に見送るべき場面の判断基準を言い切る

受託の現場で見てきた範囲での判断基準を、条件付きで示します。まず採用してよい場面です。手元のGPUが1枚しかなく、扱いたいモデルがそのVRAMではbf16に収まらないとき。学習内容が口調や出力様式、社内用語への適応といったドメイン適応にとどまるとき。そして推論をアダプタ付きで回す前提が置けるとき。この3つが揃えば、QLoRAは費用対効果の面で先に検討する価値があります。

逆に見送るべき場面も明確です。VRAMに余裕があるなら、速度が落ちるうえ量子化誤差を抱える構成をわざわざ選ぶ理由がありません。事前学習に近い規模の知識注入を狙う場合も外れます。アダプタの容量では受け止めきれず、フル微調整か継続事前学習の領域に入るためです。推論の遅延要件が厳しく、4bit向けカーネルの制約が読みきれない案件も避けたほうが無難でした。bitsandbytesが正式対応していないアクセラレータを使う構成も同様です。

そもそも微調整でなく検索で解けるのではないか、という手前の分岐にも触れておきます。社内文書の内容を答えさせたいだけなら、モデルを触らずRAGで解くほうが更新も検証も軽く済みます。この使い分けはファインチューニングとは?LLMの追加学習の仕組み・RAGとの違いと使い分けを解説に判断軸をまとめました。

手法の選定からGPU構成の見積り、学習後の配布までを一括で任せたい場合は、生成AI開発・AI受託開発でご相談を受け付けています。既存モデルで足りるのか微調整まで踏み込むべきかの切り分けから対応しています。

よくある質問

QLoRAの読み方は何ですか?

「キューロラ」と読むのが一般的です。Quantized Low-Rank Adaptationの略で、量子化したモデルに対する低ランク適応を指します。表記としてはQLoRAが正式で、QLORAやQ-LoRAと書かれる例も見かけますが、いずれも同じ手法を指しています。

QLoRAとLoRAはどちらを選べばよいですか?

使えるVRAMで決めてください。扱いたいモデルがbf16のまま手元のGPUに収まるならLoRAが素直です。収まらない場合にQLoRAへ落とします。精度を理由に選ぶ手法ではなく、資源制約を外すための選択だと捉えると迷いません。

QLoRAで学習したモデルは4bitのまま本番へ出せますか?

出せます。4bitで読み込んだベースにアダプタを載せた構成のまま推論する運用は成立します。ただしアダプタを本体へ畳み込む場合は話が別で、16bitで読み直したベースへマージしてから改めて量子化する順序を守ってください。

量子化で精度はどれくらい落ちますか?

タスクとモデル規模で変わるため、一般的な数値を当てにしないでください。原論文の範囲ではNF4と二重量子化の組み合わせで劣化は小さいと報告されていますが、自社の評価セットで16bit学習と並べて測るのが唯一の確認方法です。数十件でも比較すれば傾向は掴めます。

QLoRAはRAGの代わりになりますか?

役割が違います。QLoRAが変えるのは応答の様式や語彙、判断の傾向であり、社内文書の中身そのものを覚えさせる用途には向きません。事実を参照させたいならRAGを組み、口調や出力形式を揃えたいならQLoRAを使う、という併用が現実的です。

関連記事

資料請求

RELATED POSTS 関連記事