تنفيذ وضع الدفق لنظام Piper TTS في C ++ مع (اختياري) RK3588 NPU دعم تسريع NPU. سميت باسم "التحدث" في إسبرانتو.
قبل البناء ، ستحتاج إلى الوفاء بالتبعيات التالية
(API/Web Server)
(دعم rknn)
في أي piper-phoenomize و onnxruntime binary (وليس المصدر! ما لم تكن ترغب في بناء أنفسكم!) من المحتمل أن يتم تنزيلها وإزالة الضغط عليها يدويًا. بعد ذلك ، قم بتشغيل Cmake وأشار إلى المجلدات التي قمت بإعادة ضغطها.
mkdir build
cd build
cmake .. -DORT_ROOT=/path/to/your/onnxruntime-linux-aarch64-1.14.1 -DPIPER_PHONEMIZE_ROOT=/path/to/your/piper-phonemize-2023-11-14 -DCMAKE_BUILD_TYPE=Release
make -j
# IMPORTANT! Copy espeak-ng-data or pass `--espeak_data` CLI flag
cp -r /path/to/your/piper-phonemize-2023-11-14/share/espeak-ng-data . بعد ذلك قم بتشغيل paroli-cli واكتب في وحدة التحكم لتوليف الكلام. يرجى الرجوع إلى الأقسام اللاحقة لإنشاء النماذج.
./paroli-cli --encoder /path/to/your/encoder.onnx --decoder /path/to/your/decoder.onnx -c /path/to/your/model.json
...
[2023-12-23 03:13:12.452] [paroli] [info] Wrote /home/marty/Documents/rkpiper/build/./1703301190238261389.wav
[2023-12-23 03:13:12.452] [paroli] [info] Real-time factor: 0.16085024956315996 (infer=2.201744556427002 sec, audio=13.688163757324219 sec)
يتم توفير خادم واجهة برمجة تطبيقات الويب أيضًا بحيث يمكن للتطبيقات الأخرى تنفيذ النص إلى الكلام بسهولة. للحصول على التفاصيل ، يرجى الرجوع إلى مستند الويب API للحصول على التفاصيل. بشكل افتراضي ، يمكن الوصول إلى واجهة المستخدم التجريبية في جذر عنوان URL. يدعم خادم API الاستجابة مع الصوت المضغوط لتقليل متطلبات عرض النطاق الترددي وتدفق الصوت عبر WebSocket.
لتشغيله:
./paroli-server --encoder /path/to/your/encoder.onnx --decoder /path/to/your/decoder.onnx -c /path/to/your/model.json --ip 0.0.0.0 --port 8848واستدعاء TSS
curl http://your.server.address:8848/api/v1/synthesise -X POST -H ' Content-Type: application/json ' -d ' {"text": "To be or not to be, that is the question"} ' > test.opusالعرض التوضيحي:
لتمكين حالات الاستخدام التي تتعرض فيها الخدمة لأي سبب من الأسباب. يدعم خادم API مخطط المصادقة الأساسي. ستقوم علم --auth رمز حامل مختلف في كل مرة ، وسيعمل كل من WebSocket و HTTP Synthesis API فقط إذا تم تمكينه. -سوف يقوم --auth [YOUR_TOKEN] بتعيين الرمز المميز على your_token. علاوة على ذلك ، سيقوم تعيين متغير بيئة PAROLI_TOKEN بتعيين رمز حامل على أي شيء يتم تعيينه على متغير البيئة.
Authentication: Bearer <insert the token>
لن تعمل واجهة مستخدم الويب عند تمكين المصادقة
للحصول على نماذج التشفير وفك الترميز ، ستحتاج إما إلى تنزيلها أو إنشاء واحدة من نقاط التفتيش. نقاط التفتيش هي النموذج الخام المدرب التي يولدها Piper. يرجى الرجوع إلى Piper's Training.md للحصول على التفاصيل. لتحويل نقاط التفتيش إلى أزواج ملفات OnNx ، ستحتاج إلى شوكة Piper Mush42 وفرع البث. يجري
python3 -m piper_train.export_onnx_streaming /path/to/your/traning/lighting_logs/version_0/checkpoints/blablablas.ckpt /path/to/output/directoryيتم توفير حوالي 100 ٪ من النماذج القانونية على Luggingface.
بشكل افتراضي ، يتم تشغيل النماذج على وحدة المعالجة المركزية ويمكن أن تكون جائعة وبطيئة. إذا كنت ترغب في استخدام وحدة معالجة الرسومات ، وما إلى ذلك .. يمكنك تمرير علم --accelerator cuda في CLI لتمكينه. في الوقت الحالي ، فإن التسريع الوحيد المدعوم هو كودا. ولكن يمكن دعم ROCM بسهولة ، فقط ليس لدي الأجهزة لاختبارها. لا تتردد في المساهمة.
هذه هي قائمة المسرعات المدعومة:
cuda - نفيديا كوداtensorrt - Nvidia Tensorrt بالإضافة إلى ذلك ، على الأنظمة المستندة إلى RK3588 ، يمكن تمكين دعم NPU عن طريق تمرير -DUSE_RKNN=ON cmake وتمرير نموذج RKNN بدلاً من ONNX كوحدة فك التشفير. مما أدى إلى تقارير ~ 4.3x تسريع مع التشغيل على نوى وحدة المعالجة المركزية RK3588. لاحظ أن علامة accelerator ليس لها أي تأثير عند استخدام نموذج RKNN ويمكن تشغيل وحدة فك الترميز فقط على NPU RK3588.
لا توفر Rockchip أي حزمة من نوع ما لتثبيت المكتبات والرؤوس. هذا يجب أن يتم يدويا.
git clone https://github.com/rockchip-linux/rknn-toolkit2
cd rknn-toolkit2/rknpu2/runtime/Linux/librknn_api
sudo cp aarch64/librknnrt.so /usr/lib/
sudo cp include/ * /usr/include/أيضا ، يجب أن يتم تحويل ONNX إلى RKNN على جهاز كمبيوتر X64. اعتبارًا من كتابة هذا المستند ، من المحتمل أن ترغب في تثبيت الإصدار لـ Python 3.10 لأن هذا هو نفس الإصدار الذي يعمل مع Opstream Piper. يتطلب الإصدار 1.6.0 RKNN-Toolkit2.
# Install rknn-toolkit2
git clone https://github.com/rockchip-linux/rknn-toolkit2
cd rknn-toolkit2/tree/master/rknn-toolkit2/packages
pip install rknn_toolkit2-1.6.0+81f21f4d-cp310-cp310-linux_x86_64.whl
# Run the conversion script
python tools/decoder2rknn.py /path/to/model/decoder.onnx /path/to/model/decoder.rknnلاستخدام RKNN للاستدلال ، ما عليك سوى تمرير نموذج RKNN في CLI. سيظهر خطأ إذا تم تمرير RKNN ولكن دعم RKNN لم يتم تمكينه أثناء التجميع.
./paroli-cli --encoder /path/to/your/encoder.rknn --decoder /path/to/your/decoder.onnx -c /path/to/your/model.json
# ^^^^
# The only change تودو:
لا توجد طريقة جيدة لتقليل الكمون التوليف على RK3588 إلى جانب Rockchip تحسين Rknnrt ومترجمهم. المشفر هو رسم بياني ديناميكي وبالتالي لن يعمل rknn. وكيف تقوم بتنفيذ عملية المشاركة في NPU تحظر استنتاج الدُفعات المفردة بشكل أسرع. يمكن جعل الدفعة المتعددة أسرع لكنني لا أرى قيمةها لأنها سريعة بالفعل بما يكفي للاستخدام المنزلي.