見出し画像

rwkv.cpp を試す

「rwkv.cpp」を試したのでまとめました。

・RWKV-4-World-JPNtuned-7B-v1-OnlyForTest_76%_trained-20230714-ctx4096.pth
・macOS 13.4.1


1. rwkv.cpp

rwkv.cpp」は、「BlinkDL/RWKV-LM」を「ggerganov/ggml」に移植したものです。通常の「FP32」に加えて「FP16」、量子化された「INT4」「INT5」「INT8」の推論をサポートします。CPUに重点を置いていますが、cuBLASもサポートしています。

2. rwkv.cpp の準備

「rwkv.cpp」の準備の手順は次のとおりです。

(1) rwkv.cpp リポジトリのクローン

$ git clone --recursive https://github.com/saharNooby/rwkv.cpp.git
$ cd rwkv.cpp

(2) rwkv.cpp のビルド。

cmake .
cmake --build . --config Release

3. モデルの変換

RWKVモデル(pth)をGGML(bin)に変換します。量子化もできます。

(1) Pythonの仮想環境の準備。

(2) パッケージのインストール。

$ pip install torch torchvision torchaudio
$ pip install transformers

(3) RWKVモデルの準備。
今回は、「RWKV-4-World-JPNtuned-7B-v1-OnlyForTest_76%_trained-20230714-ctx4096.pth」を準備しました。

(4) RWKVモデル(pth)をGGML(bin)に変換。
「rwkv.cpp-JPNtuned-7B.bin」が生成されます。

$ python rwkv/convert_pytorch_to_ggml.py ./RWKV-4-World-JPNtuned-7B-v1-OnlyForTest_76%_trained-20230714-ctx4096.pth ./rwkv.cpp-JPNtuned-7B.bin FP16

パラメータは、次のとおりです。

python rwkv/convert_pytorch_to_ggml.py <src_path> <dest_path> <data_type>
・src_path : 入力ファイル名。PyTorchモデル(pth)
・dest_path : 出力ファイル名。ggml (bin)
・data_type : データ種別 (FP16, FP32, float16, float32)

(5) GGML(bin)を量子化。
「rwkv.cpp-JPNtuned-7B-Q5_1.bin」が生成されます。

$ python rwkv/quantize.py ./rwkv.cpp-JPNtuned-7B.bin ./rwkv.cpp-JPNtuned-7B-Q5_1.bin Q5_1

パラメータは、次のとおりです。

python rwkv/quantize.py <src_path> <dest_path> <data_type>
・src_path : 入力ファイル名。FP32 / FP16 ggml (bin)
・dest_path : 出力ファイル名。ggml (bin)
・format_name : フォーマット名 (Q4_0 Q4_1 Q5_0 Q5_1 Q8_0)

4. モデルの推論

モデルの推論手順は、次のとおりです。

(1) チャットの開始。
チャットは「rwkv/chat_with_bot.py」、コンプリーションは「rwkv\generate_completions.py」を使います。RWKV-4-WORLDなので、トークナイザーに「world」を指定します。

$ python rwkv/chat_with_bot.py ./rwkv.cpp-JPNtuned-7B-Q5_1.bin world
python rwkv/chat_with_bot.py ./rwkv.cpp-JPNtuned-7B-Q5_1.bin world
Loading world tokenizer
System info: AVX=1 AVX2=1 AVX512=0 FMA=1 NEON=0 ARM_FMA=0 F16C=1 FP16_VA=0 WASM_SIMD=0 BLAS=1 SSE3=1 VSX=0
Loading RWKV model
Processing 178 prompt tokens, may take a while
Processed in 40 s, 227 ms per token

Chat initialized! Your name is User. Write something and press Enter. Use \n to add line breaks to your message.
> User: 

パラメータは、次のとおりです

python rwkv/generate_completions.py [model_path] [tokenizer]
・model_path : ggml 形式の RWKV モデルへのパス
・tokenizer : トークナイザー (20B, world)

(2) メッセージ入力。

まどか☆マギカで誰が一番かわいい?

> Bot: 私は人工知能であり、感情を持っていません。したがって、私には誰が一番かわいいかを判断することはできません。ただし、「まどか☆マギカ」というアニメには魅力的なキャラクターが多数登場しており、それぞれのキャラクターが独自の魅力を持っているため、個人的な好みに基づいて選ぶことはできます



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