![見出し画像](https://assets.st-note.com/production/uploads/images/138241191/rectangle_large_type_2_f42430ce127353e20e6eda41031fcc1c.png?width=1200)
llama.cpp による transformersモデル の量子化
「llama.cpp」による「transformersモデル」の量子化の手順をまとめました。
・M3 Max
1. Llama.cppのインストール
Llama.cppのインストール手順は、次のとおりです。
(1) Xcodeのインストール。
「Llama.cpp」は、インストール時に環境にあわせてソースからビルドして利用するため、MacではXcodeのビルドツールが必要になります。
(2) リポジトリのクローン。
$ git clone https://github.com/ggerganov/llama.cpp
$ cd llama.cpp
(3) ビルド。
$ make
(4) llama.cppフォルダのあるフォルダに移動。
今回は、llama.cppフォルダのあるフォルダで作業します。
$ cd ..
2. 変換するtransformersモデルの準備
今回は練習用に「meta-llama/Meta-Llama-3-8B-Instruct」を準備します。
(1) transformersモデルの準備。
$ git clone https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct
3. transformersモデルをggufに変換
「transformersモデル」を「gguf」に変換する手順は、次のとおりです。
(1) Pythonの仮想環境の準備。
今回は、Python 10の仮想環境を準備しました。
(2) Llama.cppの依存関係のインストール
$ pip install -r ./llama.cpp/requirements.txt
(3) transformersモデルをggufに変換。
「./gguf-model_f16.gguf」が生成されます。
「Llama 3」ではVocabにBPEが要求されたので指定しています。
$ python ./llama.cpp/convert.py ./Meta-Llama-3-8B-Instruct --vocab-type bpe --outtype f16 --outfile ./gguf-model_f16.gguf
4. gguf量子化
gguf量子化の手順は、次のとおりです。
(1) ggufの量子化。
「Meta-Llama-3-8B-Instruct.Q4_K_M.gguf」が生成されます。
$ ./llama.cpp/quantize ./gguf-model_f16.gguf ./models/Meta-Llama-3-8B-Instruct.Q4_K_M.gguf Q4_K_M
・Q2_K : 2.63G, +0.6717
・Q2_K_S : 2.16G, +9.0634
・Q3_K : alias for Q3_K_M
・Q3_K_S : 2.75G, +0.5551
・Q3_K_M : 3.07G, +0.2496
・Q3_K_L : 3.35G, +0.1764
・Q4_0 : 3.56G, +0.2166
・Q4_1 : 3.90G, +0.1585
・Q4_K : alias for Q4_K_M
・Q4_K_S : 3.59G, +0.0992
・Q4_K_M : 3.80G, +0.0532
・Q5_0 : 4.33G, +0.0683
・Q5_1 : 4.70G, +0.0349
・Q5_K : alias for Q5_K_M
・Q5_K_S : 4.33G, +0.0400
・Q5_K_M : 4.45G, +0.0122
・Q6_K : 5.15G, +0.0008
・Q8_0 : 6.70G, +0.0004
5. imatrix量子化
imatrix量子化の手順は、次のとおりです。
(1) iMatrix計算用データセットの準備。
よく使われるデータセットは、次の3つです。
今回は、「c4_en_ja_imatrix.txt」を使います。
・c4_en_ja_imatrix.txt : bakuさんが作成した日英テキストのデータセット
・wiki.train.raw:Wikitext(英語版)の学習用データセット
・groups_merged.txt:kalomazeさんが作成した疑似ランダムデータセット
(2) ggufからimatrixへの変換。
「./gguf-model.imatrix」が生成されます。
$ ./llama.cpp/imatrix -m ./gguf-model_f16.gguf -f ./c4_en_ja_imatrix.txt -o ./gguf-model.imatrix --chunks 32
(3) imatrixの量子化
「./Meta-Llama-3-8B-Instruct_IQ4_XS.gguf」が生成されます。
$ ./llama.cpp/quantize --imatrix ./gguf-model.imatrix ./gguf-model_f16.gguf ./Meta-Llama-3-8B-Instruct_IQ4_XS.gguf iq4_xs
・IQ1_S : 1.56 bpw quantization
・IQ1_M : 1.75 bpw quantization
・IQ2_XXS : 2.06 bpw quantization
・IQ2_XS : 2.31 bpw quantization
・IQ2_S : 2.5 bpw quantization
・IQ2_M : 2.7 bpw quantization
・IQ3_XXS : 3.06 bpw quantization
・IQ3_S : 3.44 bpw quantization
・IQ3_M : 3.66 bpw quantization mix
・IQ3_XS : 3.3 bpw quantization
・IQ4_NL : 4.50 bpw non-linear quantization
・IQ4_XS : 4.25 bpw non-linear quantization
この記事が気に入ったらサポートをしてみませんか?