LoRAで学ぶ「効率よくAIを鍛える」技術–フル学習との違いを図解

LoRAで学ぶ「効率よくAIを鍛える」技術--フル学習との違いを図解 のアイキャッチ画像 解析技術

ファインチューニング、やりたいのに重すぎ問題

ヤモリくん(困り)の立ち絵

「ファインチューニングに挑戦しようと思ったんだけど、GPUメモリが全然足りないって言われて……」
「あるある。7Bのモデルをフルでファインチューニングしようとすると、80GB以上のGPUメモリが必要になることもある。コンシューマGPUじゃ到底無理な世界だよ。」

トカゲ先生(通常)の立ち絵

ヤモリくん(驚き)の立ち絵

「80GB!?一般人には不可能じゃん……」
「そこで今日はもっとかしこいやり方、LoRAを紹介するよ。オレが一番おすすめしたい効率化手法だ。」

トカゲ先生(笑顔)の立ち絵


ファインチューニングの「重すぎる」問題

全パラメータ更新の三重苦

AIモデルを特定のタスクに合わせて鍛える「ファインチューニング」。その中でも全パラメータを更新するフルファインチューニングは、とにかくコストが重たい。

ヤモリくん(通常)の立ち絵

「なんでそんなに重いの?」
「7Bモデルっていったら70億個のパラメータがある。それを全部学習中にメモリへ乗せて更新し続けるから、GPUメモリだけで80GB以上が必要になる。しかも時間もかかる、電気代もかかる、保存ファイルもでかい。三重苦だな。」

トカゲ先生(通常)の立ち絵

コスト項目 フルFTの問題
GPUメモリ 7Bモデルで80GB以上必要
学習時間 全パラメータ分の計算が発生
電力・ストレージ どちらも膨大
ヤモリくん(困り)の立ち絵

「じゃあ一般人はファインチューニングをあきらめるしかないの?」
「あきらめなくていい。PEFT(Parameter-Efficient Fine-Tuning)っていう考え方があってさ、全パラメータじゃなくてごく少数のパラメータだけを効率よく学習する手法の総称なんだ。LoRAはその代表格だよ。」

トカゲ先生(ひらめき)の立ち絵

図解


LoRAの発想 ─ 「全教科復習」から「苦手科目の補習ノート」へ

比喩でつかむLoRAの本質

ヤモリくん(通常)の立ち絵

「LoRAって、具体的にどんな発想なの?」
「試験前に全教科を最初からやり直すのって、めちゃくちゃ大変じゃない?」

トカゲ先生(通常)の立ち絵

ヤモリくん(困り)の立ち絵

「それは絶対無理……」
「でも苦手な科目だけ薄い補習ノートを作って、そこだけ重点的に勉強するなら現実的だろ?」

トカゲ先生(笑顔)の立ち絵

ヤモリくん(ひらめき)の立ち絵

「それならできる!」
「LoRAはまさにその発想だ。元のモデル(=これまで蓄えた全知識)はそのまま凍結して触らない。そこに小さな”補習ノート”(=LoRAアダプタ)を追加して、その部分だけを学習するんだよ。」

トカゲ先生(笑顔)の立ち絵

図解

「凍結」って何?アダプタって何?

ヤモリくん(通常)の立ち絵

「凍結するって、元のモデルは学習中に変わらないってこと?」
「そう、元の重みは一切変えない。学習するのはあとからくっつけた小さなアダプタだけだ。だから全体のパラメータのうち0.1%〜1%程度を更新するだけで、フルファインチューニングと同等の性能が出せちゃう。」

トカゲ先生(笑顔)の立ち絵

ヤモリくん(驚き)の立ち絵

「ちょっと待って。1%以下のパラメータ更新で本当に同じ性能が出るの?」
「そこがLoRAの面白いところ。大規模言語モデルの重みの更新って、実は本質的に低次元の情報しか持っていないという特性があるんだ。何十億もあるパラメータ全部を更新しなくても、重要な変化はずっと少ない次元でとらえられる。」

トカゲ先生(ひらめき)の立ち絵

ヤモリくん(ひらめき)の立ち絵

「高次元に見えて、本当に大事な情報はシンプルにまとまってるんだ……!」
「そういうこと。賢い話だろ?」

トカゲ先生(笑顔)の立ち絵

アダプタはゼロからスタートする

もうひとつ大事なポイント。LoRAのアダプタは学習開始時にほぼゼロに近い値にセットされています。

ヤモリくん(通常)の立ち絵

「なんでゼロ近くからスタートするの?」
「元のモデルが今まで学んできたことを壊さないためだよ。補習ノートを最初から書き散らかしたら、今までの知識が台無しになるだろ?ゼロから始めて、学習しながら少しずつ書き足していくイメージだな。」

トカゲ先生(通常)の立ち絵

ヤモリくん(通常)の立ち絵

「元の知識を守りながら、新しい知識を少しずつ追加していくわけか。」

図解で見るLoRAの仕組み ─ 2つの小さな行列の掛け算

行列AとB、その正体

ヤモリくん(困り)の立ち絵

