هذا هو منفذ Blinkdl/RWKV-LM إلى Ggerganov/GGML.
إلى جانب FP32 المعتاد ، فإنه يدعم FP16 ، وتكميلية int4 ، و int5 و int8 . يركز هذا المشروع على وحدة المعالجة المركزية ، ولكن يتم دعم Cublas أيضًا.
يوفر هذا المشروع مكتبة C RWKV.H وغلاف بيثون مقرور له.
RWKV هي بنية نموذجية لغوية كبيرة ، مع أكبر نموذج في الأسرة التي لديها معلمات 14B. على عكس المحول مع الاهتمام O(n^2) ، لا يتطلب RWKV الحالة فقط من الخطوة السابقة لحساب سجلات. هذا يجعل RWKV صديقة للغاية لوحدة المعالجة المركزية على سياق كبير.
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 .
أسفل الجدول هو للرجوع فقط. تم إجراء قياسات على وحدة المعالجة المركزية 4C/8T X86 مع AVX2 ، 4 مؤشرات ترابط. النماذج هي RWKV v4 Pile 169M ، RWKV v4 Pile 1.5B .
| شكل | الحيرة (169 متر) | الكمون ، 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() ، فلا نزال بحاجة إلى استخدام بعض موارد وحدة المعالجة المركزية لتنفيذ العمليات المتبقية.
تم إجراء قياسات على وحدة المعالجة المركزية 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() ، ما زلنا بحاجة إلى استخدام عدد قليل من موارد وحدة المعالجة المركزية لتنفيذ العمليات المتبقية.
المتطلبات : git.
git clone --recursive https://github.com/saharNooby/rwkv.cpp.git
cd rwkv.cpp
تحقق من الإصدارات ، وقم بتنزيل Zip المناسبة لنظام التشغيل و CPU ، واستخراج ملف مكتبة rwkv في دليل المستودع.
على Windows: للتحقق مما إذا كانت وحدة المعالجة المركزية الخاصة بك تدعم AVX2 أو AVX-512 ، استخدم وحدة المعالجة المركزية-Z.
يوصى بهذا الخيار لتحقيق أقصى أداء ، لأنه سيتم تصميم المكتبة خصيصًا لوحدة المعالجة المركزية ونظام التشغيل.
المتطلبات : Cmake أو Cmake من Anaconda ، إنشاء أدوات لـ 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 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) في مجلد الريبو الأساسي.
cmake . -DRWKV_CUBLAS=ON
cmake --build . --config Release
إذا سارت الأمور على ما يرام ، فيجب أن يظهر ملف librwkv.so (Linux) أو librwkv.dylib (MacOS) في مجلد الريبو الأساسي.
المتطلبات : 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 ، مطلوب أيضًا المميزات.
لإنشاء بعض النص ، قم بتشغيل:
# 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
edit cenerte_completions.py أو chat_with_bot.py لتغيير المطالبات وإعدادات أخذ العينات.
البرنامج النصي القصير والبسيط interference_example.py يدلل استخدام rwkv.cpp في Python.
لاستخدام rwkv.cpp في C/C ++ ، قم بتضمين رأس RWKV.H.
لاستخدام rwkv.cpp في أي لغة أخرى ، راجع قسم الارتباطات أدناه. إذا كانت لغتك مفقودة ، فيمكنك محاولة ربط واجهة برمجة تطبيقات C باستخدام الأدوات التي توفرها لغتك.
تلتزم هذه المشاريع rwkv.cpp بأسهل الاستخدام في اللغات/الأطر الأخرى.
يتحرك ggml بسرعة ، ويمكنه أحيانًا كسر التوافق مع تنسيقات الملفات الأقدم.
ستحاول rwkv.cpp من الأفضل شرح سبب عدم تعذر تحميل ملف النموذج وما هي الخطوات التالية المتاحة للمستخدم.
للرجوع إليها فقط ، إليك قائمة بأحدث إصدارات rwkv.cpp التي دعمت التنسيقات القديمة. لن يتم تقديم أي دعم لهذه الإصدارات .
Q4_2 ، التصميم القديم للتنسيقات الكميةQ4_3 ، Q4_1_O راجع أيضًا مستندات/file_format.md للحصول على أرقام الإصدار من ملفات طراز rwkv.cpp و changelog.
يرجى اتباع نمط الرمز الموضح في المستندات/code_style.md.