rwkv.cpp を試す
「rwkv.cpp」を試したのでまとめました。
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
パラメータは、次のとおりです。
(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
パラメータは、次のとおりです。
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:
パラメータは、次のとおりです
(2) メッセージ入力。
まどか☆マギカで誰が一番かわいい?