見出し画像

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 3.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




この記事が気に入ったらサポートをしてみませんか?