这是blinkdl/rwkv-lm的端口,到ggerganov/ggml。
除了通常的FP32外,它还支持FP16 ,量化INT4,INT5和INT8推断。该项目的重点是CPU ,但Cublas也得到了支持。
该项目提供了C库RWKV.H和一个令人信服的Python包装器。
RWKV是一种大型语言模型架构,其家庭中最大的模型具有14b参数。与O(n^2)注意的变压器相反,rwkv仅需要从上一步来计算逻辑。这使RWKV在大型上下文中非常友好。
RWKV V5是RWKV架构的重大升级,使其与质量的变形金刚具有竞争力。支持RWKV V5模型。
RWKV V6是RWKV体系结构的进一步改进,质量更高。支持RWKV V6模型。
通过merge_lora_into_ggml.py脚本支持以Blealtan格式加载Lora检查点。
如果您使用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 |
注意:由于仅对ggml_mul_mat()支持Cublas,因此我们仍然需要使用少量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
查看发行版,为您的操作系统下载适当的邮政编码,然后将rwkv库文件提取到存储库目录中。
在Windows上:要检查您的CPU支持AVX2还是AVX-512,请使用CPU-Z。
建议使用此选项以提高性能,因为该库将专门为您的CPU和OS构建。
要求:Anaconda的Cmake或Cmake,为Visual Studio 2019构建工具。
cmake .
cmake --build . --config Release
如果一切顺利,则应出现binReleaserwkv.dll文件。
有关综合指南,请参阅文档/cublas_on_windows.md。
有关综合指南,请参阅文档/hipblas_on_windows.md。
要求:CMAKE(Linux: sudo apt install cmake ,MACOS: brew install cmake ,ANACONODA:CMAKE软件包)。
cmake .
cmake --build . --config Release
Anaconda&M1用户:请验证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
可选地,将模型从上表中量化为量化格式之一:
# 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更改提示和采样设置。
简短而简单的脚本inperion_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_O有关rwkv.cpp模型文件及其ChangElog的版本编号,请参见DOCS/FILE_FORMAT.MD。
请按照文档/code_style.md中描述的代码样式。