これは、ggerganov/ggmlからblinkdl/rwkv-lmのポートです。
通常のFP32に加えて、 FP16 、量子化されたINT4、INT5、およびINT8推論をサポートします。このプロジェクトはCPUに焦点を当てていますが、Cublasもサポートされています。
このプロジェクトは、CライブラリRWKV.HとコンビニエントPythonラッパーを提供します。
RWKVは大規模な言語モデルアーキテクチャであり、家族の最大のモデルは14Bパラメーターを持っています。 O(n^2)の注意を持つトランスとは対照的に、RWKVはロジットを計算するために前のステップからの状態のみを必要とします。これにより、RWKVは大規模なコンテキストで非常にCPUフレンドリーになります。
RWKV V5はRWKVアーキテクチャへの主要なアップグレードであり、品質の変圧器と競争力があります。 RWKV V5モデルがサポートされています。
RWKV V6は、RWKVアーキテクチャをさらに改善し、品質が向上しています。 RWKV V6モデルがサポートされています。
LORAチェックポイントのロードBlealtanの形式は、merge_lora_into_ggml.pyスクリプトを介してサポートされています。
真面目なものにrwkv.cppを使用する場合は、代表的なデータセットの困惑と遅延について利用可能なすべての形式をテストし、どのトレードオフが最適かを決定してください。
一般に、 RWKV v5モデルはRWKV v4モデルと同じくらい速く、レイテンシとメモリ消費がわずかな違いがあり、 v4よりもはるかに高い品質を持っています。したがって、 RWKV v5を使用することをお勧めします。
下の表は参照用です。 AVX2、4スレッドで4C/8T X86 CPUで測定が行われました。モデルはRWKV v4 Pile 169M 、 RWKV v4 Pile 1.5B 。
| 形式 | 困惑(169m) | レイテンシ、MS(1.5b) | ファイルサイズ、GB(1.5b) |
|---|---|---|---|
Q4_0 | 17.507 | 76 | 1.53 |
Q4_1 | 17.187 | 72 | 1.68 |
Q5_0 | 16.194 | 78 | 1.60 |
Q5_1 | 15.851 | 81 | 1.68 |
Q8_0 | 15.652 | 89 | 2.13 |
FP16 | 15.623 | 117 | 2.82 |
FP32 | 15.623 | 198 | 5.64 |
Intel I7 13700K&NVIDIA 3060 TI 8 GBで測定が行われました。モデルはRWKV-4-Pile-169Mで、12層がGPUにオフロードされました。
示されているMSのトークンあたりの遅延。
| 形式 | 1つのスレッド | 2つのスレッド | 4つのスレッド | 8つのスレッド | 24スレッド |
|---|---|---|---|---|---|
Q4_0 | 7.9 | 6.2 | 6.9 | 8.6 | 20 |
Q4_1 | 7.8 | 6.7 | 6.9 | 8.6 | 21 |
Q5_1 | 8.1 | 6.7 | 6.9 | 9.0 | 22 |
| 形式 | 1つのスレッド | 2つのスレッド | 4つのスレッド | 8つのスレッド | 24スレッド |
|---|---|---|---|---|---|
Q4_0 | 59 | 51 | 50 | 54 | 94 |
Q4_1 | 59 | 51 | 49 | 54 | 94 |
Q5_1 | 77 | 69 | 67 | 72 | 101 |
注:Cublasはggml_mul_mat()でのみサポートされているため、残りの操作を実行するにはまだ少ないCPUリソースを使用する必要があります。
CPU AMD Ryzen 9 5900X&GPU AMD RADEON RX 7900 XTXで測定が行われました。モデルはRWKV-novel-4-World-7B-20230810-ctx128kで、32層がGPUにオフロードされました。
示されているMSのトークンあたりの遅延。
| 形式 | 1つのスレッド | 2つのスレッド | 4つのスレッド | 8つのスレッド | 24スレッド |
|---|---|---|---|---|---|
f16 | 94 | 91 | 94 | 106 | 944 |
Q4_0 | 83 | 77 | 75 | 110 | 1692 |
Q4_1 | 85 | 80 | 85 | 93 | 1691 |
Q5_1 | 83 | 78 | 83 | 90 | 1115 |
注:Cublasと同じように、HIPBLASはggml_mul_mat()のみをサポートしていますが、残りの操作を実行するには、CPUリソースを少なく使用する必要があります。
要件:git。
git clone --recursive https://github.com/saharNooby/rwkv.cpp.git
cd rwkv.cpp
リリースをチェックして、OSおよびCPUの適切なZIPをダウンロードし、 rwkvライブラリファイルをリポジトリディレクトリに抽出します。
Windowsで:CPUがAVX2をサポートするのかAVX-512をサポートするかを確認するには、CPU-Zを使用します。
ライブラリはCPUとOS専用に構築されるため、このオプションは最大のパフォーマンスに推奨されます。
要件:AnacondaのCmakeまたはCmakeは、Visual Studio 2019のツールを構築します。
cmake .
cmake --build . --config Release
すべてが問題になった場合、 binReleaserwkv.dllファイルが表示されます。
包括的なガイドについては、docs/cublas_on_windows.mdを参照してください。
包括的なガイドについては、docs/hipblas_on_windows.mdを参照してください。
要件:cmake(linux: sudo apt install cmake 、macos: brew install cmake 、anaconoda:cmakeパッケージ)。
cmake .
cmake --build . --config Release
Anaconda&M1ユーザー:cmakeを実行した後、 CMAKE_SYSTEM_PROCESSOR: arm64を確認してくださいcmake . - x86_64を検出した場合、 # Compile flagsの下のCMakeLists.txtファイルを編集して、 set(CMAKE_SYSTEM_PROCESSOR "arm64")を追加します。
すべてが問題になった場合、 librwkv.so (Linux)またはlibrwkv.dylib (macos)ファイルがベースレポフォルダーに表示されるはずです。
cmake . -DRWKV_CUBLAS=ON
cmake --build . --config Release
すべてが問題になった場合、 librwkv.so (Linux)またはlibrwkv.dylib (macos)ファイルがベースレポフォルダーに表示されるはずです。
要件:Pytorchを使用したPython 3.x。
まず、このような顔を抱きしめるモデルをダウンロードしてください。
第二に、次のコマンドを使用してrwkv.cpp形式に変換します。
# Windows
python pythonconvert_pytorch_to_ggml.py C:RWKV-4-Pile-169M-20220807-8023.pth C:rwkv.cpp-169M.bin FP16
# Linux / MacOS
python python/convert_pytorch_to_ggml.py ~/Downloads/RWKV-4-Pile-169M-20220807-8023.pth ~/Downloads/rwkv.cpp-169M.bin FP16
オプションで、モデルを上記のテーブルから量子化された形式の1つに量子化します。
# Windows
python pythonquantize.py C:rwkv.cpp-169M.bin C:rwkv.cpp-169M-Q5_1.bin Q5_1
# Linux / MacOS
python python/quantize.py ~/Downloads/rwkv.cpp-169M.bin ~/Downloads/rwkv.cpp-169M-Q5_1.bin Q5_1
要件:numpyを使用したpython 3.x。 PileモデルまたはRavenモデルを使用する場合、トークンザーも必要です。
いくつかのテキストを生成するには、実行してください。
# Windows
python pythongenerate_completions.py C:rwkv.cpp-169M-Q5_1.bin
# Linux / MacOS
python python/generate_completions.py ~/Downloads/rwkv.cpp-169M-Q5_1.bin
ボットとチャットするには、実行してください。
# Windows
python pythonchat_with_bot.py C:rwkv.cpp-169M-Q5_1.bin
# Linux / MacOS
python python/chat_with_bot.py ~/Downloads/rwkv.cpp-169M-Q5_1.bin
generate_completions.pyまたはchat_with_bot.pyを編集して、プロンプトとサンプリング設定を変更します。
短くて単純なスクリプトincreference_example.pyは、pythonでのrwkv.cppの使用をデモステル化します。
c/c ++でrwkv.cppを使用するには、ヘッダーrwkv.hを含めます。
他の言語でrwkv.cppを使用するには、以下のバインディングセクションを参照してください。言語が欠落している場合は、言語が提供するツールを使用してC APIにバインドしようとすることができます。
これらのプロジェクトは、他の言語/フレームワークで簡単に使用できるようにrwkv.cppをラップします。
ggml速く移動し、時には古いファイル形式と互換性を破ることができます。
rwkv.cpp 、モデルファイルをロードできない理由と、ユーザーが利用できる次のステップを説明するのが最善であることを試みます。
参照のみについては、古い形式をサポートしているrwkv.cppの最新バージョンのリストを次に示します。これらのバージョンのサポートは提供されません。
Q4_2 、量子化された形式の古いレイアウトQ4_3 、 Q4_1_Orwkv.cppモデルファイルとそのchangelogのバージョン番号については、docs/file_format.mdも参照してください。
docs/code_style.mdに記載されているコードスタイルに従ってください。