(オプション)RK3588 NPU加速サポートを備えたC ++でのPiper TTSシステムのストリーミングモード実装。エスペラントの「スピーキング」にちなんで名付けられました。
構築する前に、次の依存関係を満たす必要があります
(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] tokenをyour_tokenに設定します。さらに、 PAROLI_TOKEN環境変数を設定すると、Bearerトークンが環境変数が設定されているものに設定されます。
Authentication: Bearer <insert the token>
認証が有効になっている場合、Web UIは機能しません
エンコーダーモデルとデコーダーモデルを取得するには、それらをダウンロードするか、チェックポイントからそれを作成する必要があります。チェックポイントは、訓練された生モデルPiper生成です。詳細については、Piper's 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/directoryHuggingfaceで約100%の法的モデルが提供されています。
デフォルトでは、モデルはCPUで実行され、飢えていて遅くなる可能性があります。 GPUやなどを使用したい場合は、CLIの--accelerator cuda Flagを渡して有効にすることができます。今のところ、サポートされている唯一のアクセラレータはCUDAです。しかし、ROCMは簡単にサポートできます。テストするハードウェアがありません。お気軽に貢献してください。
これは、サポートされている加速器のリストです。
cuda -nvidia cudatensorrt -Nvidia Tensortさらに、RK3588ベースのシステムでは、 -DUSE_RKNN=ON cmakeに渡し、DecoderとしてONNXではなくRKNNモデルを渡すことにより、NPUサポートを有効にできます。その結果、RK3588 CPUコアでの実行と比較して、speedupが約4.3倍になります。 A RKNNモデルが使用され、デコーダーのみがRK3588 NPUで実行できる場合、 acceleratorフラグは効果がないことに注意してください。
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のバージョンをインストールすることをお勧めします。 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 TODO:
RKNNRTとそのコンパイラを改善するROCKCHIP以外に、RK3588の合成遅延を減らす良い方法はありません。エンコーダーは動的グラフであるため、RKNNは機能しません。また、マルチNPUの共同プロセスをどのように実装するかは、より高速なシングルバッチ推論を禁止します。マルチバッチはより速くすることができますが、家の使用に十分な速さで既に速いため、その価値はわかりません。