Ini adalah port blinkdl/rwkv-lm ke ggerganov/ggml.
Selain FP32 yang biasa, ini mendukung inferensi FP16 , Int4, Int5 dan Int8 yang dikuantisasi . Proyek ini difokuskan pada CPU , tetapi Cublas juga didukung.
Proyek ini menyediakan perpustakaan C RWKV.h dan pembungkus Python yang konvinien untuk itu.
RWKV adalah arsitektur model bahasa besar, dengan model terbesar dalam keluarga yang memiliki parameter 14B. Berbeda dengan transformator dengan perhatian O(n^2) , RWKV hanya membutuhkan keadaan dari langkah sebelumnya untuk menghitung logit. Ini membuat RWKV sangat ramah CPU pada konteks besar.
RWKV V5 adalah peningkatan besar ke arsitektur RWKV, menjadikannya kompetitif dengan Transformers in Quality. Model RWKV V5 didukung.
RWKV V6 adalah peningkatan lebih lanjut untuk arsitektur RWKV, dengan kualitas yang lebih baik. Model RWKV V6 didukung.
Memuat pos pemeriksaan Lora dalam format Blealtan didukung melalui skrip merge_lora_into_ggml.py.
Jika Anda menggunakan rwkv.cpp untuk sesuatu yang serius, harap uji semua format yang tersedia untuk kebingungan dan latensi pada dataset yang representatif, dan putuskan trade-off mana yang terbaik untuk Anda.
Secara umum, model RWKV v5 secepat model RWKV v4 , dengan perbedaan kecil dalam konsumsi latensi dan memori, dan dengan kualitas yang lebih tinggi daripada v4 . Oleh karena itu, disarankan untuk menggunakan RWKV v5 .
Tabel di bawah hanya untuk referensi. Pengukuran dilakukan pada 4C/8T x86 CPU dengan AVX2, 4 utas. Modelnya adalah RWKV v4 Pile 169M , RWKV v4 Pile 1.5B .
| Format | Kebingungan (169m) | Latensi, MS (1.5b) | Ukuran file, 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 |
Pengukuran dilakukan pada Intel I7 13700K & NVIDIA 3060 Ti 8 GB. Modelnya adalah RWKV-4-Pile-169M , 12 lapisan dibongkar ke GPU.
Latensi per token di MS ditampilkan.
| Format | 1 utas | 2 utas | 4 utas | 8 utas | 24 utas |
|---|---|---|---|---|---|
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 utas | 2 utas | 4 utas | 8 utas | 24 utas |
|---|---|---|---|---|---|
Q4_0 | 59 | 51 | 50 | 54 | 94 |
Q4_1 | 59 | 51 | 49 | 54 | 94 |
Q5_1 | 77 | 69 | 67 | 72 | 101 |
Catatan: Karena Cublas hanya didukung untuk ggml_mul_mat() , kita masih perlu menggunakan beberapa sumber daya CPU untuk menjalankan operasi yang tersisa.
Pengukuran dilakukan pada CPU AMD Ryzen 9 5900X & GPU AMD Radeon RX 7900 XTX. Model ini adalah RWKV-novel-4-World-7B-20230810-ctx128k , 32 lapisan diturunkan ke GPU.
Latensi per token di MS ditampilkan.
| Format | 1 utas | 2 utas | 4 utas | 8 utas | 24 utas |
|---|---|---|---|---|---|
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 |
Catatan: Sama seperti cublas, hipblas hanya mendukung ggml_mul_mat() , kita masih perlu menggunakan beberapa sumber daya CPU untuk menjalankan operasi yang tersisa.
Persyaratan : git.
git clone --recursive https://github.com/saharNooby/rwkv.cpp.git
cd rwkv.cpp
Lihat rilis, unduh zip yang sesuai untuk OS dan CPU Anda, ekstrak file pustaka rwkv ke direktori repositori.
Di Windows: Untuk memeriksa apakah CPU Anda mendukung AVX2 atau AVX-512, gunakan CPU-Z.
Opsi ini disarankan untuk kinerja maksimum, karena perpustakaan akan dibangun secara khusus untuk CPU dan OS Anda.
Persyaratan : CMake atau CMake dari Anaconda, membangun alat untuk Visual Studio 2019.
cmake .
cmake --build . --config Release
Jika semuanya berjalan baik, binReleaserwkv.dll file akan muncul.
Lihat DOCS/CUBLAS_ON_WINDOWS.MD untuk panduan komprehensif.
Lihat Docs/hipblas_on_windows.md untuk panduan komprehensif.
Persyaratan : CMake (Linux: sudo apt install cmake , MacOS: brew install cmake , Anaconoda: Paket CMake).
cmake .
cmake --build . --config Release
Pengguna Anaconda & M1 : Harap verifikasi bahwa CMAKE_SYSTEM_PROCESSOR: arm64 Setelah menjalankan cmake . - Jika mendeteksi x86_64 , edit file CMakeLists.txt di bawah # Compile flags untuk menambahkan set(CMAKE_SYSTEM_PROCESSOR "arm64") .
Jika semuanya berjalan baik, librwkv.so (linux) atau file librwkv.dylib (macOS) akan muncul di folder repo dasar.
cmake . -DRWKV_CUBLAS=ON
cmake --build . --config Release
Jika semuanya berjalan baik, librwkv.so (linux) atau file librwkv.dylib (macOS) akan muncul di folder repo dasar.
Persyaratan : Python 3.x dengan Pytorch.
Pertama , unduh model dari wajah memeluk seperti ini.
Kedua , ubah menjadi format rwkv.cpp menggunakan perintah berikut:
# 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
Secara opsional , kuantisasi model menjadi salah satu format kuantisasi dari tabel di atas:
# 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
Persyaratan : Python 3.x dengan Numpy. Jika menggunakan model Pile atau Raven , tokenizer juga diperlukan.
Untuk menghasilkan beberapa teks, jalankan:
# 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
Untuk mengobrol dengan bot, jalankan:
# 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
Edit generate_completions.py atau chat_with_bot.py untuk mengubah prompt dan pengaturan pengambilan sampel.
Script pendek dan sederhana inference_example.py demostrat penggunaan rwkv.cpp di python.
Untuk menggunakan rwkv.cpp dalam C/C ++, sertakan header rwkv.h.
Untuk menggunakan rwkv.cpp dalam bahasa lain, lihat bagian Bindings di bawah ini. Jika bahasa Anda hilang, Anda dapat mencoba mengikat ke C API menggunakan alat yang disediakan oleh bahasa Anda.
Proyek -proyek ini membungkus rwkv.cpp untuk lebih mudah digunakan dalam bahasa/kerangka kerja lain.
ggml bergerak cepat, dan kadang -kadang dapat mematahkan kompatibilitas dengan format file yang lebih lama.
rwkv.cpp akan mencoba yang terbaik untuk menjelaskan mengapa file model tidak dapat dimuat dan langkah selanjutnya yang tersedia untuk pengguna.
Hanya untuk referensi, berikut adalah daftar versi terbaru rwkv.cpp yang telah mendukung format yang lebih lama. Tidak ada dukungan yang akan diberikan untuk versi ini .
Q4_2 , tata letak lama format kuantisasiQ4_3 , Q4_1_O Lihat juga dokumen/file_format.md untuk nomor versi file model rwkv.cpp dan changelog mereka.
Harap ikuti gaya kode yang dijelaskan dalam dokumen/code_style.md.