ChatTTS 中文文档 下载 App

ChatTTS CUDA out of memory——显存不足的完整解决方案

典型报错

RuntimeError: CUDA out of memory. Tried to allocate ... GPU 0 has a total capacity of ...

即时解决方案

方案一:减小批量大小

如果你用的是批量推理,把批量大小从 10 降到 1 或 2:

# 原来
texts = [text1, text2, ..., text20]
wavs = chat.infer(texts)

# 改成
wavs = chat.infer([text1])

方案二:清理显存

import torch
torch.cuda.empty_cache()

# 或者重启 Python 进程

重启 Python 进程比 empty_cache() 更彻底——empty_cache 只是释放 PyTorch 占用的缓存,其他进程(浏览器、IDE)的显存占用不受影响。

方案三:CPU 降级

chat.load(compile=False, device='cpu')

速度会慢 5~10 倍但一定能跑通。

方案四:释放其他 GPU 占用

检查一下 GPU 还被什么程序占用:

nvidia-smi

如果看到浏览器、视频播放器、其他 Python 进程占着显存,关掉它们再试。

根治方案

换更大显存的显卡

用云 GPU

不想本地买显卡的话可以租云 GPU:

平台价格(3060 12GB)备注
AutoDL约 0.5 元/小时国内主流
恒源云约 0.6 元/小时国内主流
Clore.ai$0.03~0.07/小时海外

降低输入长度

虽然 ChatTTS 单次可以处理长文本,但长文本推理的中间缓存占用更多显存。建议:

显存占用构成

成分说明
模型权重~1.2 GB(FP32)
中间缓存生成长度越长越大
CUDA context~0.5 GB
其他tokenizer、PyTorch runtime

批量推理时,中间缓存会随批量数线性增长——这是批量推理 OOM 的主要原因。