跳到主要内容

零样本语音合成

F5-TTS 本地部署:335.8M 参数的零样本声音克隆,一张 24GB 卡跑通全流程

论文 arXiv:2410.06885,代码 MIT,权重 CC-BY-NC。fp32 权重只有 1.35GB,一段十秒参考音频就能克隆音色 —— 这页把显存、NFE、30 秒切块上限和微调 batch 一次讲透。

F5-TTS 出自上海交通大学 X-LANCE 实验室,是一套完全非自回归的零样本 TTS:Flow Matching 加 Diffusion Transformer,把文本用填充符补齐到与语音等长后直接去噪生成,不需要 duration model、不需要 text encoder、不需要音素对齐。相比它复现的 E2 TTS,F5-TTS 用 ConvNeXt V2 先精炼文本表示解决对齐难题,再用推理期的 Sway Sampling 策略(默认系数 -1.0)把质量和速度一起拉起来。当前主线基座是 2025 年 3 月发布的 F5-TTS v1 Base,Python 包 f5-tts 已经迭代到 1.1.22。

它值得自己部署的理由是「小」。F5-TTS Base 只有 335.8M 参数,DiT 22 层、16 头、1024/2048 维,配 4 层 ConvNeXt V2;HuggingFace 上的 model_1250000.safetensors 实测 1,348,435,761 字节,也就是 fp32 状态下 1.35GB。这个体量意味着一张消费级卡就能同时跑推理、微调甚至多路并发,而效果并不打折:Seed-TTS test-zh 上 WER 1.56%、SIM 0.76,中文指标比它自己的英文成绩(WER 1.83%、SIM 0.67)还漂亮,对中文配音、有声书、数字人口播这类场景相当友好。速度方面,论文自报 NFE 16 步时 RTF 0.15,官方 Triton + TensorRT-LLM 方案在单张 L20 上并发 2 时平均延迟 253ms、RTF 0.0394。

但坑也很具体,租卡前必须知道:单次生成有 30 秒硬上限,而且这 30 秒包含参考音频本身,所以参考音频建议控制在 12 秒以内并在结尾补静音;长文本靠 chunk_text 切块(默认 max_chars=135)再用 0.15 秒交叉淡化拼接,块边界的呼吸和语气容易听出来;大写字母会被逐字母朗读(K.F.C. 就是这么来的),正常发音必须写小写;最要命的是授权 —— 代码是 MIT,但因为训练用了 in-the-wild 的 Emilia 数据集,官方权重是 CC-BY-NC,商用需要自己换数据重训或微调。

01 —

F5-TTS 有哪些版本和权重

官方基座、声码器变体与社区多语种微调,参数量和落盘体积一次对齐

版本参数量显存上下文说明
F5-TTS v1 Base(model_1250000.safetensors)335.8Mfp32 权重 1.35GB/推理 8GB 卡有余24kHz 输出,单次 ≤30s(含参考音频)当前默认基座,2025-03-12 发布,Emilia 95K 中英数据,CLI 里 --model 的默认值,pinyin tokenizer,配 Vocos 声码器。新项目直接用它。
F5-TTS Base(model_1200000.safetensors)335.8Mfp32 权重 1.35GB24kHz 输出,单次 ≤30s2024-10 的初代基座。价值在于它是唯一带 BigVGAN 变体的版本(F5TTS_Base_bigvgan/model_1250000.pt),--vocoder_name bigvgan 只对它生效;追求音质上限时才回退到这条线。
E2 TTS Base333.2Mfp32 权重约 1.33GB24kHz 输出,单次 ≤30sFlat-UNet Transformer,24 层、16 头、1024/4096 维,是论文里对 E2 TTS 最接近的复现。收敛慢、鲁棒性弱,主要用来做对照实验,不建议上生产。
F5-TTS v1 Small(configs/F5TTS_v1_Small.yaml)158Mfp32 权重约 0.63GB24kHz 输出,char tokenizer官方只给训练配置(dim 768、depth 18、heads 12,LibriTTS_100_360_500,686 epochs),不发权重。想从零训一个轻量单语种模型、或显存吃紧时的起点。
社区多语种微调权重335.8M(Base 系)/158M(Small 系)与对应基座相同各语种 24kHzinfer/SHARED.md 已收录芬兰语、法语、德语、意大利语、日语、拉脱维亚语、俄语、西班牙语(218 小时)、印地语(SPRINGLab/F5-Hindi-24KHz,Small 系)、阿拉伯语(silma-ai,Small 系)等。CLI 支持 hf:// 直链加载。

02 —

F5-TTS 该租什么 GPU

