AI・機械学習
上級
QLoRA(量子化LoRA)(キューローラ リョウシカローラ)
LoRAに4bit量子化(NF4)を組み合わせたPEFT手法。量子化したベースモデルを凍結しLoRAアダプタのみFP16で学習することで、70Bクラスの大型LLMを単一の24GB GPUでファインチューニング可能にした。
0 回閲覧
0 いいね
2026/6/7 更新
関連タグ
PEFT
ファインチューニング
QLoRA
量子化
4bit
QLoRA(量子化LoRA)
概要
QLoRA(Quantized Low-Rank Adaptation)は、4bit量子化とLoRAを組み合わせることで70Bクラスの大型LLMを単一GPUでファインチューニング可能にしたPEFT手法だ。Dettmers et al.(2023, NeurIPS)がUniversity of Washingtonで発表し、LLMファインチューニングの民主化に大きく貢献した。
3つの核心技術
1. 4bit NormalFloat(NF4)量子化
通常のINT4量子化ではなく、NF4(NormalFloat4)という情報理論的に最適な4bit表現を使用:
通常のFP32重み: 32bit/パラメータ
INT4量子化: 4bit/パラメータ(情報損失大)
NF4量子化: 4bit/パラメータ(正規分布に最適化、情報損失小)
→ 圧縮率: 32bit → 4bit = 8倍圧縮
NF4は重みが正規分布に従うという観察に基づき、その分布に情報理論的に最適な量子化格子を使う。
2. Double Quantization(二重量子化)
量子化定数(スケールファクター)自体も量子化することで、さらにメモリを削減:
通常の量子化:
量子化重み(4bit)+ スケールファクター(FP32=32bit/64パラメータ)
→ 実効: 4.5 bit/パラメータ
Double Quantization:
スケールファクターもFP8で量子化
→ 実効: 4.127 bit/パラメータ
65Bモデルで約2GB追加削減。
3. Paged Optimizers
GPUメモリが不足した際にCUDAのUnified Memoryを使ってCPU RAMにオプティマイザ状態をページアウト:
- AdamWオプティマイザのモーメント(m1, m2)= 学習中に最大メモリを消費
- GPUスパイク時にCPUへ退避 → 長いシーケンスでもOOM回避
メモリ削減効果
| モデル | フルFT(BF16) | QLoRA | 削減率 |
|---|---|---|---|
| 7B | 112 GB | 6 GB | 95% |
| 13B | 208 GB | 10 GB | 95% |
| 33B | 528 GB | 21 GB | 96% |
| 65B | 1,040 GB | 41 GB | 96% |
実装例
import torch
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
from peft import LoraConfig, get_peft_model
# 4bit量子化設定
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True,
)
# 4bitでモデルロード
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-2-70b-hf",
quantization_config=bnb_config,
device_map="auto"
)
# LoRA適用
lora_config = LoraConfig(r=16, lora_alpha=32, target_modules=["q_proj","v_proj"])
model = get_peft_model(model, lora_config)
Guanacoモデルの実績
QLoRAの論文で学習したGuanacoモデル(65B):
- ChatGPTを99.3%の確率で上回るか同等(Vicuna評価)
- 学習コスト: A100 80GB × 1枚 × 24時間(約$300)
- フルFTに比べほぼ同等の品質を1/100以下のコストで実現