「LoRAって行列とか出てきて難しそうで……」
「数式は飛ばして、オレの比喩だけで理解しよう。元のモデルには大きな重み行列Wがある。全知識の塊だと思って。フルFTはこのWを直接書き換える。」

トカゲ先生(通常)の立ち絵

ヤモリくん(通常)の立ち絵

「それが重いんだよね。」
「そう。LoRAはWを触らずに、代わりに行列A行列Bという2つのすごく小さな行列を用意する。この2つを掛け合わせたBAを、Wに足し算する形で出力を補正するんだ。」

トカゲ先生(ひらめき)の立ち絵

図解

式にするとこうなります。雰囲気だけで十分です:

出力 = W(元の重み・凍結) + B × A(学習する小さな補正)
W+BA、つまり元の知識に補習ノートを足し算してるイメージだ。」

トカゲ先生(笑顔)の立ち絵

ヤモリくん(ひらめき)の立ち絵

「わかった!補習ノートの内容を元の教科書に足してるんだ。」

ランクrって何?なぜ小さくて済むの?

ヤモリくん(困り)の立ち絵

「LoRAの話でよく出てくる『ランクr』って何のこと?」
「rはAとBの行列の太さ・細さを決める数字だよ。元の行列Wが1000×1000の大きさだとしたら、Aは1000×r、Bはr×1000になる。rが小さいほど行列が細くなってパラメータ数が減る。」

トカゲ先生(通常)の立ち絵

ヤモリくん(通常)の立ち絵

「rが小さいほど軽いってこと?」
「そう。でもrが小さすぎると補習ノートが薄すぎて性能が落ちることもある。タスクの難しさや必要な精度に応じて調整していく感じだよ。」

トカゲ先生(通常)の立ち絵

図解

ヤモリくん(困り)の立ち絵

「AとBの2枚の薄い行列に分解するだけで、なんでそんなにパラメータが減るの?」
「たとえばWが1000×1000なら100万パラメータ。でもr=4のとき、Aは1000×4=4000、Bは4×1000=4000、合計8000パラメータだけで済む。元の100万に対して8000だから、ものすごく少ない情報量でWの更新を近似できるわけだ。」

トカゲ先生(ひらめき)の立ち絵

ヤモリくん(ひらめき)の立ち絵

「2枚の薄い板に分解することで、めちゃくちゃ少ない情報量で表現できるんだ!」

QLoRAでさらに軽く ─ 量子化との組み合わせ

QLoRAって何が違うの?

ヤモリくん(通常)の立ち絵

「LoRAだけじゃなくてQLoRAっていうのも聞いたんだけど、何が違うの?」
「QLoRAはQuantized LoRAの略で、LoRAに4ビット量子化を組み合わせた手法だよ。」

トカゲ先生(通常)の立ち絵

ヤモリくん(困り)の立ち絵

「量子化って何?」
「モデルの数値の精度をあえて落とすことで、メモリを圧縮する技術だ。普通は32ビットや16ビットの精度で重みを保存してるんだけど、それを4ビットまで減らす。情報は少し粗くなるけど、精度の劣化はごくわずかで済む。」

トカゲ先生(通常)の立ち絵

ヤモリくん(通常)の立ち絵

「どのくらいメモリが減るの?」
「65Bという超巨大なモデルでも48GBのGPUでファインチューニングできるようになる。そして7Bモデルなら8GB VRAMで学習可能になるよ。」

トカゲ先生(笑顔)の立ち絵

ヤモリくん(驚き)の立ち絵

「8GB!?それって家庭用のゲーミングGPUでも動くじゃないですか!」
「そう!RTX 3090や4090(24GB VRAM)なら、QLoRAもLoRAも使えて7B〜13BモデルのファインチューニングがOKになる。個人のGPUでも全然戦えるレベルだよ。」

トカゲ先生(笑顔)の立ち絵

図解

LoRA QLoRA
量子化 なし 4ビット量子化あり
必要メモリ 少ない さらに少ない
精度 高い ごくわずかな劣化あり
向いてる場面 VRAMに余裕あり 個人GPU・省メモリ優先
ヤモリくん(困り)の立ち絵

「量子化で精度が落ちるのが心配なんだけど……」
「ごくわずかな劣化で実用上ほぼ問題ないケースが多いよ。使えるGPUの性能と相談しながら選ぶのが現実的だな。」

トカゲ先生(通常)の立ち絵


LoRA・QLoRA・フルFT ─ どれを選べばいい?

自分の環境に合った手法の選び方

ヤモリくん(困り)の立ち絵

「結局どれを使えばいいの?」
「シンプルにまとめるとこう。」

トカゲ先生(笑顔)の立ち絵

図解

手法 向いてる人 GPU目安
フルFT 企業・研究機関レベル 80GB以上
LoRA VRAMに余裕のある個人 24GB以上(RTX 3090/4090等)
QLoRA 個人ユーザー全般 8GB〜24GB

「個人ユーザーなら基本的にQLoRA一択

参考文献

コメント

タイトルとURLをコピーしました