跳到主要内容

语音合成模型

Kokoro TTS 本地部署,一张便宜卡、4GB 显存、几十倍实时

Kokoro-82M 是目前最小的一线开源 TTS:8200 万参数、Apache 2.0 权重、24kHz 输出、54 个音色覆盖 9 个语言码。它不需要 A100,它需要的是一张便宜、能随时开关的卡。

Kokoro 由 hexgrad(Discord 上的 @rzvzn)训练发布,架构是 StyleTTS 2 加 ISTFTNet,只放出解码器,没有扩散过程。主线权重 v1.0 在 2025 年 1 月定版,SHA256 前缀 496dba11,此后 pip 包走到 0.9.4 就基本稳定下来,不再是那种每两周换一次调用方式的项目。整个 v1.0 训练只烧掉约 500 个 A100 80GB 卡时,语料是几百小时的公有领域音频、Apache/MIT 授权音频,外加闭源商用 TTS 的合成数据——这也是它敢把权重挂成 Apache 2.0 的底气。

参数量 8200 万意味着 fp32 权重只有 326MB,ONNX int8 量化之后 86MB。真跑起来把 PyTorch 和 CUDA 上下文一起算进去,单实例常驻显存是 2.37GB 到 3.98GB——这是 Kokoro-FastAPI 在 4060Ti 16GB 上跑《时间机器》全书测出来的区间,不是估算。于是一张 24GB 的卡可以同时塞下 Kokoro、一个 Whisper ASR 和一个 7B 对话模型,这在 XTTS、F5-TTS 那类模型上是奢望。同一块 4060Ti 上的实时率是 35 到 100 倍,流式首包约 300ms,吞吐约 138 tokens/s。

代价也要说清楚。Kokoro 不做音色克隆:音色是 54 个训练好的 style 向量,每个 .pt 文件 523KB,正好是一张 510×256 的 fp32 查找表;你可以按权重混合它们,但没有 encoder 权重,就没法用三十秒录音造一个新说话人。语言是另一条硬边界,目前只有美式/英式英语、西班牙语、法语、印地语、意大利语、日语、巴西葡语和中文,德语、俄语、土耳其语、越南语的请求帖在仓库里挂了一年多,最热的德语线程 77 条回复仍然没有权重落地。这两点想清楚,剩下的就只是挑一张够便宜的卡。

01 —

现在能下到的 Kokoro 版本

主线只有一条,部署形态有四种,量化文件之间差了将近 4 倍体积

版本参数量显存上下文说明
hexgrad/Kokoro-82M v1.082Mfp32 权重 326MB / 单实例常驻 2.4–4.0GB510 音素 token / 段主线权重,2025 年 1 月定版后一直没变。54 个音色、9 个语言码(a/b/e/f/h/i/j/p/z),固定 24kHz 单声道输出。新项目从这里开始,别绕路。
hexgrad/Kokoro-82M-v1.1-zh82M与 v1.0 完全一致,显存占用无差别510 音素 token / 段中文强化分支。LongMaoData 无偿提供 100 小时专业中文录音,只花了 120 个 A100 卡时。约 103 个音色,但砍掉了 v1.0 的大量英文音色,官方原话是“不是严格意义上的升级”。做纯中文播报值得一试。
onnx-community/Kokoro-82M-v1.0-ONNX82Mfp16 163MB / int8 92.4MB / q8f16 86MB510 音素 token / 段社区官方 ONNX 导出,八种精度并存:fp32 326MB、q4f16 155MB、uint8 177MB、uint8f16 114MB。CPU 推理、浏览器 WASM、边缘盒子走这条线。注意 DirectML 执行器目前仍有已知报错。
kokoro-onnx(thewh1teagle)82Mkokoro-v1.0.onnx 约 300MB + voices-v1.0.bin510 音素 token / 段MIT 许可的极简 Python 封装,两个文件即可运行,Apple Silicon 上接近实时。不想在容器里装 torch 全家桶时用它最省事。
Kokoro v0.19 / hexgrad/kLegacy82M同架构,无独立优化510 音素 token / 段misaki G2P 之前的老版本,归档在 kLegacy 仓库。音色命名和调用接口都与 v1.0 不兼容,只有维护存量项目才需要碰它。

