Upgrade to Pro — share decks privately, control downloads, hide ads and more …

関東Kaggler会LT: 人狼コンペとLLM量子化について

YuyaYAMAMOTO
February 14, 2025

関東Kaggler会LT: 人狼コンペとLLM量子化について

LLM同士がプレイした人狼ゲームのログから、人狼3名の名前と勝利陣営予測を行った。
商用APIだけでなく、ローカルLLMも交えて多様性のあるデータセットの作成を試みた。
VRAMに収まるようにGPTQで量子化したところ、ベンチスコアは大して下がらないのにエージェントの推論能力に低下を認めた。
ごく一部の層の重み空間の外れ値起因であることを特定し、量子化を工夫することで、推論能力の低下を抑制した。具体的には外れ値を差分行列として分離・行列分解することで、LoRAアダプターとして保存、推論時に注入するように実装を行なった。
これにより、量子化誤差と推論能力の低下を抑制することに成功した。

YuyaYAMAMOTO

February 14, 2025
Tweet

More Decks by YuyaYAMAMOTO

Other Decks in Technology

Transcript

  1. 2 山本 祐也 (Yuya YAMAMOTO) • AI Solution Engineer -

    Customer Success@W&B - 前職はDataRobotで製造業担当 • Kaggle Competitions Grandmaster ◦ ID: nejumi
  2. 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 量子化モデル 元モデル
  3. ここでLLMの量子の概略をおさらい Quantization Dequantization • 例えばint8への量子化であれば、半精度浮動 小数点数 (fp16/bf16) の重みをint8 (0-255) に

    割り付ける • zero-point (sym=Trueの場合は128固定) と scale factorをメモっておいて、量子化 /逆量子 化を行う 出典: A Visual Guide to Quantization
  4. ナイーブな量子化の問題点と各手法のアプローチ 出典: LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale

    • 実際には単純にastype(“int8”) 的な変換をす るとモデルが破綻する • これは、Activation空間における外れ値の影響 が支配的となるため ◦ LLM.int8()ではActivationが大きい(ない しヒューリスティックに基づいてそのよう に予測される)特徴を 16-bitのまま保護 ◦ GPTQは逆ヘッセ行列の対角成分を用 いた重みの重み付き誤差を最小化する ことで、間接的にActivation誤差を線形 代数的に抑制 ◦ AWQではActivationの大きさに応じて重 みをスケール
  5. 量子化誤差の発生状況(補足) • こちらは、各層において以下をカラム平均で保存しておいて、ヒートマップにしたもの ◦ 重みの重み付き誤差 ◦ 入力Activation ◦ 量子化前の重み •

    model.layer.33.gate_proj , up_projに誤差のスパイクを示す輝点が確認できる。 ◦ ちなみに輝点の数は 127個 (= group_size - 1) だった。
  6. LoRAの応用で極端な重みの外れ値に対応 Blue: 量子化前の元モデル Orange: 通常のGPTQ (8bit) Green: GPTQ + Outlier

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