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