見出し画像

【ローカルLLM】GPTQ-for-LLaMAによるモデルの量子化を試す

  • Llama系モデルのGPTQ量子化&推論に使用できるパッケージには、AutoGPTQの他に、GPTQ-for-LLaMaがある。

  • 最近はAutoGPTQへの機能集約が進み、高速推論に関してもExllamaが登場したので、GPTQ-for-LLaMAはあまり利用されなくなっている。

  • ただ、量子化に関してはAutoGPTQよりGPTQ-for-LLaMAの方が手軽という噂を聞いたので、ちょっと試してみた。

ELYZA-japanese-Llama-2-7bで試す

量子化パラメータ

  • 量子化パラメータについては、HuggingFaceのGPTQConfigやTheBloke氏のGPTQのモデルカードに分かりやすい解説がある。

  • GPTQ-for-LLaMAのサンプルでは、以下のようになっている。

python llama.py ${MODEL_DIR} c4 --wbits 4 --true-sequential --act-order --groupsize 128 --save_safetensors llama7b-4bit-128g.safetensors
  • 当初、このサンプルのパラメータを使って量子化したが、出力の劣化がやや気になったので、グループサイズ64でやり直した。

  • GPTQデータセットにはそのままc4を利用した。日本語モデルなら日本語データセットを使った方が量子化精度が上がるのかも(?)。

量子化の実行

  • GPTQ-for-LLaMAのインストールと実行はReadmeに記載のとおり。

  • わりとメモリを食うらしく、LLaMA-13BをGPTQ化するのに64GBのRAMを要するとの情報あり。GPUも必要。

  • 今回は7Bモデルなのでスペック弱めで大丈夫そうだが、ちょうどいいクラウドGPUが無く、82GB RAM+RTX 3090 x2という無駄な環境で実施。

  • モデルのダウンロードを含め30分強で量子化が完了した。4bitのgroupsize 64でちょうど4GBに圧縮。llama.cppのQ4_K_Mと同じくらいのサイズ。

生成テキストの確認

  • こちらの記事を参考に、元のモデルとGPTQ量子化モデルで簡単に比べてみた。プロンプトはELYZAの公式から借用し、あらためて自分で出力。

  • まずはオリジナルの「ELYZA-japanese-Llama-2-7b-instruct」の回答:

※ ELYZA-japanese-Llama-2-7b-instruct(オリジナル)の回答


<s><s> [INST] <<SYS>>
あなたは誠実で優秀な日本人のアシスタントです。
<</SYS>>

仕事の熱意を取り戻すためのアイディアを5つ挙げてください。 [/INST]  


仕事の熱意を取り戻すためのアイディアをご紹介します。

1. 仕事のやりがいを見つける: 仕事のやりがいを見つけることで、仕事に対する意欲が高まり、熱意が湧き上がってきます。

2. 仕事の進め方を見直す: 自分の仕事の進め方を見直し、効率の良い方法を見つけることで、仕事への取り組みやすさが変わり、熱意が高まる可能性があります。

3. 仕事のやる気を出す音楽を聞く: 仕事のやる気を出すための音楽を聞くことで、気分を切り替え、熱意を取り戻すことができるかもしれません。

4. 仕事の合間に休憩する: 仕事の合間に休憩することで、仕事への集中力を高め、熱意を取り戻すことができるかもしれません。

5. 仕事のやりがいを伝える: 仕事のやりがいを伝えることで、仕事へのモチベーションが高まり、熱意が取り戻される可能性があります。</s>
  • 4bit量子化(gr64)したモデルの回答:

※ 4bit量子化(gr64)したELYZA-japanese-Llama-2-7b-instructの回答


<s><s> [INST] <<SYS>>
あなたは誠実で優秀な日本人のアシスタントです。
<</SYS>>

仕事の熱意を取り戻すためのアイディアを5つ挙げてください。 [/INST]  


以下は、仕事の熱意を取り戻すためのアイデアです。

1. 新しいことに挑戦する
    - 新しい業務を任される
    - 資格の勉強をする
    - 自分のスキルをアップデートする
2. 責任を持って仕事をする
    - 仕事を細かく区切り、段階的に達成感を感じられるようにする
    - ミスが少なくなるように注意をする
3. 仕事のやりがいを感じられるようにする
    - 報酬や評価のシステムを見直す
    - 仕事の内容を変更する
4. 仕事の効率を上げる
    - タスクを細かく区切り、優先順位をつける
    - 仕事の合間に休憩をする
5. 仕事の説明を理解しやすくする
    - 仕事の目的を明確にする
    - 報連相をする

以上は、仕事の熱意を取り戻すためのアイデアです。状況によっては、効果がない場合もありますが、参考になれば幸いです。</s>
  • 内容は特に代わり映えしない。他のプロンプトでも試してみたが、とりあえず量子化モデルが大きく劣化していることはなさそう。

  • モデルの出力は温度などのサンプリング次第なので、上記の出力例はあくまで参考。

備考

  • GPTQ-for-LLaMAでは、グループサイズ128がデフォルトになっているが、今回試したところGS 128の4-bit GPTQだと出力テキストにrepetitionが見られた。

  • グループサイズが大きいほうが多少速いというが、Exllamaを使えば4bitのGPTQは高速で動かせるので、グループサイズを大きめに設定するメリットはあまりない気もする。

参考

  • 量子化パラメータについての詳細は下記にまとまっている。AutoGPTQを前提にした解説だが、基本的にGPTQ-for-LLaMAと共通。

  • オリジナルの「ELYZA-japanese-Llama-2-7b-instruct」の利用はこちらの記事を参照した。7Bモデルは量子化しなくてもColabで実行できるサイズ。llama.cppもあるし、7BモデルではGPTQの必要性は乏しそう。

  • GPTQ-for-LLaMAによる量子化については、コンパクトで分かりやすい記事が転がっていた。「馬鹿でも分かるLLaMA量子化ガイド」。