Esta é uma porta de Blinkdl/RWKV-LM para Ggerganov/GGML.
Além do FP32 usual, ele suporta FP16 , Quantized Int4, Int5 e Int8 Inferência. Este projeto está focado na CPU , mas o CUBLAS também é apoiado.
Este projeto fornece uma biblioteca C rwkv.h e um invólucro python conviniente para ele.
O RWKV é uma grande arquitetura do modelo de linguagem, com o maior modelo da família com parâmetros 14B. Em contraste com o transformador com a atenção O(n^2) , o RWKV requer apenas o estado da etapa anterior para calcular logits. Isso torna o RWKV muito amigável à CPU em grandes lenghts de contexto.
O RWKV V5 é uma grande atualização para a arquitetura RWKV, tornando -a competitiva com os transformadores em qualidade. Os modelos RWKV V5 são suportados.
O RWKV V6 é uma melhoria adicional da arquitetura RWKV, com melhor qualidade. Os modelos RWKV V6 são suportados.
Carregando os pontos de verificação Lora no formato da Blealtan é suportado através do script Merge_Lora_into_ggml.py.
Se você usar rwkv.cpp para qualquer coisa grave, teste todos os formatos disponíveis para perplexidade e latência em um conjunto de dados representativos e decida qual trade-off é melhor para você.
Em geral, os modelos RWKV v5 são tão rápidos quanto os modelos RWKV v4 , com pequenas diferenças no consumo de latência e memória e com qualidade muito mais alta que v4 . Portanto, é recomendável usar RWKV v5 .
Abaixo da tabela é apenas para referência. As medições foram feitas na CPU 4C/8T x86 com AVX2, 4 threads. Os modelos são RWKV v4 Pile 169M , RWKV v4 Pile 1.5B .
| Formatar | Perplexidade (169m) | Latência, MS (1,5b) | Tamanho do arquivo, 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 |
Foram feitas medidas no Intel I7 13700K e NVIDIA 3060 TI 8 GB. O modelo é RWKV-4-Pile-169M , 12 camadas foram descarregadas para a GPU.
Latência por token na EM mostrada.
| Formatar | 1 thread | 2 tópicos | 4 tópicos | 8 threads | 24 threads |
|---|---|---|---|---|---|
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 |
| Formatar | 1 thread | 2 tópicos | 4 tópicos | 8 threads | 24 threads |
|---|---|---|---|---|---|
Q4_0 | 59 | 51 | 50 | 54 | 94 |
Q4_1 | 59 | 51 | 49 | 54 | 94 |
Q5_1 | 77 | 69 | 67 | 72 | 101 |
Nota: Como o CUBLAS é suportado apenas para ggml_mul_mat() , ainda precisamos usar poucos recursos da CPU para executar operações restantes.
As medidas foram feitas na CPU AMD Ryzen 9 5900X & GPU AMD RADEON RX 7900 XTX. O modelo é RWKV-novel-4-World-7B-20230810-ctx128k , 32 camadas foram descarregadas para a GPU.
Latência por token na EM mostrada.
| Formatar | 1 thread | 2 tópicos | 4 tópicos | 8 threads | 24 threads |
|---|---|---|---|---|---|
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: O mesmo que o Cublas, o HIPBLAS suporta apenas ggml_mul_mat() , ainda precisamos usar poucos recursos da CPU para executar operações restantes.
Requisitos : Git.
git clone --recursive https://github.com/saharNooby/rwkv.cpp.git
cd rwkv.cpp
Confira os lançamentos, faça o download do ZIP apropriado para o seu sistema operacional e CPU, extraia o arquivo da biblioteca rwkv no diretório do repositório.
No Windows: para verificar se o seu CPU suporta AVX2 ou AVX-512, use CPU-Z.
Esta opção é recomendada para o desempenho máximo, porque a biblioteca seria criada especificamente para sua CPU e OS.
Requisitos : CMake ou cmake da Anaconda, construir ferramentas para o Visual Studio 2019.
cmake .
cmake --build . --config Release
Se tudo correu bem, o arquivo binReleaserwkv.dll deve aparecer.
Consulte Docs/cublas_on_windows.md para um guia abrangente.
Consulte Docs/Hipblas_on_windows.md para um guia abrangente.
Requisitos : CMake (Linux: sudo apt install cmake , MacOS: brew install cmake , Anaconoda: CMake Package).
cmake .
cmake --build . --config Release
Usuários da Anaconda & M1 : verifique se CMAKE_SYSTEM_PROCESSOR: arm64 depois de executar cmake . - Se detectar x86_64 , edite o arquivo CMakeLists.txt sob os # Compile flags para adicionar set(CMAKE_SYSTEM_PROCESSOR "arm64") .
Se tudo correu bem, o arquivo librwkv.so (Linux) ou librwkv.dylib (macOS) deve aparecer na pasta de repo base.
cmake . -DRWKV_CUBLAS=ON
cmake --build . --config Release
Se tudo correu bem, o arquivo librwkv.so (Linux) ou librwkv.dylib (macOS) deve aparecer na pasta de repo base.
Requisitos : Python 3.x com Pytorch.
Primeiro , faça o download de um modelo de abraçar o rosto como este.
Segundo , converta -o em formato rwkv.cpp usando os seguintes 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 , quantize o modelo em um dos formatos quantizados da tabela acima:
# 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 com Numpy. Se estiver usando modelos Pile ou Raven , os tokenizadores também são necessários.
Para gerar algum texto, execute:
# 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 conversar com um bot, execute:
# 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 ou chat_with_bot.py para alterar os prompts e as configurações de amostragem.
O script curto e simples inferência_example.py Demostra o uso de rwkv.cpp no python.
Para usar rwkv.cpp em c/c ++, inclua o cabeçalho rwkv.h.
Para usar rwkv.cpp em qualquer outro idioma, consulte a seção Ligação abaixo. Se seu idioma estiver faltando, você pode tentar ligar à API C usando as ferramentas fornecidas pelo seu idioma.
Esses projetos envolvem rwkv.cpp para facilitar o uso em outros idiomas/estruturas.
ggml se move rapidamente e pode ocasionalmente quebrar a compatibilidade com os formatos de arquivo mais antigos.
rwkv.cpp tentará ser melhor explicar por que um arquivo de modelo não pode ser carregado e quais próximas etapas estão disponíveis para o usuário.
Apenas para referência, aqui está uma lista das versões mais recentes do rwkv.cpp que suportam formatos mais antigos. Nenhum suporte será fornecido para essas versões .
Q4_2 , layout antigo de formatos quantizadosQ4_3 , Q4_1_O Consulte também docs/file_format.md para números de versão de arquivos de modelo rwkv.cpp e seu changelog.
Siga o estilo de código descrito em docs/code_style.md.