按推理、在线服务、微调、预训练四档对号入座,价格是 NexGPU 每卡每小时挂牌价

  • 批量离线合成 / 单机推理验证

    RTX 3090 24GB$0.193/卡·时

    1.35GB 权重加 Vocos 声码器在 24GB 上几乎不占地方,Ampere 架构支持 fp16/bf16 与 flash attention,是跑通 F5-TTS 最便宜的现代卡。

  • 在线低延迟接口 / Triton + TensorRT-LLM 服务化

    RTX 4090 24GB$0.540/卡·时

    官方 253ms、RTF 0.0394 的基准跑在 L20 上,4090 是同代 Ada 架构里最接近的租用选择,适合把 NFE 压到 16 步做实时口播。

  • 微调自己的音色或换语种

    RTX A6000 48GB$0.817/卡·时

    仓库自带公式 batch_size_per_gpu = 38400 × (显存GB − 5) / 75,48GB 可开到约 22016 帧,比 24GB 卡的 9728 帧多一倍多,梯度更稳、收敛更快。

  • 从零预训练 / 大规模多语种重训

    A100 SXM4 80GB$1.088/卡·时

    论文原样配置就是 8 张 A100 80G、每卡 38400 帧、总 batch 307,200 帧、1.2M 更新,这条线是唯一能一比一复现的路径。

03 —

在 NexGPU 上把 F5-TTS 跑起来

从开机到第一段克隆语音,四步,命令都是官方仓库里的原话

  1. 01

    开一台带 CUDA 的实例并装环境

    在控制台选 RTX 3090 24GB 或 RTX 4090 24GB,用 2000+ 预置镜像里的 PyTorch 镜像开机,SSH 进去。F5-TTS 要求 Python ≥3.10(官方在 3.11 上测试),pip 包会带上 torch、torchaudio、vocos、x_transformers、torchdiffeq 等依赖。权重首次运行时自动从 HuggingFace 拉取,1.35GB,几十秒的事。

    conda create -n f5-tts python=3.11 -y && conda activate f5-tts && pip install f5-tts
  2. 02

    用 CLI 做第一次零样本克隆

    准备一段 12 秒以内的参考音频,结尾留一小段静音。ref_text 强烈建议手填 —— 留空会调 ASR 自动转写,转写一错音色就跑偏。把 nfe_step 从默认 32 降到 16,按论文 RTF 从 0.31 降到 0.15,WER 只从 2.42% 涨到 2.53%,几乎是白捡的一倍速度。中文注意不要写大写字母,会被逐字母念出来。

    f5-tts_infer-cli --model F5TTS_v1_Base --ref_audio ref.wav --ref_text "这是参考音频对应的文字。" --gen_text "要合成的目标文本。" --nfe_step 16
  3. 03

    起 Gradio 或 Docker 做交互调试

    f5-tts_infer-gradio 提供多音色、多风格和语音对话(背后接 Qwen2.5-3B-Instruct)。注意 1.1.21 才修掉 finetune Gradio 处理器里的路径穿越漏洞、并把 gradio 底线抬到 ≥6.15.0,所以务必升到最新版,且不要把微调 UI 直接裸奔在公网上 —— 用 SSH 端口转发到本地更稳妥。官方镜像同样可以一行拉起。

    docker run --rm -it --gpus=all -p 7860:7860 --mount 'type=volume,source=f5-tts,target=/root/.cache/huggingface/hub/' ghcr.io/swivid/f5-tts:main
  4. 04

    微调成自己的音色,或换成 Triton 服务化

    微调走 accelerate,batch_size_per_gpu 按显存算:24GB 卡约 9728 帧,48GB 约 22016 帧(德语社区微调实际用的是 8000 帧 + bf16 混合精度,跑了 4.2M 步)。官方特别提醒:早期微调 checkpoint 上 use_ema=True 反而有害,用 finetune gradio 的选项或 load_model(..., use_ema=False) 关掉。要上线就切 Triton + TensorRT-LLM 那套。

    accelerate launch src/f5_tts/train/finetune_cli.py --exp_name F5TTS_v1_Base --dataset_name my_voice --batch_size_per_gpu 9728 --batch_size_type frame --learning_rate 1e-5 --finetune

跑 F5-TTS 到底要花多少钱

按论文自报的 NFE 16 步 RTF 0.15 折算:生成 1 分钟成品音频约占 9 秒 GPU 时间。① 批量配音:1000 条 15 秒短句 = 15000 秒 = 4.17 小时音频,4.17 × 0.15 = 0.63 GPU 小时;挂在 RTX 3090 24GB($0.193/卡·时)上是 0.63 × 0.193 = $0.12,换 RTX 4090($0.540/卡·时)也只要 0.63 × 0.540 = $0.34。② 微调一个中文音色:RTX A6000 48GB $0.817/卡·时 连跑 24 小时 = $19.61;期间存 10 份 checkpoint,每份 1.35GB 共 13.5GB,按 $0.414/GB·月 放 3 天 = 13.5 × 0.414 × 0.1 = $0.56;把最终权重 1.35GB 拉回本地,出网 1.35 × $0.0081 = $0.01 —— 整轮不到 $21。③ 一比一复现论文预训练:8 × A100 SXM4 80GB = 8 × $1.088 = $8.704/时,论文说 1.2M 更新跑了一周多,168 × $8.704 = $1,462,这也是绝大多数团队只做微调的原因。计费按秒计量、按小时计价,没有起租门槛、没有开通费、不用申请配额;实例一停算力费就停,存储费则一直计到你销毁它为止。