02 —

该租哪张卡

Kokoro 的瓶颈从来不是显存,而是你要多低的首包延迟、多高的并发

  • 常驻一个 OpenAI 兼容的 TTS 服务

    RTX 3090 24GB$0.193/卡·时

    单实例封顶吃 4GB,24GB 意味着同一张卡可以并排开六七个 worker,或者顺手把 Whisper ASR 一起挂上去。

  • 实时对话流式播报,首包越快越好

    RTX 4090 24GB$0.540/卡·时

    小模型的单流延迟吃时钟频率和访存带宽,不吃张量算力;400 字符分块下首包稳定在 300ms 量级。

  • 有声书、播客、课件的批量离线合成

    Tesla T4 16GB$0.298/卡·时

    跑批不在乎延迟,16GB 显存对一个 82M 模型是奢侈;按秒计费,跑完就停,一整部书的账单是几分钱。

  • 复现官方训练或做社区微调实验

    A100 PCIE 80GB$0.824/卡·时

    v1.1-zh 只用了 120 个 A100 80GB 卡时,v1.0 约 500 个——这是极少数你真能提前算清预算的 TTS 训练。

03 —

四步跑起来

espeak-ng 那一步是九成人卡住的地方,先把它装上

  1. 01

    开一张 3090,确认 CUDA 通了

    控制台选 PyTorch 预置镜像开机,SSH、Jupyter 或 Web 终端进去都行。Kokoro 对 torch 版本不挑,但 Python 必须在 3.10 到 3.12 之间——kokoro 包的 requires-python 写死了 >=3.10,<3.13,3.13 的环境会直接装不上。

    python -c "import sys, torch; print(sys.version, torch.__version__, torch.cuda.is_available())"
  2. 02

    装 espeak-ng,再装 kokoro

    misaki 负责 G2P,遇到词表外的词会回落到 espeak-ng,所以这是硬依赖而不是可选项,缺了它启动就报错。中文额外需要 misaki[zh](pypinyin + jieba),日文是 misaki[ja]。Windows 上还得装 .msi 并配 PHONEMIZER_ESPEAK_LIBRARY,这也是直接租一台 Linux 卡机更省事的原因。

    apt-get update && apt-get install -y espeak-ng && pip install "kokoro>=0.9.4" "misaki[zh]" soundfile
  3. 03

    合成第一段中文

    KPipeline 按 lang_code 决定 G2P 后端,voice 必须和语言码对上:语言码 z 要配 zf_/zm_ 开头的音色,混用会得到一段听得懂但口音很怪的音频。返回的是生成器,逐段吐出字素、音素和 24kHz 波形。想换成中文强化分支,构造时加 repo_id='hexgrad/Kokoro-82M-v1.1-zh' 即可。

    python -c "from kokoro import KPipeline; import soundfile as sf; p=KPipeline(lang_code='z'); [sf.write(f'out{i}.wav', a, 24000) for i,(g,ps,a) in enumerate(p('本地部署一个语音合成模型,其实没有想象中那么贵。', voice='zf_xiaoxiao'))]"
  4. 04

    换成 HTTP 服务,接进现有代码

    Kokoro-FastAPI 把它包成 OpenAI 的 /v1/audio/speech,现有 SDK 改个 base_url 就能用,另外还给了 /v1/audio/voices/combine 做音色混合,写法是 af_bella(2)+af_sky(1) 这种加权比例。默认镜像是 CUDA 12.6;如果你开的是 RTX 5090,要换成 latest-cu128 那个 tag。文本归一化偶尔会吃掉短语,遇到就在请求里传 normalization_options.normalize=false 关掉。

    docker run --gpus all -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-gpu:latest

一部有声书要多少钱

