流媒體模式在C ++中使用(可選)RK3588 NPU加速度支持在C ++中實現。以Esperanto的“說話”命名。
在構建之前,您需要實現以下依賴性
(API/Web服務器)
(RKNN支持)
在哪個piper-phoenomize和onnxruntime二進製文件中(不是來源!除非您想構建自己!)可能需要手動下載和解壓縮。之後,運行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)
還提供了Web API服務器,以便其他應用程序可以輕鬆地執行文本到語音。有關詳細信息,請參閱Web API文檔以獲取詳細信息。默認情況下,可以在URL的根部訪問演示UI。 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合成API只有在啟用時才能工作。 --auth [YOUR_TOKEN]將將令牌設置為your_token。此外,設置PAROLI_TOKEN環境變量將把持有人令牌設置為設置的環境變量。
Authentication: Bearer <insert the token>
啟用身份驗證時,網絡UI將無法工作
要獲取編碼器和解碼器模型,您要么需要下載它們,要么從檢查點創建一個。檢查點是訓練有素的原始模型吹笛者生成的。有關詳細信息,請參閱Piper的Training.md。要將檢查點轉換為ONNX文件對,您需要Mush42的Piper叉和流式分支。跑步
python3 -m piper_train.export_onnx_streaming /path/to/your/traning/lighting_logs/version_0/checkpoints/blablablas.ckpt /path/to/output/directory擁抱面上提供了一些100%的法律模型。
默認情況下,模型在CPU上運行,可能是飢餓和慢的。 --accelerator cuda您想使用GPU等。目前,唯一支持的加速器是Cuda。但是ROCM可以很容易地支持,只是我沒有硬件來測試它。隨時做出貢獻。
這是支持加速器的列表:
cuda -nvidia cudatensorrt - nvidia tensorrt此外,在基於RK3588的系統上,可以通過將-DUSE_RKNN=ON傳遞到CMAKE並傳遞RKNN模型而不是ONNX作為解碼器來啟用NPU支持。與在RK3588 CPU內核上運行相比,〜4.3倍加速度。請注意,當使用RKNN模型時, accelerator標誌沒有效果,並且只有解碼器才能在RK3588 NPU上運行。
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的版本,因為這是與上游Piper一起使用的版本。 RKNN-ToolKit2版本1.6.0是必需的。
# 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進行推理,只需通過CLI中的RKNN模型即可。如果傳遞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 托多:
除了Rockchip改進了RKNNRT及其編譯器之外,還沒有降低RK3588的合成潛伏期的好方法。編碼器是一個動態圖,因此RKNN無法正常工作。以及他們如何實現多NPU的共同過程禁止更快的單批次推理。多批量可以更快地製作,但我看不到它的價值,因為它已經足夠快地用於家庭使用。