みんなのAI
機械学習プレイグラウンド
読み込み中…

学ぶ

Ch.09

QLoRAと量子化:より小さくしてチューニング

量子化の流れ: FP16→INT8→FP16

スケールαでINT8に写し、計算時に戻します。

FP16入力max(abs)α計算INT8量子化逆量子化復元確認

ステップで見る

  1. ① FP16: 元の浮動小数ベクトル。
  2. ② max(abs): スケール基準を決める。
  3. ③ α: 範囲用のスケール係数。
  4. ④ INT8: 掛けて丸め、整数で保存。
  5. ⑤ 逆量子化: ÷α で復元。
  6. ⑥ QLoRA: 圧縮バックボーン+LoRAのみ学習。

QLoRAと量子化

骨組みは4-bit圧縮、LoRA家具だけ鮮明に。

逆量子化 W0(q)W_0^{(q)}W0(q)​を使い、LoRA A,BA,BA,Bだけ学習。

4-bitロードバックボーン凍結LoRA学習forward・保存

QLoRA学習の流れ

  1. ① 4-bitでLLMロード。
  2. ② 量子化バックボーン固定。
  3. ③ LoRAのみFP16/BF16学習。
  4. ④ アダプタ保存・配備。
Ch.08 の LoRA は新しく学ぶ量を減らしましたが、巨大な事前学習重み W0W_0W0​ は依然としてメモリの大部分を占めます。すでに建った大きな邸宅に、小さなインテリアだけ変えても家自体が重い—そんなイメージです。
本章は家全体を軽くする量子化と、LoRAと組み合わせたQLoRA(圧縮・凍結バックボーン+鮮明なLoRAノート)を扱います。
比喩: 4K映画をスマホ用MP4にしても物語は同じ—数字だけ薄くし意味はできるだけ保持。大きな言語モデルを身近な環境で合わせ込みやすくします。

数式の読み方(量子化 · QLoRA)

1. ビット幅とメモリ — なぜ圧縮?
一行要約: 重み1つを何ビットで保存するかで、ファイルサイズもGPUのVRAMも変わります。
深いモデルは何億〜何十億個の数値(重み)の集まりです。FP32のように精密に保存すると正確ですが重い。量子化は「短い整数コードで保存し、計算するときだけ近い小数に戻す」考え方です。
比喩: 写真をRAW(大)かJPEG(小)か—見た目は近いが容量だけ大きく違う。
  • 形式FP32
  • おおよそ/重み4B
  • 意味最高精度
  • 形式FP16
  • おおよそ/重み2B
  • 意味半分
  • 形式INT8
  • おおよそ/重み1B
  • 意味8bit整数
  • 形式INT4
  • おおよそ/重み0.5B
  • 意味4-bit極限
形式おおよそ/重み意味
FP324B最高精度
FP162B半分
INT81B8bit整数
INT40.5B4-bit極限
表を1行ずつ見ると、ビットが減るほど1重みあたりのバイトも減ります。教材では「32bit→4bit」≈ 32÷4=8 → 約8倍軽い。32/4などのビット倍率問題も同じ流れです。
QLoRAとの接続: Ch.08 LoRAは学ぶ量を減らしますが、W0W_0W0​本体はまだ大きい。QLoRAはW0W_0W0​自体を4-bit等で圧縮し、その上でLoRAだけ高精度に合わせます。
frozen · 4-bittrain · LoRAxW₀⁽q⁾ · x4-bit・凍結BAx+hbackboneLoRA
図の見方: 左の入力xxxが上灰(凍結バックボーン)と下紫(学習LoRA)に分かれ、+で合わさり右出力hhhへ。灰=4-bit凍結、紫=学習側。
2. INT8量子化 — 「保存」と「計算」を分けて読む
一行要約: ディスク·VRAMには短い整数、行列積の直前に÷αで小数に近く戻す。
ずっと整数だけで計算するわけではありません。保存は小さく、計算はFP16/BF16など広い型—この二段構えが読み解きの鍵です。
手順(アニメーションと同じ):
1. ブロック内の最大絶対値(例5.4)
2. その値が127に来るようスケールα(≈23.5)
3. 各要素にαを掛け丸めて保存(例 1.2→28)
4. 使うとき28÷23.5≈1.2で逆量子化
本章の核心式(記号はここ):
qi=round(xi⋅α),x^i=qi/αq_i=\mathrm{round}(x_i\cdot\alpha),\quad \hat{x}_i=q_i/\alphaqi​=round(xi​⋅α),x^i​=qi​/α
- xix_ixi​: 元の小数
- qiq_iqi​: 保存した整数コード
- x^i\hat{x}_ix^i​: 計算用の近似小数
- α\alphaα: 拡大·縮小の物差し
合言葉: 掛けて丸めて保存→、割って復元←。演習の28·127·α≈24はこの4段階の結果です。
3. QLoRA一層 — 太い道(辞書)+細い道(LoRA)
入力xxxが①圧縮·凍結辞書と②LoRAに分かれ足してhhh。
かんたん: 上=圧縮百科(計算時だけ復元)、下=メモ(ここだけ学習)。
h≈W0(q)x+αlorarBAxh\approx W_0^{(q)}x+\frac{\alpha_{\mathrm{lora}}}{r}BAxh≈W0(q)​x+rαlora​​BAx
読み方: 辞書の反応+LoRAの上乗せ。辞書固定、LoRAだけ学習。
4. その他のキーワード — NF4·二重量子化·構成
NF4 — 重みは中央に集まりやすいので、よく出る区間を細かくコード化する分布向け4-bit。単純4-bitより品質が落ちにくいことが多い。
二重量子化 — ブロックごとにαが増えるので、α表そのものも再圧縮。小さな節約が数千ブロックで積み上がる。
構成 — 圧縮バックボーン1つを共有し、タスクごとに小さなLoRAだけ差し替える絵。巨大モデルを毎回丸ごと保存しなくてよい。

