这篇读完,你会在一台没有独立显卡的 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 协议,模型和代码都能自由使用。
如果觉得有帮助,点个「赞」和「在看」支持一下 👇
