นี่คือพอร์ตของ BlinkDL/RWKV-LM ไปยัง GGERGANOV/GGML
นอกเหนือจาก FP32 ปกติแล้วยังรองรับ FP16 , การอนุมาน Int4, Int5 และ Int8 โครงการนี้ มุ่งเน้นไปที่ CPU แต่ Cublas ได้รับการสนับสนุนเช่นกัน
โครงการนี้ให้ห้องสมุด C RWKV.H และเสื้อคลุม Python ที่มีความโน้มเอียงสำหรับมัน
RWKV เป็นสถาปัตยกรรมแบบจำลองภาษาขนาดใหญ่ที่มีโมเดลที่ใหญ่ที่สุดในครอบครัวที่มีพารามิเตอร์ 14B ตรงกันข้ามกับหม้อแปลงด้วยความสนใจ O(n^2) RWKV ต้องการสถานะเฉพาะจากขั้นตอนก่อนหน้าเพื่อคำนวณ logits สิ่งนี้ทำให้ RWKV เป็นมิตรกับ CPU ในความยาวของบริบทขนาดใหญ่
RWKV V5 เป็นการอัพเกรดที่สำคัญเป็นสถาปัตยกรรม RWKV ทำให้สามารถแข่งขันกับหม้อแปลงที่มีคุณภาพ รองรับรุ่น RWKV V5
RWKV V6 เป็นการปรับปรุงเพิ่มเติมสำหรับสถาปัตยกรรม RWKV ด้วยคุณภาพที่ดีขึ้น รองรับรุ่น RWKV V6
การโหลดจุดตรวจ LORA ในรูปแบบของ blealtan ได้รับการสนับสนุนผ่านสคริปต์ MERGE_LORA_INTO_GGML.PY
หากคุณใช้ rwkv.cpp สำหรับสิ่งที่จริงจังโปรดทดสอบรูปแบบที่มีอยู่ทั้งหมดสำหรับความงุนงงและเวลาแฝงในชุดข้อมูลตัวแทนและตัดสินใจว่าการแลกเปลี่ยนใดดีที่สุดสำหรับคุณ
โดยทั่วไป รุ่น RWKV v5 นั้นเร็วเท่ากับรุ่น RWKV v4 ที่มีความแตกต่างเล็กน้อยในเวลาแฝงและการใช้หน่วยความจำและมีคุณภาพสูงกว่า v4 ดังนั้นขอแนะนำให้ใช้ RWKV v5
ตารางด้านล่างสำหรับการอ้างอิงเท่านั้น การวัดทำบน CPU 4C/8T x86 ด้วย AVX2, 4 เธรด รุ่นนี้คือ 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 8 GB โมเดลคือ 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 | 2235 |
Q4_1 | 85 | 80 | 85 | 93 | 2234 |
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
ตรวจสอบรีลีสดาวน์โหลด zip ที่เหมาะสมสำหรับระบบปฏิบัติการและ CPU ของคุณแยกไฟล์ไลบรารี rwkv ลงในไดเรกทอรีที่เก็บ
บน Windows: เพื่อตรวจสอบว่า CPU ของคุณรองรับ AVX2 หรือ AVX-512 ให้ใช้ CPU-Z หรือไม่
ตัวเลือกนี้แนะนำสำหรับประสิทธิภาพสูงสุดเนื่องจากห้องสมุดจะถูกสร้างขึ้นโดยเฉพาะสำหรับ CPU และ OS ของคุณ
ข้อกำหนด : CMAKE หรือ CMAKE จาก Anaconda, สร้างเครื่องมือสำหรับ Visual Studio 2019
cmake .
cmake --build . --config Release
หากทุกอย่างเป็นไปด้วยไฟล์ binReleaserwkv.dll ควรปรากฏขึ้น
อ้างถึงเอกสาร/cublas_on_windows.md สำหรับคู่มือที่ครอบคลุม
อ้างถึงเอกสาร/hipblas_on_windows.md สำหรับคู่มือที่ครอบคลุม
ข้อกำหนด : CMAKE (Linux: sudo apt install cmake , MacOS: brew install cmake , Anaconoda: CMake Package)
cmake .
cmake --build . --config Release
ผู้ใช้ Anaconda & M1 : โปรดตรวจสอบว่า CMAKE_SYSTEM_PROCESSOR: arm64 หลังจากเรียกใช้ cmake . - หากตรวจพบ x86_64 ให้แก้ไขไฟล์ CMakeLists.txt ภายใต้ # Compile flags เพื่อเพิ่ม set(CMAKE_SYSTEM_PROCESSOR "arm64")
หากทุกอย่างเป็นไปด้วย librwkv.so (linux) หรือ librwkv.dylib (macOS) ไฟล์ควรปรากฏในโฟลเดอร์ repo พื้นฐาน
cmake . -DRWKV_CUBLAS=ON
cmake --build . --config Release
หากทุกอย่างเป็นไปด้วย librwkv.so (linux) หรือ librwkv.dylib (macOS) ไฟล์ควรปรากฏในโฟลเดอร์ repo พื้นฐาน
ข้อกำหนด : Python 3.x พร้อม pytorch
ก่อนอื่น ให้ดาวน์โหลดรุ่นจาก Hugging Face เช่นนี้
ประการที่สอง แปลงเป็นรูปแบบ 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
ข้อกำหนด : Python 3.x พร้อม numpy หากใช้โมเดล Pile หรือ Raven จำเป็นต้องใช้ tokenizers ด้วย
เพื่อสร้างข้อความบางส่วนเรียกใช้:
# 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
เพื่อแชทกับบอท Run:
# 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 เพื่อเปลี่ยนการแจ้งเตือนและการตั้งค่าการสุ่มตัวอย่าง
การอนุมานสคริปต์สั้นและเรียบง่าย py demostrates การใช้ rwkv.cpp ใน Python
หากต้องการใช้ rwkv.cpp ใน C/C ++ ให้รวมส่วนหัว rwkv.h.
หากต้องการใช้ rwkv.cpp ในภาษาอื่น ๆ ดูส่วนการผูกด้านล่าง หากภาษาของคุณหายไปคุณสามารถพยายามผูกกับ C API โดยใช้เครื่องมือที่ให้โดยภาษาของคุณ
โครงการเหล่านี้ห่อ rwkv.cpp เพื่อใช้งานได้ง่ายขึ้นในภาษา/เฟรมเวิร์กอื่น ๆ
ggml เคลื่อนที่อย่างรวดเร็วและบางครั้งสามารถทำลายความเข้ากันได้กับรูปแบบไฟล์รุ่นเก่า
rwkv.cpp จะพยายามที่จะอธิบายว่าทำไมไฟล์โมเดลไม่สามารถโหลดได้และขั้นตอนต่อไปของผู้ใช้
สำหรับการอ้างอิงเท่านั้นนี่คือรายการของ rwkv.cpp เวอร์ชันล่าสุดที่รองรับรูปแบบเก่า จะไม่มีการสนับสนุนสำหรับเวอร์ชันเหล่านี้
Q4_2 เค้าโครงเก่าของรูปแบบเชิงปริมาณQ4_3 , Q4_1_O ดูเพิ่มเติมที่ docs/file_format.md สำหรับหมายเลขเวอร์ชันของไฟล์รุ่น rwkv.cpp และ changelog ของพวกเขา
โปรดติดตามรูปแบบรหัสที่อธิบายไว้ในเอกสาร/code_style.md