(선택 사항) RK3588 NPU 가속도 지원을 사용하여 C ++에서 Piper TTS 시스템의 스트리밍 모드 구현. 에스페란토에서 "말하기"의 이름을 따서 명명되었습니다.
건축하기 전에 다음 의존성을 충족해야합니다.
(API/웹 서버)
(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)
웹 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그리고 TS를 호출합니다
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 환경 변수를 설정하면 Bearer 토큰이 환경 변수가 설정된 모든 것에 설정됩니다.
Authentication: Bearer <insert the token>
인증이 활성화 된 경우 웹 UI가 작동하지 않습니다.
인코더 및 디코더 모델을 얻으려면 다운로드하거나 체크 포인트에서 하나를 만들어야합니다. 체크 포인트는 훈련 된 원시 모델 파이퍼가 생성합니다. 자세한 내용은 Piper의 Training.md를 참조하십시오. 체크 포인트를 ONNX 파일 쌍으로 변환하려면 Mush42의 Piper Fork 및 Streaming Branch가 필요합니다. 달리다
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 플래그를 전달하여 활성화 할 수 있습니다. 현재 유일하게 지원되는 가속기는 Cuda입니다. 그러나 ROCM을 쉽게 지원할 수 있습니다. 단지 테스트 할 하드웨어가 없습니다. 자유롭게 기여하십시오.
이것은 지원되는 가속기 목록입니다.
cuda -NVIDIA CUDAtensorrt -Nvidia tensorrt 또한 RK3588 기반 시스템에서 NPU 지원은 Cmake에 -DUSE_RKNN=ON 전달하고 Onnx 대신 디코더 대신 rknn 모델을 전달함으로써 활성화 될 수 있습니다. RK3588 CPU 코어에서 실행하는 것과 비교하여 ~ 4.3 배 속도가 나옵니다. A accelerator 플래그는 A RKNN 모델이 사용될 때 영향을 미치지 않으며 Decoder 만 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 용 버전을 설치하려고 할 것입니다. 업스트림 파이퍼와 함께 작동하는 버전과 동일 하므로이 문서를 설치하려고합니다. 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 및 해당 컴파일러를 개선하는 것 외에도 RK3588에서 합성 대기 시간을 줄이는 좋은 방법은 없습니다. 인코더는 동적 그래프이므로 RKNN은 작동하지 않습니다. 또한 멀티 NPU 공동 프로세스를 구현하는 방법은 더 빠른 단일 배치 추론을 금지합니다. 멀티 배치는 더 빨리 만들어 질 수 있지만 이미 가정용으로 충분히 빠르기 때문에 그 값은 보이지 않습니다.