LLM ExL2量子化作成
備忘込みのメモ。
トークン生成速度が物足りないので色々やってみた結果。
ChatGPT o4に色々聞いていたら、GPTQやらExLlamaV2(ExL2)やらが良いとおすすめされたので、ExL2を試した成功分。
ExLlamaV2(ExL2)量子化。
・量子化しつつキャリブレーション用のデータを用意する事で残したいものを重視できる
・キャリブレーションデータはParquet形式のデータが必要で、初期値で2048トークン分の100行分。(多いと過学習するが少ないとダメらしい)指定したキャリブレーションデータ量がParquetデータに入ってない(不足している)とエラーで落ちる、多めの文章を適当に入れておけばよいと思う。
・キャリブレーションデータは自作LoRA用のデータがあればそれ。それで足りなければ適当な日本語文章を追加で用意。
・動作にはVongolaChouko/Starcannon-Unleashed-12B-v1.0でやった時はRAM30GB、VRAM8GBくらい使った(GPTQと同じくらい)
・今回5bitで試したが4bitでも良いのかも。(GPTQ4bitと変わらん)
・結果はファイルサイズ1/3強、3090のVRAM使用量が6割くらいの14GBちょっと。Text Generation WebuiのAPI経由で50~60tk/sくらい。(変換前は17~20tk/s)。割と早い。日本語品質の低下も自分には気にはならない程度。
・GPTQよりコンテキストが多い場合の初回の時間は短い。12000トークンで5秒とか。
・Text Generation WebuiでEnable Tensor Parallelism (TP).を有効にしたら文字化けて遅くなった。これが一番楽しみだったのに…。
テキストデータをParquet形式にするやつ。
めんどくさかったので全部ハードコード。
import pandas as pd
# LoRA学習に使ったテキストのリスト
texts = [
"大量のテキストデータ"
]
# Pandas DataFrame に変換
df = pd.DataFrame({"text": texts})
# Parquet形式で保存
df.to_parquet("calibration_data.parquet", engine="pyarrow")
環境。
ディレクトリ作成、venv
後はガイドに従ってインストールと変換の実行コマンド。ファイルはGPTQのものをそのまま指定したので。
git clone https://github.com/turboderp/exllamav2
cd exllamav2
pip install -r requirements.txt
pip install .
python convert.py --cal_dataset ~/create-gptq/calibration_data/calibration_data.parquet -i ~/create-gptq/VongolaChouko_Starcannon-Unleashed-12B-v1.0/ -o /tmp/exl2/ -cf ~/text-generation-webui/models/VongolaChouko_Starcannon-Unleashed-12B-v1.0-exl2-5bpw/ -b 5.0 -nr
メモ程度なので以上です。
追記:4bpw試しました。
変換時のRAMが10GB、VRAM6.4GBくらい。
実行時はmax_seq_len=32kで17.1GB、16kで12.2GB、8kで9.6GB
長すぎるプロンプト組まなければ3060 12GBでも動きそうっすね。