這是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中描述的代碼樣式。