Slide 1

Slide 1 text

1 人狼コンペとLLM量子化について Yuya Yamamoto

Slide 2

Slide 2 text

2 山本 祐也 (Yuya YAMAMOTO) ● AI Solution Engineer - Customer Success@W&B - 前職はDataRobotで製造業担当 ● Kaggle Competitions Grandmaster ○ ID: nejumi

Slide 3

Slide 3 text

3 Agenda 1. 人狼コンペの概要 2. モデルの量子化で発生した問題 3. LLM量子化のおさらい 4. 問題の解析 5. 対応策 6. 結果とまとめ

Slide 4

Slide 4 text

関西の某Kaggleコミュニティ向けに人狼コンペを開催 ● LLM同士の人狼ゲームログから「誰 が人狼か」と「どちらの陣営が勝つ か」を予測するコンペ ● コンペ自体の詳細は Ryushiさんの以 下のSpeaker Deckを参照のこと

Slide 5

Slide 5 text

コンペデータ生成のためのシミュレータを実装 ● コンペ用のデータを用意 するために、簡単なシミュ レータを実装した ● YAMLでキャラ設定や ゲーム構成、モデル情報 を指定して実行すると、商 用API, Local LLM含め 様々なモデルがゲームを プレイしてログがJSONL で出力される

Slide 6

Slide 6 text

自宅環境で実行するために GPTQによる量子化を行う ● 自宅マシンのVRAMは限られ るため、量子化モデルが必要 だが、かつて何でも量子化し てくれていたTheBloke氏は 2024/2以降姿を消してしまっ た・・・ ● 自分でやるしかない

Slide 7

Slide 7 text

Llama 3系の70Bモデルに対する GPTQの影響 ● オーバーオールのベンチスコア平均 点はさほど低下しないが MT-Bench のReasoningの項目で顕著な低下 が認められた。 ● 人狼ゲームでは論理的推論能力こ そが大事なので、これは困る。

Slide 8

Slide 8 text

Llama 3系の70Bモデルに対する GPTQの影響 あなたが人々と一緒にレースをしていると想像してみてください。あなたがちょうど 2番目の人を追い越したとしたら、あなたの現在の位置は何番目 でしょうか? あなたが追い越した人の位置はどこでしょうか? 楽しい質問ですね! 順を追って考えてみましょう : 1. **あなたがちょうど2番目の人を追い越した ** ということは、レースの中で 2番目の 人をあなたが追い越したということです。 2. **あなたの現在の位置は何番目でしょうか? ** - あなたは2番目の人を追い越したので、自動的にあなたは 2番目の位置に移動し ます。つまり、**あなたの現在の位置は 2番目**です。 3. **あなたが追い越した人の位置はどこでしょうか? ** - あなたが2番目の人を追い越したので、その人はいったん 2番目だった位置をあ なたに譲りました。つまり、その人はあなたの後ろに移動し、 **あなたが追い越した 人の現在の位置は3番目**です。 まとめると: - **あなたの現在の位置 :** 2番目 - **あなたが追い越した人の現在の位置 :** 3番目 楽しい質問です!😊 ここで、状況を分析してみましょう : 1. **あなたがちょうど2番目の人を追い越した ** ということは、以下の 2点を意味しま す: * あなたは、2番目の人より後ろにいた(最初は)。 * あなたは、2番目の人を追い越したので、現在は 2番目の人より前にい る。 2. **あなたの現在の位置は何番目 ?** * 2番目の人を追い越したので、現在は 2番目の人より前にいることを意味 します。 * したがって、あなたの現在の位置は **1番目** です。 3. **あなたが追い越した人の位置はどこ ?** * あなたが2番目の人を追い越したので、 2番目の人は現在、あなたの後ろ にいることを意味します。 * したがって、あなたが追い越した人の現在の位置は **2番目** です。 **答え:** * **あなたの現在の位置 :** **1番目** * **あなたが追い越した人の現在の位置 :** **2番目** 󰝋👏 Score: 10 Score: 2 量子化モデル 元モデル

Slide 9

Slide 9 text

ここでLLMの量子の概略をおさらい Quantization Dequantization ● 例えばint8への量子化であれば、半精度浮動 小数点数 (fp16/bf16) の重みをint8 (0-255) に 割り付ける ● zero-point (sym=Trueの場合は128固定) と scale factorをメモっておいて、量子化 /逆量子 化を行う 出典: A Visual Guide to Quantization

