Tortoise 这个名字是作者 James Betker 自嘲取的——第一版在 K80 上生成一句中等长度的句子要两分钟。代价换来的是当年几乎没有对手的韵律:它不是端到端一把梭,而是把任务拆给五个模型接力。一个 GPT-2 结构的自回归解码器(autoregressive.pth,fp32 权重 1.72GB)先吐出几十上百条候选的 mel token 序列,CLVP2(976MB)这个 CLIP 式的文本—语音打分器把最贴合文本的那条挑出来,再交给扩散解码器(1.17GB)细化成梅尔谱,最后 UnivNet 声码器(391MB)出 24kHz 波形。参考音频按 22.05kHz 载入做条件,输出固定 24kHz。
整个项目是 Betker 一个人用自己的机器做出来的:8 张 RTX 3090 跑了几个月,约 5 万小时语音、以有声书为主,训练框架是他自己写的 DLAS。代码在 github.com/neonbjb/tortoise-tts,Apache 2.0,权重在 HuggingFace 的 jbetker/tortoise-tts-v2。要说清楚的是:主线已经很久没有推进了——PyPI 上 tortoise-tts 只有 3.0.0 一个版本,发布于 2023 年 10 月,带来的正是那个改变游戏规则的 hifidecoder(71MB):它一口气替掉扩散解码器和 UnivNet,直接从自回归潜变量出波形,官方 README 给出的数字是「0.25–0.3 RTF on 4GB vram」,配合 tts_stream 分块可以做到 500ms 以内的首包延迟。社区侧同样在收缩,JarodMica/ai-voice-cloning(承接 mrq 的训练分支)已于 2025 年 6 月归档,152334H/tortoise-tts-fast 挂着 maintenance only。
那为什么还要写这一页?因为 Tortoise 有两件事没被完全替代:一是它那条完整扩散路径出来的朗读腔——念书、念诗、长句停顿——至今仍有人专门为此保留它;二是它 Apache 2.0、权重可离线、不联网、不回传,做私有化部署没有任何授权拉扯。这一页讲清它到底吃多少显存、四档预设各差在哪、依赖版本锁死之后在现在的机器上怎么装得起来,以及在 NexGPU 上该点哪张卡——从 $0.193/卡·时 的 RTX 3090 24GB 开始。本页所有显存与体积数字均来自官方权重文件的实际字节数和上游 README,可自行核对。
01 —
五个模型、两条推理路径
Tortoise 只有一套权重发布,真正需要选的是走哪条解码路径、开哪几个可选模块。
| 版本 | 参数量 | 显存 | 上下文 | 说明 |
|---|---|---|---|---|
| api_fast.py + hifidecoder(v3.0.0 快速路径) | autoregressive 1.72GB + hifidecoder 71MB | fp32 权重约 1.8GB;half=True 约 0.9GB;上游标称 4GB 显存可跑 | max_mel_tokens 500(约一句话)/输出 24kHz | 跳过扩散解码器和 UnivNet,直接从 AR 潜变量出波形。唯一支持 tts_stream 流式分块的路径(stream_chunk_size 默认 40,overlap_wav_len 1024),也是 0.25–0.3 RTF 这个数字的来源。要低延迟就只能走这条。 |
| api.py 完整扩散路径(经典 v2 管线) | AR 1.72GB + diffusion 1.17GB + CLVP2 976MB + UnivNet 391MB | fp32 权重常驻约 4.3GB,half=True 约 2.2GB;峰值由 AR 候选批量决定 | tts() 默认 num_autoregressive_samples=512、diffusion_iterations=100 | Tortoise 之所以是 Tortoise 的那条路。四档预设的差别全在这两个数上:ultra_fast 是 16 路候选/30 步扩散,fast 是 96/80,standard 是 256/200,high_quality 是 256/400。想省时间先砍候选数,想省质量再砍扩散步数。 |
| CVVP 音色重排(默认关闭) | cvvp.pth 151MB | 额外约 0.15GB | cvvp_amount 默认 0.0 | 第二个打分器。CLVP2 判断「像不像这段文本」,CVVP 判断「像不像这个人」。音色跑偏、候选选出来内容对但声音不对时,把 cvvp_amount 调到 0.1–0.3,代价是多加载一个模型并拖慢重排。 |
| RLG 随机音色(rlg_auto + rlg_diffuser) | 25MB + 101MB | 额外约 0.13GB | voice='random' | 不提供参考音频时用来直接采样一个并不存在的说话人。做匿名旁白、做占位配音、或者你压根不想碰任何真人声纹的合规场景,这是原生解法。 |
| tortoise-detect 检测分类器 | classifier.pth 61MB | 约 0.1GB | 独立调用,不参与合成 | 作者当年一并放出的溯源工具,判断一段音频是否由 Tortoise 生成。私有化部署里拿它做输出留痕和内部审计很省事,不用另找第三方检测服务。 |
| tortoise-tts-fast(152334H 社区分支) | 复用官方权重,不额外下载 | 与完整路径同,可开 CPU offload 换显存 | DDIM/DPM-Solver 采样器 | 在官方加入 hifidecoder 之前的社区加速方案,宣称 5–10 倍、极限约 20 倍,靠的是 kv_cache、fp16 和换掉扩散采样器。仓库已标注 maintenance only,但如果你要的是「保留扩散音质同时提速」,它仍是唯一现成选项。 |
02 —
在 NexGPU 上该点哪张卡
上游给的门槛是 4GB,所以 Tortoise 的选卡逻辑不是「够不够装得下」,而是「AR 采样跑多快」。
试音、ultra_fast 预设、hifidecoder 流式接口
RTX 3090 24GB$0.193/卡·时
上游标称 4GB 就能跑,24GB 是彻底的过剩——但它同时是我们价目表上最便宜的一张 24GB 卡,fp16 加 kv_cache 全开也用不满,没有理由为了省显存去选更贵的卡。
standard/high_quality 预设,256 路候选加 200–400 步扩散
RTX 4090 24GB$0.540/卡·时
这一档是纯算力活:候选批量和扩散步数都翻了十几倍,AR 采样成为绝对瓶颈,4090 的 fp16 吞吐把挂机时间压下来之后,总账往往比在 3090 上熬更划算。
长文有声书批量离线合成,逐句重采样重挑
RTX 5090 32GB$0.723/卡·时
多出来的 8GB 正好用来抬 autoregressive_batch_size,一次多押几条候选让 CLVP2 一轮筛完,比反复调 read.py 的 --regenerate 省心得多。
用 DLAS 微调自回归主干,训练专属音色
RTX A6000 48GB$0.817/卡·时
微调要同时装下权重、梯度和优化器状态,48GB 是不用改代码就能跑起来的最低档;顺带一提,A100 PCIE 80GB 是 $0.824,只贵 $0.007 就把显存翻倍,值得先比一眼再下单。
03 —
从空机器到出第一段音频
Tortoise 的安装难点不在模型,在依赖锁死的 requirements.txt——先把环境隔离干净,后面全是顺的。
- 01
开一台带 PyTorch 镜像的实例,拉代码
在 console.nexgpu.net 选 RTX 3090 24GB,镜像挑现成的 PyTorch 那一档(2000+ 预置镜像里有),SSH 进去直接拉仓库。不用自己装 CUDA,也不用申请配额。
git clone https://github.com/neonbjb/tortoise-tts.git && cd tortoise-tts - 02
建独立 conda 环境,避开依赖地雷
这是唯一会卡住人的一步。官方 requirements.txt 里锁了 transformers==4.31.0、deepspeed==0.8.3、pydantic==1.9.1、librosa==0.9.1、tornado==4.2 这一串老版本,直接装进系统环境几乎必然和你机器上别的东西打架。Python 3.9 独立环境是最省事的走法——别图省事复用 base。
conda create -n tortoise python=3.9 -y && conda activate tortoise && pip install "transformers==4.31.0" && pip install -e . - 03
跑通第一句,权重会自动下载
首次运行会从 HuggingFace 拉全套权重,八个文件合计约 4.6GB,落在 ~/.cache 下。--voice 可以填 tortoise/voices/ 里内置的三十个音色之一(tom、emma、freeman、geralt、applejack 等),或者填 random 让 RLG 现场采样一个不存在的说话人。要克隆自己的音色,就在 voices/ 下新建一个目录,扔进去几条几秒钟的干净 wav 即可,不需要训练。
python tortoise/do_tts.py --text "The quick brown fox jumps over the lazy dog." --voice tom --preset fast - 04
切到流式接口,把优化开关全打开
确认能出声之后就该换 api_fast 了:kv_cache 让 AR 采样不重复算前缀,half 走 fp16,use_deepspeed 上 DeepSpeed 推理内核。这三个开关是 0.25–0.3 RTF 和 500ms 首包的前提。要对外提供服务的话,仓库自带 tortoise/socket_server.py,起来就监听 5000 端口。
python -c "from tortoise.api_fast import TextToSpeech; tts = TextToSpeech(use_deepspeed=True, kv_cache=True, half=True)"
一本有声书要花多少钱
先用上游唯一给死的那个数字算:hifidecoder 路径 0.25–0.3 RTF。取上限 0.3,意思是生成 1 小时成品语音要占 0.3 个 GPU 小时。挂 RTX 3090 24GB,$0.193/卡·时 —— 1 小时音频就是 0.3 × 0.193 = $0.058。一本 9 小时的有声书是 2.7 GPU 小时,2.7 × 0.193 = $0.52。把首次拉 4.6GB 权重、建 conda 环境、跑通 do_tts.py 的调试时间算 2 小时,2 × 0.193 = $0.386,合计约 $0.91,一杯咖啡不到。 如果你要的是 Tortoise 真正出名的那种朗读质感,就得走完整扩散路径。standard 预设是 256 路候选加 200 步扩散,比 hifidecoder 慢一个数量级以上,具体倍数取决于句长和批量,强烈建议先拿自己的文本测三十秒再外推——这里按慢 10 倍(RTF 3)粗算:同样 9 小时有声书要 27 GPU 小时,换 RTX 4090 24GB $0.540/卡·时 = $14.58,睡一觉的事。 存储另算:4.6GB 权重按 $0.414/GB·月 的中位价是 $1.90/月。注意计费边界——实例一停,计算立刻停止计费;存储要等到你把盘销毁才停。所以合成完一批就把实例停掉,权重留着下次直接开机接着用,比每次重下 4.6GB 划算。全程按秒计量、按小时计价,没有起租时长,没有开通费,也不需要提配额工单。
04 —
