没独显也能跑语音克隆:Audio8 TTS 本地部署实录

没独显也能跑通0.6B语音克隆模型,全程不装PyTorch

没独显也能跑语音克隆:Audio8 TTS 本地部署实录 封面图

这篇读完,你会在一台没有独立显卡的 Windows 电脑上,跑起一个 0.6B 参数的语音克隆模型——输入一段几秒的参考音频,它就能用那个音色念你写的任何话。全程不装 PyTorch、不碰 Docker、不下 CUDA。

我手上这台是 Core Ultra 5 225H 的轻薄本,集显是 Intel Arc,没有 NVIDIA 卡。Audio8 TTS 这个开源项目官方推荐 CUDA GPU,理论上我这机器直接出局。但它留了一条 ONNX Runtime 的 CPU 后路,实测跑通了。下面是从零到能用的完整流程,以及我踩的三个坑。

本地部署概念图

先看清楚:三条路,只有一条能走

Audio8 TTS 官方给了三种部署方式,我先把不行的划掉,省得你白折腾。

路线依赖我这台机器
PyTorch 主推理CUDA GPU❌ 没 N 卡
SGLang Omni 服务PyTorch 2.9.1+cu128、fa3/FlashInfer❌ 这两个 kernel 只认 Hopper/Blackwell 数据中心卡
ONNX Runtime CPU纯 CPU,INT4 权重 + FP16 codec✅ 就是它

SGLang 那条路特别坑:它把 PyTorch 版本锁死在 2.9.1+cu128,还依赖 fa3 和 FlashInfer 两个注意力后端,这俩只在 H20、H100 这类数据中心卡上有编译好的 kernel。消费级显卡都没有对应镜像,更别说集显了。所以没 N 卡就别往那条路上撞。

剩下的 ONNX 路线把模型压到 INT4 权重 + FP16 编码器,纯 CPU 推理,总共 969 MB,运行时占内存约 1 GB。这是我唯一的选择,也是我实测跑通的选择。

部署:四步到能说话

第一步:拉代码

GitHub 直连大概率超时,走镜像:

ROOT=/d/Users/你/workspace/Audio8_TTS
git clone --depth 1 https://ghproxy.net/https://github.com/Edge0-AI/Audio8_TTS.git "$ROOT"
cd "$ROOT/onnx_runtime"

第二步:建一个干净的 Python 3.12 环境

用 uv 建独立环境,别污染系统 Python。注意必须 3.11 以上——依赖里钉死了 numpy==2.4.3,低版本装不上:

uv venv --python 3.12 .venv
PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple uv pip install -r requirements.txt
uv pip install --no-deps tokenizers==0.22.2

第三步:下模型(969 MB)

从 hf-mirror.com 镜像拉。这里有个坑:镜像对大文件会间歇性重置连接,我一开始用普通下载,fast_ar_int4.onnx.data 反复断。后来写了个带逐文件字节数校验 + 重试的下载器,把截断的文件变成"重下"而不是"假装成功"。

bash scripts/download_model.sh "D:/Users/你/workspace/Audio8_TTS/onnx_runtime/model"

下完核对一下,12 个文件、总计 969 MB 就对了。

第四步:起服务

bash run_server_win.sh      # 监听 127.0.0.1:8024

浏览器打开 http://127.0.0.1:8024 有个内置测试页。接口是 OpenAI 兼容的,直接这么调:

curl -X POST http://127.0.0.1:8024/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{"model":"arktts","input":"你好,这是一段测试。","voice":"sanmu"}' \
  -o out.wav

语音克隆工作流示意图

三个坑,一个比一个隐蔽

坑一:仓库自带的脚本是 Linux 专用

setup.sh、run_server.sh 这些脚本里写死了 .venv/bin/python——这是 Linux 的路径布局。Windows 的 venv 里解释器在 .venv/Scripts/python.exe。直接跑必崩。我另写了 run_server_win.sh 和 stop_server_win.sh 替代。

坑二:MSYS 路径会被原生程序误解析

这个最隐蔽。我用 git-bash,脚本里 pwd 拿到的是 /d/Users/... 这种 MSYS 风格路径。但 python.exe、uvicorn 是原生 Windows 程序,不认这种路径——它会把 /d/Users/... 理解成 D:\d\Users\...,然后报 FileNotFoundError。

修法很简单但必须知道:用 pwd -W 拿原生 D:/... 路径。同一个道理,curl -o 也得传 D:/...,传 /d/... 会写失败。

坑三:ONNX 路线不支持"无参考音频生成"

README 里宣传了"无参考音频生成"功能,我照着调直接 422 报错。翻代码才发现:这条路的 voice 字段是必填的,推理逻辑永远会去加载一个已注册的音色。那个"无参考生成"只在 SGLang 那条路上有。

所以用之前必须先注册一个音色:给一段 0.5–30 秒的参考音频(44.1kHz 单声道 wav 最佳),再配上这段音频的逐字文本。我用 edge-tts 合成了 5 秒参考音频,注册一次只花 4 秒。

curl -X POST http://127.0.0.1:8024/api/voices/register \
  -F "audio=@ref.wav" \
  -F "text=参考音频里实际说的话" \
  -F "name=sanmu"

实测成绩单

我这台机器(Core Ultra 5 225H,无独显,31.5 GB 内存)跑出来的真实数据:

指标实测值
模型体积969 MB
音色注册耗时~4 秒
运行时加载~3.5 秒
合成速度 RTF~1.9(5.76 秒音频用 10.7 秒生成)
内存占用~1 GB
输出质量44.1kHz 单声道,音量正常不破音

RTF 1.9 意味着生成比实时慢一倍左右——不是实时级别,但用来批量生成配音、做有声内容完全够用。这是纯 CPU 的成绩,没有用任何显卡加速。

总结

没独显不是跑不了语音克隆,只是得选对路线:

  • 别碰 CUDA 和 SGLang,那是给数据中心卡准备的
  • ONNX Runtime CPU 路线能跑,代价是速度慢一倍
  • 三个坑(Linux 脚本、MSYS 路径、必填音色)都绕过了就能用

整套流程我已经存成技能文档,下次换机器照着做就行。项目是 Apache 2.0 协议,模型和代码都能自由使用。


如果觉得有帮助,点个「赞」和「在看」支持一下 👇

← 返回文章列表