按 Kokoro-FastAPI 在 4060Ti 上实测的 35–100 倍实时率,保守取 30 倍:一部 10 小时的有声书,纯合成需要 10 ÷ 30 = 0.34 卡时。RTX 3090 24GB 按 $0.193/卡·时 算,0.34 × 0.193 ≈ $0.066;加上拉镜像和下 327MB 权重的五分钟(0.08 卡时 ≈ $0.016),整单不到 $0.09。换成常驻服务:一张 3090 跑满一个月是 24 × 30 × 0.193 = $138.96,而计费按秒走,夜里停机算力费立刻归零,只剩存储按 $0.414/GB·月 继续计——Kokoro 权重加全部音色不到 400MB,那部分每月约 $0.17。想复现官方训练同样算得清:v1.1-zh 的 120 个 A100 卡时,在 A100 PCIE 80GB $0.824/卡·时 上就是 120 × 0.824 = $98.88;v1.0 的 500 卡时是 500 × 0.824 = $412。没有开通费,没有最低消费,没有配额申请。

04 —

常见问题

Kokoro TTS 本地部署到底需要多大显存?

PyTorch 路线下单实例常驻 2.37GB 到 3.98GB,长文本连续合成时会走到上限;权重本身 fp32 才 326MB,剩下全是 CUDA 上下文和激活。也就是说 8GB 卡绰绰有余,16GB 卡可以并排开好几个 worker。在 NexGPU 上最划算的落点是 RTX 3090 24GB,$0.193/卡·时,按秒计费,试完就停。

Kokoro 能像 GPT-SoVITS 那样用几十秒录音克隆音色吗?

不能。Kokoro 只发布了 decoder,encoder 权重没有放出,音色是 54 个预训练好的 style 向量,每个 .pt 文件 523KB,正好是 510×256 的 fp32 张量。你可以按权重混合两个音色得到新的听感,但要造一个全新说话人必须重新训练。真想走这条路,A100 PCIE 80GB $0.824/卡·时 按秒计费,跑完就停,比自己买卡现实得多。

Kokoro 支持德语、俄语吗?中文效果怎么样?

德语、俄语、土耳其语、越南语都没有官方权重,仓库里的德语请求帖攒了 77 条回复也没等来结果。中文有两条路:v1.0 自带 8 个中文音色(zf_xiaobei、zf_xiaoxiao、zf_xiaoni、zm_yunxi 等),装 misaki[zh] 走 pypinyin 转音素;追求质量就换 Kokoro-82M-v1.1-zh,它用 100 小时专业中文录音训过。两者显存占用完全一样,在 NexGPU 上开一张卡把两个都试一遍,成本是几毛钱的事。

为什么长文本合成会被截断或者读串?

Kokoro 对每段的音素序列有 510 token 硬上限,超了会打出 “Phoneme string too long” 然后截断。这个数字不是随便定的——音色向量本身就是 510 行的查找表,超过就没得查。KPipeline 默认按换行符切分(split_pattern=r'\n+'),英文会在 .!?…:;,— 上做瀑布式回退断句,其他语言按约 400 字符切。所以长文务必自己先分段,别指望它替你处理整本书。分好段之后,跑批就是 NexGPU 上一张 Tesla T4 16GB $0.298/卡·时 的事。

跑 Kokoro 有必要租 H100 吗?

没必要,而且是纯浪费。8200 万参数的模型在 H100 SXM 80GB($3.582/卡·时)上并不会比 RTX 4090($0.540/卡·时)快十倍——小模型的瓶颈在 G2P、Python 调度和逐段串行,不在张量算力,何况 Kokoro 本身也没有原生 batching。正确做法是租便宜卡、横向开多实例。NexGPU 单节点最多 14 张卡,2,498 张卡分布在 51 个国家和地区的 1,175 个可租节点上,横向扩比纵向升级划算得多。

在 NexGPU 上从开机到出第一段音频要多久?

选一个 PyTorch 预置镜像开机(2,000 多个镜像里直接挑,vLLM、ComfyUI、Whisper ASR 也都在),apt 装 espeak-ng、pip 装 kokoro,首次调用时从 Hugging Face 拉 327MB 权重,正常五分钟以内出声。想更省事就直接 docker run 那个 Kokoro-FastAPI 的 GPU 镜像,8880 端口起来就是 OpenAI 兼容接口。SSH、Jupyter、Web 终端、REST API、CLI 都开放,没有配额申请、没有开通费,Telegram 上中英文都有人实时应答。

开始使用 NexGPU

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

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