Slide 10

Slide 10 text

ナイーブな量子化の問題点と各手法のアプローチ 出典: LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale ● 実際には単純にastype(“int8”) 的な変換をす るとモデルが破綻する ● これは、Activation空間における外れ値の影響 が支配的となるため ○ LLM.int8()ではActivationが大きい(ない しヒューリスティックに基づいてそのよう に予測される)特徴を 16-bitのまま保護 ○ GPTQは逆ヘッセ行列の対角成分を用 いた重みの重み付き誤差を最小化する ことで、間接的にActivation誤差を線形 代数的に抑制 ○ AWQではActivationの大きさに応じて重 みをスケール

Slide 11

Slide 11 text

量子化誤差の発生状況 wandbを用いて誤差の発生箇所を調 べたところ、ごく一部の層で発生してい ることがわかった。 誤差が非常に大きい : model.layers.33.self_attn.gate_proj model.layers.33.self_attn.up_proj 誤差がやや大きい: model.layers.9.self_attn.gate_proj model.layers.9.self_attn.up_proj

Slide 12

Slide 12 text

量子化誤差の発生状況(補足) ● こちらは、各層において以下をカラム平均で保存しておいて、ヒートマップにしたもの ○ 重みの重み付き誤差 ○ 入力Activation ○ 量子化前の重み ● model.layer.33.gate_proj , up_projに誤差のスパイクを示す輝点が確認できる。 ○ ちなみに輝点の数は 127個 (= group_size - 1) だった。

Slide 13

Slide 13 text

問題のある層とない層の重みの分布の比較 誤差がスパイクしている層 問題ない層 (例: layer.32)

Slide 14

Slide 14 text

問題のある層とない層の重みの分布の比較 誤差がスパイクしている層 問題ない層 (例: layer.32) スパイクしている層にはありえ ん外れ値が含まれる → 同一group内の重みは量 子化のbinningが外れ値に引 きずられて適切に割り当てら れないのではないか?

Slide 15

Slide 15 text

LoRAの応用で極端な重みの外れ値に対応 +11.8 -11.6 -8.2 -5.4 + 重みの外れ値を差分行列として 分離し、SVDにかけてPEFT互換 のLoRAアダプターとして保存す る + 重みの外れ値 量子化

Slide 16

Slide 16 text

LoRAの応用で極端な重みの外れ値に対応 アダプターなし アダプターあり アダプターなし アダプターあり

Slide 17

Slide 17 text

LoRAの応用で極端な重みの外れ値に対応 Blue: 量子化前の元モデル Orange: 通常のGPTQ (8bit) Green: GPTQ + Outlier LoRA (8bit) ● ベンチマーク結果が改善し、論理的推 論能力も元モデルと略同等レベルに なっていることが確認できた。 ● この方法は生成される量子化モデル 自体は通常のGPTQによるものと完 全な互換性があり、推論時にはカスタ ムなしのAutoGPTQで大丈夫。 ● LoRAアダプターもPEFTとフォーマッ トを合わせている ● 例えばvLLMはGPTQとLoRA両方サ ポートしているので、そのまま使える。 * ちなみにclipだけでもこの場合は一定改善するが、まだ性能低下が残る。また、場合によってはそれが重要 箇所だとモデル性能の大幅低下を招くリスクもあると考える。

Slide 18

Slide 18 text

コミュニティコンペも無事終了 ● 人狼予測は比較的予測性が高かった 一方で、勝利陣営予測が非常に難し く、データ数も限られたために結構 シェイクしてしまった。 ● シェイクさせないこと自体が問題作成 時の目的ではないのだが、評価指標 は調整の余地があったかもしれない と反省している。

Slide 19

Slide 19 text

GPTQはじめました

Slide 20

Slide 20 text

まとめ ● 人狼シミュレータを実装してコンペ用データを生成するために、LLMの量子化 を行ったところ、論理的推論能力に特異的な低下が認められた。 ● 誤差の解析を行ったところ、一部の層の重みに著しい外れ値が発生している ことがわかった。 ○ 同一group内の重みが巻き添えになって適切なbinningが割り当てられ なくなったと想定した。 ● 外れ値を差分行列として分離し、SVDにかけてLoRAアダプターとして保存す ることで解決した。 ● コンペは結構シェイクさせてしまった。

Slide 21

Slide 21 text

21 Thank you!