LLM 4bit 量子化ライブラリ(CPU, GPU)のメモ(2023/05 時点)
LLM モデルを 3090(24GB) ちゃん x 1 でファインチューンしたい...
iPhone とかで動かしたい...
8bit ではまだまだ大きい... 4bit(or 3bit とかも!)で処理したい.
LLM では, outlier(外れ値)考慮し適切に量子化したほうが性能が出る場合もありますので,
4bit にしたら必ずしも精度が減るわけではないのです!
2023/05 時点で使える 4bit 量子化ライブラリを調べました.
bitsandbytes(4bit 対応 2023/05/22 時点で開発中)
古参(?)の LLM 向け 8bit 量子化ライブラリです.
CUDA only です(ROCm 対応も始まっているようであるが)
huggingface transformers に組み込まれていますが, コードが汚すぎ + 実行時 .so
ロードという仕組みなので運用がめんどい + ポータブルでない(Windows dll コンパイル対応していないなど)でできれば使いたくないところ...
transformers での 4bit 対応が始まっています. 2023/06 月にはマージされそう?
llama.cpp(gglm)
最近流行りの CPU で LLM するフレームワーク. ggml ベースです.
4bit 量子化もあります(CPU, CUDA, OpenCL)
コードはそれなりにポータブルでええね.
LLM 特化の量子化が bitsandbytes より勝っているかどうかは不明です(bitsandbytes or LLM.int8 paper では, outlier を考慮するために量子化いろいろ頑張っている)
mlc-llm
MLC-LLM で Vulkan など Graphics API + C/C++ で LLM が流行ってほしいメモ
4bit 量子化などは CoreML など限られた backend だったような?(要検証. CUDA/Vulkan でも 4bit 使えるかも)
Auto-GPTQ
ビルドがしっかりしており(試していないが, 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 インストールするのがよいでしょう.
私の環境では 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 も近いうちに提供されそうです.
まとめ
とりま huggingface transformers でファインチューンなどで 4bit 量子化したい場合は GPTQ ですかね.
iPhone とかで動かしたい場合は mlc-llm, llama.cpp(ggml) で.
Discussion