이것은 Ggerganov/GGML에 대한 Blinkdl/rwkv-lm의 포트입니다.
일반적인 FP32 외에도 FP16 , 양자화 된 int4, int5 및 int8 추론을 지원합니다. 이 프로젝트는 CPU에 중점을 두지 만 Cublas도 지원됩니다.
이 프로젝트는 C 라이브러리 rwkv.h와 복잡한 파이썬 래퍼를 제공합니다.
RWKV는 대형 언어 모델 아키텍처로, 14B 매개 변수가있는 가족에서 가장 큰 모델입니다. O(n^2) 주의를 갖는 변압기와 달리 RWKV는 로그를 계산하기 위해 이전 단계의 상태 만 필요합니다. 이것은 큰 맥락에서 RWKV를 매우 CPU 친화적으로 만듭니다.
RWKV V5는 RWKV 아키텍처로의 주요 업그레이드로 트랜스포머와 경쟁력이 높아집니다. RWKV V5 모델이 지원됩니다.
RWKV V6은 더 나은 품질로 RWKV 아키텍처를 더욱 개선합니다. RWKV V6 모델이 지원됩니다.
Blealtan 형식으로 로라 검사 점을로드하는 것은 merge_lora_into_ggml.py 스크립트를 통해 지원됩니다.
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 8GB에서 측정되었습니다. 이 모델은 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 |
참고 : Cublas는 ggml_mul_mat() 에 대해서만 지원되므로 나머지 작업을 실행하려면 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
릴리스를 확인하고 OS 및 CPU에 적합한 지퍼를 다운로드하고 rwkv 라이브러리 파일을 리포지토리 디렉토리로 추출하십시오.
Windows : CPU가 AVX2 또는 AVX-512를 지원하는지 확인하려면 CPU-Z를 사용하십시오.
라이브러리는 CPU 및 OS를 위해 특별히 구축 되므로이 옵션은 최대 성능에 권장됩니다.
요구 사항 : Anaconda의 Cmake 또는 Cmake, Visual Studio 2019를위한 도구를 구축하십시오.
cmake .
cmake --build . --config Release
모든 것이 정상화되면 binReleaserwkv.dll 파일이 나타납니다.
포괄적 인 가이드는 Docs/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를 실행 한 후 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를 편집하여 프롬프트 및 샘플링 설정을 변경하십시오.
짧고 간단한 스크립트 inference_example.py는 파이썬에서 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도 참조하십시오.
Docs/Code_style.md에 설명 된 코드 스타일을 따르십시오.