04 —

常见问题

F5-TTS 本地部署到底需要多大显存?8GB 卡够不够?

够。F5-TTS v1 Base 是 335.8M 参数,官方 safetensors 落盘 1.35GB(fp32),加上 Vocos 声码器和 30 秒片段的激活,8GB 卡跑推理毫无压力,甚至笔记本级别的卡也能出声。真正需要更大显存的是微调和多路并发。想省钱又要留足余量,NexGPU 的 RTX 3090 24GB 是 $0.193/卡·时,比 Tesla T4 16GB 的 $0.298 还便宜,按秒计费,试完就停。

F5-TTS 合成长文本为什么有接缝、甚至时长不对?

两个原因。一是 30 秒硬上限(含参考音频),长文本必须走 chunk_text 切块,默认 max_chars=135,实际上限还会按参考音频时长动态收缩 —— 参考音频越长,单块能塞的文本越短,所以参考音频务必控制在 12 秒内;块与块之间用 cross_fade_duration=0.15 交叉淡化,边界的呼吸和语气衔接就是这么来的。二是 1.1.22(2026-07-23)才修掉「多 chunk 时长被 N 倍放大」的分配 bug,老版本长文本会直接时长错乱,先 pip install -U f5-tts。在 NexGPU 上换个干净镜像重装只要几分钟。

F5-TTS 可以商用吗?授权怎么算?

代码和权重是两套授权:仓库代码 MIT,随便用;但官方预训练权重是 CC-BY-NC 非商用,原因写得很明白 —— 训练数据 Emilia 是 in-the-wild 采集的数据集。想商用,路径是拿可商用数据从 F5TTS_v1_Base 或 F5TTS_v1_Small 的配置自己训/微调,这正是很多团队租卡的直接动机。A100 SXM4 80GB $1.088/卡·时、单节点最多 14 张卡、单节点最大显存 2,152GB,够撑一次像样的重训。

F5-TTS 的中文效果怎么样?比英文强吗?

中文确实是它的强项。Seed-TTS test-zh 上 WER 1.56%、SIM 0.76;同一套模型在 test-en 上是 WER 1.83%、SIM 0.67,中文的字准和音色相似度都更高。工程上它默认用 pinyin tokenizer,中文分词从 jieba 换成了更快的 rjieba,训练数据 Emilia 95K 本身就是中英双语。要注意标点和空格会被当作停顿信号,中文文案排版直接影响韵律。想验证就在 NexGPU 上开一台 RTX 3090,$0.193/卡·时,十几分钟能试完一整批文案。

微调 F5-TTS 时 batch_size_per_gpu 该开多大?要几张卡?

仓库的 finetune_gradio 里直接写了公式:batch_size_per_gpu = 38400 × (显存GB − 5) / 75。代入就是 24GB 卡约 9728 帧、48GB 约 22016 帧、80GB 正好 38400 帧(也就是官方 F5TTS_v1_Base.yaml 里的值,对应 8 卡 A100 80G 总 307,200 帧)。真实参照:德语社区微调用的是 8000 帧 + bf16,跑了 4.2M 步、40 epochs。单卡微调推荐 NexGPU 的 RTX A6000 48GB $0.817/卡·时;预算紧就用 RTX 4090 24GB $0.540/卡·时,把 batch 降到 8000 左右并配 grad accumulation。

F5-TTS 是不是已经被更新的模型取代了?现在还值得部署吗?

要说清楚现状:官方基座权重停在 2025-03-12 的 v1 Base,之后没有新基座;但代码侧一直在动,PyPI 上 1.1.22 是 2026-07-23 发的,近期还加了 MMDiT flash attention、fused AdamW、MMDiT 梯度检查点、语音编辑边界瑕疵修复。它今天的位置很清晰 —— 参数最小、微调门槛最低、社区多语种权重最全的那一档,芬兰语、法语、德语、意大利语、日语、拉脱维亚语、俄语、西班牙语、印地语、阿拉伯语都有现成微调。想横向比一比再决定,NexGPU 有 75 种 GPU 型号、1,175 个已验证可租节点、覆盖 51 个国家和地区,PyTorch、vLLM、Whisper ASR 等 2000+ 预置镜像开箱即用,Telegram 上有中英双语支持、不用排工单。控制台在 console.nexgpu.net。

开始使用 NexGPU

无论你是企业研发团队还是独立开发者,都可以在几分钟内跑起第一个任务。

注册即可浏览全网实时价格,无需绑定支付方式。