Il s'agit d'un port de blinkdl / rwkv-lm à ggerganov / ggml.
Outre le FP32 habituel, il prend en charge l'inférence FP16 , INT4, INT5 et INT8 quantifiée . Ce projet est axé sur le processeur , mais Cublin est également soutenu.
Ce projet fournit une bibliothèque C RWKV.H et un wrapper Python convaincant pour cela.
RWKV est une architecture de modèle en grande langue, le plus grand modèle de la famille ayant des paramètres 14B. Contrairement au transformateur avec l'attention O(n^2) , RWKV ne nécessite que l'état de l'étape précédente pour calculer les logits. Cela rend RWKV très adapté au processeur sur les Langhts de contexte important.
RWKV V5 est une mise à niveau majeure de l'architecture RWKV, ce qui la rend compétitive avec les transformateurs en qualité. Les modèles RWKV V5 sont pris en charge.
RWKV V6 est une amélioration supplémentaire de l'architecture RWKV, avec une meilleure qualité. Les modèles RWKV V6 sont pris en charge.
Le chargement des points de contrôle LORA au format de Blealtan est pris en charge via le script Merge_lora_into_ggml.py.
Si vous utilisez rwkv.cpp pour quelque chose de sérieux, veuillez tester tous les formats disponibles pour la perplexité et la latence sur un ensemble de données représentatifs et décidez quel compromis vous convient le mieux.
En général, les modèles RWKV v5 sont aussi rapides que les modèles RWKV v4 , avec des différences mineures de latence et de la consommation de mémoire, et avec une qualité bien supérieure à v4 . Par conséquent, il est recommandé d'utiliser RWKV v5 .
Le tableau ci-dessous est pour référence uniquement. Des mesures ont été effectuées sur 4C / 8T x86 CPU avec AVX2, 4 threads. Les modèles sont RWKV v4 Pile 169M , RWKV v4 Pile 1.5B .
| Format | Perplexité (169m) | Latence, MS (1,5b) | Taille du fichier, 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 |
Des mesures ont été effectuées sur Intel i7 13700K & Nvidia 3060 Ti 8 Go. Le modèle est RWKV-4-Pile-169M , 12 couches ont été déchargées en GPU.
Latence par jeton dans la ms montrée.
| Format | 1 fil | 2 fils | 4 fils | 8 fils | 24 fils |
|---|---|---|---|---|---|
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 |
| Format | 1 fil | 2 fils | 4 fils | 8 fils | 24 fils |
|---|---|---|---|---|---|
Q4_0 | 59 | 51 | 50 | 54 | 94 |
Q4_1 | 59 | 51 | 49 | 54 | 94 |
Q5_1 | 77 | 69 | 67 | 72 | 101 |
Remarque: Étant donné que CUBLAS est pris en charge uniquement pour ggml_mul_mat() , nous devons encore utiliser quelques ressources CPU pour exécuter les opérations restantes.
Des mesures ont été effectuées sur CPU AMD Ryzen 9 5900X & GPU AMD Radeon RX 7900 XTX. Le modèle est RWKV-novel-4-World-7B-20230810-ctx128k , 32 couches ont été déchargées en GPU.
Latence par jeton dans la ms montrée.
| Format | 1 fil | 2 fils | 4 fils | 8 fils | 24 fils |
|---|---|---|---|---|---|
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 |
Remarque: Identique à Cublas, Hipblas ne prend en charge que ggml_mul_mat() , nous devons toujours utiliser quelques ressources CPU pour exécuter les opérations restantes.
Exigences : Git.
git clone --recursive https://github.com/saharNooby/rwkv.cpp.git
cd rwkv.cpp
Consultez les versions, téléchargez un zip approprié pour votre système d'exploitation et votre CPU, extraire le fichier de bibliothèque rwkv dans le répertoire du référentiel.
Sur Windows: Pour vérifier si votre CPU prend en charge AVX2 ou AVX-512, utilisez CPU-Z.
Cette option est recommandée pour des performances maximales, car la bibliothèque serait construite spécifiquement pour votre CPU et votre système d'exploitation.
Exigences : CMake ou Cmake d'Anaconda, Build Tools for Visual Studio 2019.
cmake .
cmake --build . --config Release
Si tout s'est bien passé, le fichier binReleaserwkv.dll doit apparaître.
Reportez-vous à Docs / CUBLAS_ON_WINDOWS.MD pour un guide complet.
Reportez-vous à Docs / Hipblas_on_windows.md pour un guide complet.
Exigences : CMake (Linux: sudo apt install cmake , macOS: brew install cmake , Anaconoda: Package Cmake).
cmake .
cmake --build . --config Release
Utilisateurs d'Anaconda & M1 : veuillez vérifier que CMAKE_SYSTEM_PROCESSOR: arm64 après l'exécution cmake . - S'il détecte x86_64 , modifiez le fichier CMakeLists.txt sous les # Compile flags pour ajouter set(CMAKE_SYSTEM_PROCESSOR "arm64") .
Si tout s'est bien passé, librwkv.so (Linux) ou librwkv.dylib (macOS) doit apparaître dans le dossier de base de base.
cmake . -DRWKV_CUBLAS=ON
cmake --build . --config Release
Si tout s'est bien passé, librwkv.so (Linux) ou librwkv.dylib (macOS) doit apparaître dans le dossier de base de base.
Exigences : Python 3.x avec pytorch.
Tout d'abord , téléchargez un modèle en étreignant le visage comme celui-ci.
Deuxièmement , convertissez-le en format rwkv.cpp à l'aide des commandes suivantes:
# 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
Facultativement , quantifiez le modèle en l'un des formats quantifiés du tableau ci-dessus:
# 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
Exigences : Python 3.x avec Numpy. Si vous utilisez des modèles Pile ou Raven , des tokenisers sont également nécessaires.
Pour générer du texte, exécutez:
# 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
Pour discuter avec un bot, courez:
# 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
Modifier générer_completions.py ou chat_with_bot.py pour modifier les invites et les paramètres d'échantillonnage.
Le script court et simple Inference_Example.py démostte l'utilisation de rwkv.cpp dans python.
Pour utiliser rwkv.cpp en C / C ++, incluez l'en-tête RWKV.H.
Pour utiliser rwkv.cpp dans n'importe quelle autre langue, voir la section Bindings ci-dessous. Si votre langue est manquante, vous pouvez essayer de se lier à l'API C à l'aide de l'outillage fourni par votre langue.
Ces projets enveloppent rwkv.cpp pour une utilisation plus facile dans d'autres langues / cadres.
ggml se déplace rapidement et peut parfois casser la compatibilité avec les anciens formats de fichiers.
rwkv.cpp tentera qu'il est préférable d'expliquer pourquoi un fichier de modèle ne peut pas être chargé et quelles étapes suivantes sont disponibles pour l'utilisateur.
Pour référence uniquement, voici une liste des dernières versions de rwkv.cpp qui ont pris en charge les formats plus anciens. Aucun support ne sera fourni pour ces versions .
Q4_2 , ancienne disposition des formats quantifiésQ4_3 , Q4_1_O Voir aussi DOCS / File_Format.md pour les numéros de version des fichiers de modèle rwkv.cpp et leur Changelog.
Veuillez suivre le style de code décrit dans docs / code_style.md.