🎣

LLM 4bit 量子化ライブラリ(CPU, GPU)のメモ(2023/05 時点)

2023/05/13に公開

LLM モデルを 3090(24GB) ちゃん x 1 でファインチューンしたい...
iPhone とかで動かしたい...

8bit ではまだまだ大きい... 4bit(or 3bit とかも!)で処理したい.

LLM では, outlier(外れ値)考慮し適切に量子化したほうが性能が出る場合もありますので,
4bit にしたら必ずしも精度が減るわけではないのです!

https://arxiv.org/abs/2208.07339

2023/05 時点で使える 4bit 量子化ライブラリを調べました.

bitsandbytes(4bit 対応 2023/05/22 時点で開発中)

https://github.com/TimDettmers/bitsandbytes

古参(?)の LLM 向け 8bit 量子化ライブラリです.
CUDA only です(ROCm 対応も始まっているようであるが)

huggingface transformers に組み込まれていますが, コードが汚すぎ + 実行時 .so ロードという仕組みなので運用がめんどい + ポータブルでない(Windows dll コンパイル対応していないなど)でできれば使いたくないところ...

https://github.com/huggingface/transformers/pull/23479

transformers での 4bit 対応が始まっています. 2023/06 月にはマージされそう?

llama.cpp(gglm)

最近流行りの CPU で LLM するフレームワーク. ggml ベースです.

https://github.com/ggerganov/llama.cpp

4bit 量子化もあります(CPU, CUDA, OpenCL)

コードはそれなりにポータブルでええね.

LLM 特化の量子化が bitsandbytes より勝っているかどうかは不明です(bitsandbytes or LLM.int8 paper では, outlier を考慮するために量子化いろいろ頑張っている)

mlc-llm

MLC-LLM で Vulkan など Graphics API + C/C++ で LLM が流行ってほしいメモ
https://zenn.dev/syoyo/articles/660570a5e50f5f

4bit 量子化などは CoreML など限られた backend だったような?(要検証. CUDA/Vulkan でも 4bit 使えるかも)

Auto-GPTQ

https://github.com/PanQiWei/AutoGPTQ

https://github.com/qwopqwop200/GPTQ-for-LLaMa

ビルドがしっかりしており(試していないが, Windows でもビルドは通りそう?), huggingface や pytorch 連携もちゃんとしている印象があって,
出てきたのは 2023/04 月ですが, pytorch + transformers で使うばあいはこれからの本命っぽそうな印象.

量子化性能は bitsandbytes より勝るかは不明ですが, 使いやすさは Auto-GPTQ のほうが上そうです!

pytorch 拡張としてビルドされるので, pytorch の CUDA version と合わせる必要があります.

そうしないと, pip install ビルド時

The detected CUDA version (12.1) mismatches the version that was used to compile                        
      PyTorch (11.7). Please make sure to use the same CUDA versions

というエラーでます.

システムにインストールされている CUDA SDK(nvcc)バージョンが新しければ, 一応 nvcc は backward compatible のはずなので, コンパイル OK ししてほしいところですが..

conda を使って環境構築している場合は conda で CUDA SDK インストールするのがよいでしょう.

https://anaconda.org/nvidia/cuda-toolkit

私の環境では pytorch は cuda 11.7 でしたので,

$ conda install -c "nvidia/label/cuda-11.7.1" cuda-toolkit

でインストールで対応できました.

複数 CUDA SDK バージョンインストールしている場合, CUDA_PATH 環境変数を conda の 11.7.1 に通して, 再度 python -m pip install auto-gptq でいけるでしょう.

binary prebuilt も近いうちに提供されそうです.

https://github.com/PanQiWei/AutoGPTQ/issues/56

まとめ

とりま huggingface transformers でファインチューンなどで 4bit 量子化したい場合は GPTQ ですかね.

iPhone とかで動かしたい場合は mlc-llm, llama.cpp(ggml) で.

Discussion