QLoRAと量子化: 巨人モデルを軽く扱う

1. 量子化とは — 大きな数を小さな箱へ
重みはFP32·FP16の小数で保存されることが多く、精密であるほどファイルとVRAMが大きくなります。量子化はINT8·4-bitの整数コードに変え容量を大きく減らす技術です。
比喩: RAW写真をJPEGに—¼·⅛の容量でも形はほぼ同じ。
例: `0.0137`→`14`にし、行列積の直前に近い小数へ戻す。ポイントは「ずっと整数だけで計算」ではなく「保存は小さく、計算は広い型で」です。
2. 量子化のやり方 — 目盛り(α)を合わせる
まず束の中のいちばん大きい数(絶対値最大)を探します。例: `1.2`, `-0.5`, `5.4` → 5.4が基準。
かんたんに: その最大が127に来るようαを決める(≈23.5)。各数にαを掛け丸めて保存(`1.2`→28)。使うとき28÷23.5≈1.2で戻す(逆量子化)。
一言: 掛けて丸めて保存→割って復元。演習の28·127·α≈24も同じ流れ。
3. NF4 — もう少し賢い4-bit
重みは0付近に多いことが多い。NF4はよく出る区間を細かくした4-bit。「分布向け4-bit」だけでもOK。
二重量子化はα(目盛り)の表も再圧縮。小さな節約の積み上げです。
4. QLoRA — 量子化+LoRA
Ch.08 LoRA: 大きな辞書W0W_0W0​は固定、小さなメモ(LoRA)だけ学習。
QLoRAは辞書自体も軽く。
- W0W_0W0​: 4-bit圧縮・凍結
- LoRA: FP16/BF16でだけ合わせる
比喩: 百科事典はマイクロフィルム、メモは鮮明なペン。数式は数式ガイドへ。

なぜ重要か

1. 大きなモデルをより多くの人が
数十億パラメータの全量学習はメモリ負荷が大きい一方、自分のデータに合わせたい需要は増えています。QLoRAはバックボーンを圧縮・凍結しアダプタだけ学習—一般GPUでも合わせ込みを想像しやすくします。Ch.08 LoRAが学ぶ量を減らすなら、QLoRAは凍結百科の大きさまで減らします。
2. NF4・二重量子化
乱暴な4-bitだけだと品質が揺れやすい。NF4は分布向け4-bitで、教材として品質の落ち込みを抑えやすい。二重量子化はα表まで圧縮—小さな節約の積み上げが効きます。
3. バックボーン1つ、アダプタ複数
圧縮バックボーン+小さなLoRAで、別タスク・別データに同じ大モデルを向けやすい。7B全体を毎回保存せず薄いアダプタだけ差し替える絵です。Ch.08の付箋交換に、本章の百科そのものを軽くするが重なってQLoRAになります。
4. なぜ分けて見るか
メモリ: 圧縮·凍結辞書+学習LoRA+バッチ·系列長も一緒に。計算: 保存小·使う前に復元。学習: 辞書固定、LoRAだけ変更。

どう使うか

