如何在 Windows 系统上使用 CUDA 运行 Mozilla TTS/Coqui TTS 培训?

我有一台带有 Quadro P5000 显卡的机器,运行 Windows 10。我想在这个系统上训练 TTS 语音。我需要安装什么才能使它正常工作?

attachments-2023-06-CQ5qHENI6484477319806.png

GitHub 开源项目:https://github.com/coqui-ai/TTS

以下是要安装/执行的操作:

  1. 下载并安装适用于 Windows 的 Python 3.8(不是3.9+)。在安装过程中,确保您:
  • 选择为所有用户安装它。
  • 选择将 Python 添加到 PATH。
  1. 下载并安装 CUDA Toolkit 10.1(不是11.0+)。
  2. 下载“cuDNN v7.6.5(2019 年 11 月 5 日),适用于 CUDA 10.1”(不是cuDNN v8+),解压,然后将文件夹中的内容复制cuda到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1.
  3. 下载最新的 64 位版本的 eSpeak NG(无版本限制:-))。
  4. 下载适用于 Windows 的最新 64 位版本的 Git(无版本限制:-))。
  5. 打开 PowerShell 提示符到您要安装 Coqui TTS 的文件夹。
  6. 运行git clone https://github.com/coqui-ai/TTS.git。
  7. 运行cd TTS。
  8. 运行python -m venv .。
  9. 运行.\Scripts\pip install -e .。
  10. 运行以下命令(由于已知问题,这与您从PyTorch 网站获得的命令不同):
代码语言:javascript
复制
.\Scripts\pip install torch==1.8.0+cu101 torchvision==0.9.0+cu101 torchaudio===0.8.0 -f https://download.pytorch.org/whl/torch_stable.html
  1. 将以下内容放入TTS文件夹中名为“test_cuda.py”的脚本中:
代码语言:javascript
复制
import torch
x = torch.rand(5, 3)
print(x)
print(torch.cuda.is_available())
  1. 通过运行脚本.\Scripts\python ./test_cuda.py并确认输出如下所示(第一部分应该只有随机数,但最后一行必须是True;如果没有,则 CUDA 未正确安装):
代码语言:javascript
复制
tensor([[0.2141, 0.7808, 0.9298],
        [0.3107, 0.8569, 0.9562],
        [0.2878, 0.7515, 0.5547],
        [0.5007, 0.6904, 0.4136],
        [0.2443, 0.4158, 0.4245]])
True
  1. 将以下内容放入文件夹中名为“train.bat”的脚本中TTS,然后为您的配置文件自定义它:
代码语言:javascript
复制
set PYTHONIOENCODING=UTF-8
set PYTHONLEGACYWINDOWSSTDIO=UTF-8
set PHONEMIZER_ESPEAK_PATH=C:/Program Files/eSpeak NG/espeak-ng.exe

.\Scripts\python.exe ./TTS/bin/train_tacotron.py --config_path "C:/path/to/your/config.json"

  1. 通过运行脚本.\train.bat。

如果您使用的模型与 Tacotron 不同,或者需要将其他参数传递到训练脚本中,请随时进一步自定义train.bat。

如果您刚刚开始一般的 TTS 培训,请查看如何开始在 Ubuntu 20.04 上使用 Mozilla TTS 培训自定义语音模型?.

我已经抓取了 Microsoft Speech SDK 的文档以及开发人员网站,例如https://learn.microsoft.com/en-us/dotnet/api/system.speech.synthesis.ttsengine

您应该查看TTS Engine Vendor Porting Guide。您需要实现 ISpTTSEngine,它完成所有工作,以及ISpObjectWithToken,它管理注册和创建。