AIモデルのファインチューニング (第3部): QLoRAと4-bit量子化
NormalFloat4 (NF4) 量子化と Double Quantization を活用し、コンシューマー向けGPUでLLMをファインチューニングするQLoRAの手法を解説します。
QLoRA (Quantized Low-Rank Adaptation) は、コンシューマー向け単一GPU(RTX 3090/4090など)上で数十億〜数百億パラメータ規模のLLMをファインチューニング可能にした革新的な技術です。
QLoRAの技術的ブレイクスルー#
QLoRAは以下の3つの主要技術を導入しています:
- NF4 (NormalFloat4): 正規分布する重み行列に対して情報理論的に最適な4-bit量子化データ型。
- Double Quantization: 量子化定数自体をさらに量子化し、1パラメータあたり平均0.37 bitを削減。
- Paged Optimizers: GPUメモリのスパイク発生時にメモリをCPU RAMへ退避。
BitsAndBytesを用いた実装#
qlora_setup.py
import torch
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
# [!code focus]
# 4-bit NF4 量子化設定
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True
)
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3.2-3B",
quantization_config=bnb_config,
device_map="auto"
)pythonまとめ#
ファインチューニングはもはや巨大企業だけの特権ではありません。QLoRA、PEFT、BitsAndBytes を組み合わせることで、手元のアセットで独自のAIモデルを構築できます。