Это порт Blinkdl/RWKV-LM для Ggerganov/GGML.
Помимо обычного FP32 , он поддерживает FP16 , квантованный вывод INT4, Int5 и Int8 . Этот проект сосредоточен на процессоре , но Cubbas также поддерживается.
Этот проект предоставляет библиотеку 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 .
Ниже таблица предназначена только для справки. Измерения были сделаны на процессоре 4C/8T x86 с AVX2, 4 потоками. Модели являются RWKV v4 Pile 169M , RWKV v4 Pile 1.5B .
| Формат | Недоумение (169 м) | Задержка, 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 ГБ. Модель RWKV-4-Pile-169M , 12 слоев были выгружены в графический процессор.
Задержка на токен в 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() , нам все еще нужно использовать несколько ресурсов ЦП для выполнения оставшихся операций.
Измерения были сделаны на процессоре 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() , нам все еще нужно использовать несколько ресурсов ЦП для выполнения оставшихся операций.
Требования : git.
git clone --recursive https://github.com/saharNooby/rwkv.cpp.git
cd rwkv.cpp
Проверьте выпуск, загрузите соответствующий Zip для вашей ОС и ЦП, извлеките файл библиотеки rwkv в каталог репозитория.
В Windows: чтобы проверить, поддерживает ли ваш процессор AVX2 или AVX-512, используйте CPU-Z.
Этот вариант рекомендуется для максимальной производительности, потому что библиотека будет построена специально для вашего процессора и ОС.
Требования : Cmake или Cmake от Anaconda, создайте инструменты для 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 Package).
cmake .
cmake --build . --config Release
Пользователи Anaconda & M1 : Пожалуйста, убедитесь, что CMAKE_SYSTEM_PROCESSOR: arm64 после запуска cmake . - Если он обнаруживает x86_64 , отредактируйте файл CMakeLists.txt под # Compile flags , чтобы добавить set(CMAKE_SYSTEM_PROCESSOR "arm64") .
Если все прошло хорошо, файл librwkv.so (linux) или librwkv.dylib (macos) должен отображаться в папке Base Repo.
cmake . -DRWKV_CUBLAS=ON
cmake --build . --config Release
Если все прошло хорошо, файл librwkv.so (linux) или librwkv.dylib (macos) должен отображаться в папке Base Repo.
Требования : Python 3.x с Pytorch.
Во -первых , загрузите модель от обнимающего лица, как это.
Во -вторых , преобразовать его в формат 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
Требования : Python 3.x с Numpy. При использовании моделей 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, чтобы изменить подсказки и настройки отбора проб.
Короткий и простой сценарий script anuction_example.py демострит использует rwkv.cpp в Python.
Чтобы использовать rwkv.cpp в C/C ++, включите заголовок RWKV.H.
Чтобы использовать rwkv.cpp на любом другом языке, см. В разделе «Привязки» ниже. Если ваш язык отсутствует, вы можете попытаться связаться с CPI C, используя инструмент, предоставляемый вашим языком.
Эти проекты завершают rwkv.cpp для более легкого использования на других языках/фреймворках.
ggml движется быстро и может иногда нарушать совместимость со старыми форматами файлов.
rwkv.cpp будет попытаться объяснить, почему модельный файл не может быть загружен и какие следующие шаги доступны для пользователя.
Только для справки, вот список последних версий rwkv.cpp , которые поддержали более старые форматы. Для этих версий не будет предоставлена поддержка .
Q4_2 , Старая планировка квантованных форматовQ4_3 , Q4_1_O См. Также DOCS/FILE_FORMAT.MD для номеров версий файлов модели rwkv.cpp и их изменчивости.
Пожалуйста, следуйте стилю кода, описанному в docs/code_style.md.