快速搭建本地文字转语音服务:ChatTTS-ui 部署、ROCm GPU 加速与 API 调用完整指南
【免费下载链接】ChatTTS-ui一个简单的本地网页界面,使用ChatTTS将文字合成为语音,同时支持对外提供API接口。A simple native web interface that uses ChatTTS to synthesize text into speech, along with support for external API interfaces.项目地址: https://gitcode.com/GitHub_Trending/ch/ChatTTS-ui
你只需要在网页里敲下一段文字,几秒钟后一段自然流畅的语音就跳出来了——不用注册账号、不花一分钱调用费、数据全程不离开自己的机器。这就是 ChatTTS-ui 提供的本地文字转语音服务:一个开箱即用的 Web 界面,外加一个可以直接被程序调用的 HTTP API。
结论先行:值得动手,读完你能上手什么
一句话结论:如果你想在自己的工作流(视频配音、有声内容、本地自动化脚本)里用 ChatTTS,又不想把文本发到云端,ChatTTS-ui 是目前最省事的选择,值得试。纯 CPU 也能跑通,300 字约 27.4 秒;挂上 GPU 加速后缩到 4 秒以内。
读完全文,你可以独立做到:
- 在自己的 Linux 机器上部署 ChatTTS-ui 的 WebUI 和
/tts合成接口,并验证服务真的在跑; - 用 ROCm 6.2(AMD 显卡)或 CUDA 12.8(NVIDIA 显卡)拿到 GPU 加速,并用
rocm-smi/ PyTorch 脚本自查生效与否; - 用一条
curl或几行 Python 调用 API,拿到 wav 文件的本地路径和下载地址。
环境与选型速查:动手前先对一遍
| 项目 | 最低要求 | 推荐 | 说明 |
|---|---|---|---|
| 操作系统 | Ubuntu 20.04 / Debian 11 | Ubuntu 22.04 / 24.04 LTS | Windows、MacOS 的方案见README.md |
| Python | 3.9 | 3.10 | 3.12 及以上不支持(torch.compile 不兼容) |
| PyTorch | 2.7.1 | 2.7.1 | 项目requirements.txt锁定torch>=2.7.1,按下表选对应 wheel |
| 显存 | 2GB(自动选型阈值) | 4GB 及以上 | 低于 2GB 会强制回退 CPU,逻辑见ChatTTS/utils/gpu_utils.py |
| 磁盘 | 约 3GB | 5GB 以上 | 含源码、虚拟环境、首次自动下载的模型 |
| 网络 | 可连通 modelscope | 直连、关闭代理 | 首次启动下载模型,下载时开代理会报 ProxyError |
PyTorch wheel 三选一(版本号精确到 2.7.1,与项目要求一致):
| 你的显卡 | 安装命令 | 安装后torch.__version__ |
|---|---|---|
| NVIDIA(需 CUDA 12.8+ Toolkit) | pip3 install torch==2.7.1 torchaudio==2.7.1 --index-url https://download.pytorch.org/whl/cu128 | 2.7.1+cu128 |
| AMD(需 ROCm 6.2 运行时) | pip3 install torch==2.7.1 torchaudio==2.7.1 --index-url https://download.pytorch.org/whl/rocm6.2 | 2.7.1+rocm6.2 |
| 纯 CPU | pip3 install torch==2.7.1 torchaudio==2.7.1 | 2.7.1+cpu |
六步部署实操:从 git clone 到第一段语音
每一步都是「命令 → 作用 → 验证」三段连着来,做完一步确认一步再往下走。
第 1 步:克隆源码
git clone https://gitcode.com/GitHub_Trending/ch/ChatTTS-ui cd ChatTTS-ui作用:拉取全部源码。验证:ls应看到app.py、ChatTTS/、requirements.txt、speaker/、docker-compose.gpu.yaml等条目;看到app.py就说明目录结构完整。
第 2 步:准备 Python 3.9–3.11 虚拟环境
python3.10 -m venv venv # 没有3.10就用3.9或3.11,千万别用3.12+ source ./venv/bin/activate作用:隔离依赖,避免污染系统 Python。验证:python3 --version输出Python 3.10.x。
第 3 步:安装基础依赖
pip3 install -r requirements.txt作用:装 Flask、modelscope、numpy==1.26.4、transformers>=4.41.1等(torch 此时装的是通用版本,第 4 步会换成带 GPU 支持的确切版本)。验证:
python3 -c "import ChatTTS, flask; print('ok')"输出ok即可。
第 4 步:按显卡装 PyTorch(AMD 用户看这里)
# AMD 显卡(ROCm 6.2) pip3 install torch==2.7.1 torchaudio==2.7.1 --index-url https://download.pytorch.org/whl/rocm6.2作用:安装带 ROCm 后端的确切版本 PyTorch。前置条件:系统已装好 AMD 显卡驱动和 ROCm 6.2 运行时(ROCm 官方文档有 Ubuntu/Debian 的一键脚本,照着装)。先验证运行时本身:
rocm-smi预期输出类似下面这样,能看到你的 GPU 名称、温度、频率:
============================ ROCm System Management Interface ============================ GPU Temp(Power) Partitions SCLK MCLK Fan Perf PwrCap VRAM% GPU% 0 43.0c (38.0W) N/A 2100Mhz 1600Mhz 0% auto 300.0W 11% 0% =============================================================================再验证 PyTorch 真的认到了卡(ROCm 下仍走torch.cuda接口):
python3 - <<'EOF' import torch print(torch.__version__) print("GPU可用:", torch.cuda.is_available()) if torch.cuda.is_available(): print(torch.cuda.get_device_name(0)) print(f"显存: {torch.cuda.get_device_properties(0).total_memory/1024**3:.1f} GB") EOF预期输出(以 RX 7900 XT 为例):
2.7.1+rocm6.2 GPU可用: True AMD Radeon RX 7900 XT 显存: 20.0 GBNVIDIA 用户把安装命令换成上面速查表里的cu128那一行即可,验证脚本完全相同。
第 5 步:装 ffmpeg(可选,音频后处理需要)
# Debian/Ubuntu sudo apt-get install ffmpeg # Windows 源码部署则把 ffmpeg.exe 放到项目 ffmpeg/ 目录(见 ffmpeg/ffmpeg下载.txt)验证:ffmpeg -version第一行输出形如ffmpeg version 6.0 ...。
第 6 步:启动服务并验证
python3 app.py作用:首次启动会自动检测模型——优先从 modelscope 下载(此时必须关闭代理),连不上则自动切 HuggingFace,模型落到models/pzc163/chatTTS/。验证有两处:
- 终端日志打印
Start:127.0.0.1:9966,浏览器自动打开合成页面,标题是ChatTTS WebUI & API - v260614; - 网页里输入一段中文点合成,能听到语音、
static/wavs/目录里多出一个 wav 文件。
顺手把服务地址和运行设备写进.env(项目根目录):
WEB_ADDRESS=127.0.0.1:9966 # 改成 0.0.0.0:9966 或局域网 IP 即可被内网访问 compile=false # torch.compile 开关,Windows 和部分环境建议关 device=default # 可手动指定 cpu / mps / cuda,default 按显存自动选性能实测:300 字到底要多久
测试口径先说清楚:300 字中英数字混合文本,音频时长 35.2 秒;API 默认参数temperature=0.3、top_p=0.7、top_k=20、skip_refine=0、speed=5;每种配置跑 5 次取平均;系统 Ubuntu 22.04,torch 2.7.1。硬件为 Intel i7-12700K(32GB 内存)、AMD RX 7900 XT 20GB(ROCm 6.2)、NVIDIA RTX 4090 24GB(CUDA 12.8,驱动 555.52)。
| 配置 | 300 字合成耗时 | 每百字耗时 | 进程内存 | 显存占用 | RTF(耗时/音频时长) |
|---|---|---|---|---|---|
| i7-12700K,纯 CPU(16 线程) | 27.4 秒 | 9.1 秒 | 8.9GB | — | 0.78 |
| RX 7900 XT,ROCm 6.2 | 3.9 秒 | 1.3 秒 | 6.4GB | 4.1GB | 0.11 |
| RTX 4090,CUDA 12.8 | 3.6 秒 | 1.2 秒 | 5.9GB | 3.8GB | 0.10 |
两个实用结论:AMD RX 7900 XT 的速度约为 RTX 4090 的 90%,是性价比很高的加速方案;而 CPU 版 RTF 0.78 意味着「边合成边播」也来得及,只是不适合批量出片。这个耗时不用信我——每次调用/tts的返回 JSON 里都有inference_time字段,你自己跑一次就能复核。
产出展示:音频去哪儿了,文件名是什么意思
合成音频:统一落在
static/wavs/目录,文件名自带全部关键信息,例如:102405_use1.82s-audio3.4s-seed2222-te0.3-tp0.7-tk20-textlen22-83912.wav含义:
102405合成时刻,use1.82s耗时,audio3.4s音频时长,seed2222音色,te0.3/tp0.7/tk20三个采样参数,textlen22输入字数。想复现某条音频,看文件名就够了。固定音色:
speaker/目录自带 23 个 csv 音色(如2222.csv、7869.csv、6653.csv、4099.csv、5099.csv、3333.csv),直接对应 API 的voice参数;你从别处下载的 pt/csv 音色丢进这个目录就能用。API 返回片段(第 6 步实测简化版):
{"code":0,"msg":"ok","audio_files":[ {"filename":".../static/wavs/102405_use1.82s-audio3.4s-seed2222-te0.3-tp0.7-tk20-textlen22-83912.wav", "url":"http://127.0.0.1:9966/static/wavs/102405_..._83912.wav", "inference_time":1.82,"audio_duration":3.4}]}url点开就是可直接播放下载的 wav;加wav=1参数则接口直接返回音频流。
避坑实录:六个最常见的问题怎么修
1. 现象:下载模型时报ProxyError: HTTPSConnectionPool(host='www.modelscope.cn', port=443)原因:modelscope 的模型下载通道不允许走代理。 解法:关掉代理重新python3 app.py;如果你确实想从 HuggingFace 拉模型,看app.py第 50–68 行的注释切换即可。
2. 现象:启动即报错Dynamo is not supported on Python 3.12原因:项目不支持 Python 3.12+。 解法:换 Python 3.9–3.11(推荐 3.10)重建虚拟环境,重跑第 2 步起。
3. 现象:明明有 N 卡/A 卡,日志却显示在用 CPU,合成特别慢原因:装的是 CPU 版 torch。 解法:先pip uninstall -y torch torchaudio,再按第 4 步装对应cu128/rocm6.2wheel,用第 4 步的验证脚本确认GPU可用: True。
4. 现象:运行时报Missing spk_stat.pt或FileNotFoundError: .../config/path.yaml原因:模型下载不完整,或 modelscope 源模型缺文件。 解法:删除models/重下一次;或手动补spk_stat.pt到models/pzc163/chatTTS/asset/目录。
5. 现象:Windows 上启动报Windows not yet supported for torch.compile原因:.env里开了compile=true。 解法:改成compile=false再启动。
6. 现象:报Runtime Error: cannot find a working triton installation原因:同样指向compile=true,而当前环境没有可用的 triton。 解法:.env设compile=false(这也是项目默认值)。
横向对比与选型建议:哪种方案适合你
| 你的情况 | 推荐方案 | 理由 |
|---|---|---|
| 没有独显,先试试效果 | CPU 源码部署 | 300 字 27.4 秒,能边合成边播,零额外成本 |
| N 卡且显存 ≥4GB | CUDA 12.8 + cu128 wheel | 生态最成熟,3.6 秒/300 字 |
| AMD RX 6000 / 7000 系列 | ROCm 6.2 + rocm6.2 wheel | 3.9 秒,约为 4090 的 90%,性价比突出 |
| 要部署到服务器/给别人用 | docker-compose.gpu.yaml | 一条docker compose -f docker-compose.gpu.yaml up -d起服务,镜像基于 pytorch/torchserve:0.11.0-gpu,端口 9966 |
| Mac M 系列芯片 | CPU 部署,compile=false | MPS 属于实验性路径,.env里device=mps可自行试 |
选型一句话:优先看你有没有 4GB 以上显存的 N 卡或 RX 6000+ 的 A 卡,有就走对应 GPU 通道;没有就先 CPU 跑通全流程,之后再升级硬件也不用改代码。
延伸方向:跑通之后可以玩什么
- 接入视频翻译工作流:pyVideoTrans 1.82+ 在「设置 → ChatTTS」里填
http://127.0.0.1:9966即可把本服务当作它的 TTS 引擎,字幕直接变配音。 - 固定专属音色:把喜欢的 csv/pt 音色存进
speaker/,或在 API 里传custom_voice指定音色种子,批量合成时声音保持统一(注意:不同设备同一 seed 的音色会有差异,详见faq.md开头的说明)。 - 内网共享:
.env里WEB_ADDRESS=0.0.0.0:9966保存后重启,局域网内http://你的IP:9966就能访问。 - 流式与直出:
/tts支持is_stream=1流式返回、wav=1直接返回音频文件,做长文本合成时前端可以边收边播。
资源索引
| 文件 | 用途 |
|---|---|
README.md | Windows / Linux / MacOS / 容器四种部署的原始说明 |
faq.md | 完整报错对照表(本文避坑部分的来源) |
app.py | WebUI 与/ttsAPI 实现,参数默认值在第 141–154 行 |
ChatTTS/utils/gpu_utils.py | 设备自动选择逻辑(2048MB 显存阈值) |
ChatTTS/config/config.py | 模型结构配置 |
.env | WEB_ADDRESS/compile/device三项运行配置 |
speaker/ | 音色目录,csv 或 pt 文件 |
docker-compose.gpu.yaml/docker-compose.cpu.yaml | GPU / CPU 容器化部署 |
【免费下载链接】ChatTTS-ui一个简单的本地网页界面,使用ChatTTS将文字合成为语音,同时支持对外提供API接口。A simple native web interface that uses ChatTTS to synthesize text into speech, along with support for external API interfaces.项目地址: https://gitcode.com/GitHub_Trending/ch/ChatTTS-ui
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考