Este es un puerto de BlinkDL/RWKV-LM a GGERGANOV/GGML.
Además de la FP32 habitual, admite la inferencia FP16 , cuantizada Int4, Int5 e Int8 . Este proyecto se centra en la CPU , pero CUBLAS también es compatible.
Este proyecto proporciona una biblioteca C RWKV.H y un envoltorio de pitón conviniente para ello.
RWKV es una arquitectura de modelo de lenguaje grande, con el modelo más grande de la familia que tiene parámetros de 14b. A diferencia del transformador con la atención O(n^2) , RWKV requiere solo estado del paso anterior para calcular logits. Esto hace que RWKV sea muy amigable con la CPU en gran contexto.
RWKV V5 es una actualización importante para la arquitectura RWKV, lo que lo hace competitivo con los transformadores en calidad. Los modelos RWKV V5 son compatibles.
RWKV V6 es una mejora adicional para la arquitectura RWKV, con mejor calidad. Los modelos RWKV V6 son compatibles.
La carga de puntos de control de Lora en formato de Blealtan se admite a través de Merge_lora_into_GGML.py script.
Si usa rwkv.cpp para algo serio, pruebe todos los formatos disponibles en busca de perplejidad y latencia en un conjunto de datos representativo, y decida qué compensación es mejor para usted.
En general, los modelos RWKV v5 son tan rápidos como los modelos RWKV v4 , con diferencias menores en la latencia y el consumo de memoria, y tienen una calidad mucho mayor que v4 . Por lo tanto, se recomienda usar RWKV v5 .
La tabla debajo es solo para referencia. Las mediciones se realizaron en CPU 4C/8T x86 con AVX2, 4 hilos. Los modelos son RWKV v4 Pile 169M , RWKV v4 Pile 1.5B .
| Formato | Perplejidad (169m) | Latencia, MS (1.5B) | Tamaño del archivo, 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 |
Se realizaron mediciones en Intel i7 13700K y Nvidia 3060 Ti 8 GB. El modelo es RWKV-4-Pile-169M , 12 capas se descargaron a GPU.
Latencia por token en MS mostrada.
| Formato | 1 hilo | 2 hilos | 4 hilos | 8 hilos | 24 hilos |
|---|---|---|---|---|---|
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 |
| Formato | 1 hilo | 2 hilos | 4 hilos | 8 hilos | 24 hilos |
|---|---|---|---|---|---|
Q4_0 | 59 | 51 | 50 | 54 | 94 |
Q4_1 | 59 | 51 | 49 | 54 | 94 |
Q5_1 | 77 | 69 | 67 | 72 | 101 |
Nota: Dado que CUBLAS es compatible solo para ggml_mul_mat() , aún necesitamos usar pocos recursos de CPU para ejecutar las operaciones restantes.
Las mediciones se realizaron en CPU AMD Ryzen 9 5900X y GPU AMD Radeon RX 7900 XTX. El modelo es RWKV-novel-4-World-7B-20230810-ctx128k , se descargaron 32 capas en GPU.
Latencia por token en MS mostrada.
| Formato | 1 hilo | 2 hilos | 4 hilos | 8 hilos | 24 hilos |
|---|---|---|---|---|---|
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 |
Nota: Igual que CUBLAS, HIPBLAS solo admite ggml_mul_mat() , aún necesitamos usar pocos recursos de CPU para ejecutar las operaciones restantes.
Requisitos : Git.
git clone --recursive https://github.com/saharNooby/rwkv.cpp.git
cd rwkv.cpp
Consulte las versiones, descargue el zip apropiado para su sistema operativo y CPU, extraiga el archivo de la biblioteca rwkv en el directorio de repositorio.
En Windows: para verificar si su CPU admite AVX2 o AVX-512, use CPU-Z.
Esta opción se recomienda para el máximo rendimiento, porque la biblioteca se construiría específicamente para su CPU y OS.
Requisitos : CMake o CMake de Anaconda, Build Tools para Visual Studio 2019.
cmake .
cmake --build . --config Release
Si todo salió bien, debe aparecer el archivo binReleaserwkv.dll .
Consulte DOCS/CUBLAS_ON_WINDOWS.MD para obtener una guía completa.
Consulte Docs/Hipblas_on_windows.md para obtener una guía completa.
Requisitos : CMake (Linux: sudo apt install cmake , MacOS: brew install cmake , Anaconoda: paquete Cmake).
cmake .
cmake --build . --config Release
Usuarios de Anaconda y M1 : verifique que CMAKE_SYSTEM_PROCESSOR: arm64 después de ejecutar cmake . - Si detecta x86_64 , edite el archivo CMakeLists.txt en los # Compile flags para agregar set(CMAKE_SYSTEM_PROCESSOR "arm64") .
Si todo salió bien, el archivo librwkv.so (Linux) o librwkv.dylib (MacOS) debe aparecer en la carpeta de repositorio base.
cmake . -DRWKV_CUBLAS=ON
cmake --build . --config Release
Si todo salió bien, el archivo librwkv.so (Linux) o librwkv.dylib (MacOS) debe aparecer en la carpeta de repositorio base.
Requisitos : Python 3.x con Pytorch.
Primero , descargue un modelo de abrazar la cara como esta.
En segundo lugar , conviértalo en formato rwkv.cpp usando los siguientes comandos:
# 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
Opcionalmente , cuantice el modelo en uno de los formatos cuantificados de la tabla anterior:
# 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
Requisitos : Python 3.x con Numpy. Si usan modelos Pile o Raven , también se requieren tokenizers.
Para generar algún texto, ejecute:
# 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
Para chatear con un bot, ejecutar:
# 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
Editar Generate_completions.py o chat_with_bot.py para cambiar las indicaciones y la configuración de muestreo.
El script breve y simple Inferencia_example.py demograta el uso de rwkv.cpp en Python.
Para usar rwkv.cpp en C/C ++, incluya el encabezado RWKV.H.
Para usar rwkv.cpp en cualquier otro idioma, consulte la sección de enlaces a continuación. Si falta su idioma, puede intentar vincular a la API C utilizando las herramientas proporcionadas por su idioma.
Estos proyectos envuelven rwkv.cpp para facilitar el uso en otros idiomas/marcos.
ggml se mueve rápidamente y ocasionalmente puede romper la compatibilidad con formatos de archivo más antiguos.
rwkv.cpp intentará explicar por qué no se puede cargar un archivo modelo y qué próximos pasos están disponibles para el usuario.
Solo como referencia, aquí hay una lista de las últimas versiones de rwkv.cpp que han admitido formatos más antiguos. No se proporcionará soporte para estas versiones .
Q4_2 , diseño antiguo de formatos cuantizadosQ4_3 , Q4_1_O Consulte también DOCS/FILE_FORMAT.MD para ver los números de versión de los archivos de modelo rwkv.cpp y su ChangeLog.
Siga el estilo de código descrito en docs/code_style.md.