ステップ1: 圧縮バックボーンを載せる
QLoRAを始めるとき、まず 大きな事前学習モデル W0W_0W0​ を 軽い形で読み込みます。重みはディスクとVRAMに 4-bit·NF4 のような 短い整数コード で入り、実際に行列積するときだけ FP16/BF16 など 広い数値表現に一時的に戻して 計算します。
比喩: 図書館の百科事典を全部棚に並べず マイクロフィルム にしておき、読むページだけ はっきりした写し を広げるイメージです。だから本章の第一歩は 「保存は小さく、計算は安定な型で」 です。
ステップ2: LoRAを付けて合わせる
W0W_0W0​は凍結。4-bit部分は学習せず、LoRAだけFP16/BF16で学習。変わるのはLoRAだけ—圧縮辞書+LoRAの足し算。
ステップ3: データとダイヤルを合わせる
うまく合わせるには 何を教えるか(データ) と どれだけ太く学ぶか(ハイパラ) の両方を見ます。指示文・対話・FAQなど タスクに合った例 を用意し、学習率・エポック数、LoRA rank(アダプタの厚み)、4-bit と 8-bit のどこまで圧縮するか を変えて調整します。
まだVRAMが厳しければ、まず バッチサイズや系列長 を下げるのがよくある手です。品質が物足りなければ、バックボーン全体を解凍するより データ・rank・学習率 から見直すのが自然です。
ステップ4: 学習後に何が残るか
学習が終わると、通常は 圧縮バックボーン1つ を共有し、タスクごとに 小さな LoRA アダプタ だけを持ちます。同じ7B級でも、医療・法務・社内FAQ のように目的が違えば アダプタだけ差し替える 絵が浮かびます。
量子化の流れは max → α → 掛けて丸めて保存 → ÷αで復元。QLoRAはその上に 「4-bit凍結 W0W_0W0​ + LoRAのみ高精度学習」 を載せた組み合わせです。一言で、大きな辞書は一度だけ軽く持ち、合わせ込みは薄いノート(アダプタ)を何枚でも という考え方です。

まとめ

一言:重い辞書(W0W_0W0​)を4-bitで圧縮·凍結し、小さなLoRAだけ合わせる=QLoRA。
四つ(かんたん):
①量子化=掛け丸め保存·割り復元
②NF4=賢い4-bit
③QLoRA=軽い辞書+LoRA
④構成=辞書1つ+LoRA差し替え
図: 保存小·計算前復元·LoRAだけ学習。誤解: 4-bit丸ごとFT(×)·INT4=半分(×、約8倍)。

問題の解き方

量子化·QLoRA の問題では、まず「圧縮・凍結バックボーン+LoRAアダプタ」を思い浮かべます。Ch.08 LoRAは学ぶ量、QLoRAはW0W_0W0​の大きさまで減らします。数値問題はビット倍率(32÷4=8等)と÷α復元、28·127·24がどの段階かを結びます。
以下はバンクと同形の例—概念·正誤から慣れましょう。

「QLoRAの核心に最も近いのは?
① W0W_0W0​ をFP32で再学習
② 4-bit圧縮バックボーン+LoRAのみ高精度
③ ラベル削除」
→ 正解 2
なぜ? バックボーンは凍結し、アダプタだけ合わせます。

例(正誤 · ox)

「QLoRAで 4-bit W0W_0W0​ を通常まるごとFP16微調整する。」
→ 通常は 凍結 → 正解 0
① セッションで出やすい数値タイプの例(バンクと同形)
例(ビット倍率 · vote) — FP32→INT4 の教材用倍率? → 32÷4=32÷4=32÷4= 8
例(INT8丸め · vote) — α≈23.5\alpha \approx 23.5α≈23.5 のとき round(1.2×23.5)\mathrm{round}(1.2 \times 23.5)round(1.2×23.5) → 28
例(量子化スケール · aggregate) — max abs 5.45.45.4 → α≈round(127/5.4)=\alpha \approx \mathrm{round}(127/5.4)=α≈round(127/5.4)= 24
例(累乗 · config) — 242^424 に最も近い整数? → 16

例(シナリオ · scenario)

「Ch.08 LoRAだけでもVRAM不足のとき 次のレバー?
① ラベル削除
② 4-bit QLoRAでバックボーン圧縮
③ Attention削除」
→ 正解 2

例(NF4 · concept)

「NF4に最も近い説明?
① RNN活性化
② 4-bit・分布に合わせたコード
③ 最適化器名」
→ 正解 2

例(二重量子化 · concept)

「Double quantization の利点?
① LoRA rank自動増
② α表の保存コスト追加削減
③ バッチ自動増」
→ 正解 2

例(正誤 · メモリ)

「INT4 はFP16の約 半分 メモリ(教材用)。」
→ 実際はもっと小さい → 正解 0(教材 約8倍)

例(正誤 · QLoRA)

「QLoRA は 量子化 と LoRA を併用する。」
→ 正解 1

例(選択 · NF4 bit)

「NF4は何 bit に近い?」
→ 4

例(選択 · INT8)

「INT8の典型的な 最大正コード?」
→ 127