DirectML / CoreML 设置后必须重启|GPU 加速初始化时机
为什么必须重启
OpenUtau 的 GPU 加速初始化流程:
OpenUtau 启动
↓
读取偏好设置 → Machine Learning Runner = DirectML / CoreML
↓
初始化 DirectML / CoreML 运行时
↓
枚举可用 GPU
↓
完成
这个流程只在启动时跑一次。运行中改偏好设置里的 GPU 相关参数:
- 切 DirectML → CoreML
- 切换 GPU(核显 ↔ 独显)
- 调 DiffSinger Rendering Speedup
这些都不会让 OpenUtau 重新初始化 GPU 加速——GPU 仍然是启动时初始化的那个状态,参数修改被忽略。
正确操作顺序
第一次设置 DirectML / CoreML
- OpenUtau 正常运行中
- Tools → Preferences → Machine Learning
- Machine Learning Runner → 选 DirectML(Windows)或 CoreML(macOS)
- GPU → 选独显(Windows)
- DiffSinger Rendering Speedup → 按需调
- 点 OK 关掉 Preferences
- 完全关掉 OpenUtau(不是关窗口,是进程退出)
- 重新打开 OpenUtau
- 偏好设置里的 GPU 名称应该还是你选的那个
运行中想换 GPU 或调高加速倍率
直接:
- Tools → Preferences → 改参数
- OK
- 关掉 OpenUtau
- 重开
就这么简单。
怎么确认 GPU 加速真的生效了
方法一:看偏好设置
重启后再打开 Preferences → Machine Learning:
- Machine Learning Runner 显示 DirectML / CoreML
- GPU 显示你选的独显名称(不是核显)
方法二:跑一个 DiffSinger 工程对比
用同一个工程:
- 关掉 DirectML / CoreML(Runner 选 CPU)→ 渲染 → 计时
- 开启 DirectML / CoreML → 重启 → 渲染 → 计时
- 对比两次时间
正常情况下 GPU 加速渲染时间应该是 CPU 版本的 1/3 ~ 1/20(取决于 GPU 型号和 DiffSinger 引擎)。
方法三:任务管理器观察
渲染 DiffSinger 时:
- Windows 任务管理器 → 详细信息 → OpenUtau.exe → GPU 列应该有数值(GPU 1 或 GPU 0)
- macOS 活动监视器 → OpenUtau → Energy 标签页里可以看到 GPU 活动
如果渲染时 GPU 列全 0 = 还是 CPU 渲染,GPU 加速没生效。回去检查是不是忘了重启。
为什么 OpenUtau 不支持热切换 GPU
GPU 加速初始化需要加载 GPU 驱动、分配显存、编译算子——这些都是重操作,OpenUtau 的架构设计决定了它只能在启动时做一次。这是性能和代码复杂度的折中——热切换 GPU 的收益小、实现成本极高。
偏好设置里其他需要重启的选项
除了 DirectML / CoreML,以下选项修改后也需要重启 OpenUtau:
| 选项 | 重启原因 |
|---|---|
| UI Language | Avalonia UI 的语言本地化在启动时加载 |
| Add / Remove Resamplers 路径 | Resamplers 目录扫描在启动时做 |
| Additional Singer Path | Singers 目录扫描在启动时做 |
| DiffSinger Rendering Speedup | 推理引擎初始化时读取 |
| Backups folder | 自动保存路径在启动时初始化 |
| Output Device (Audio) | 音频设备初始化在启动时做 |
修改后如果没重启,OpenUtau 可能继续用旧值,或者新值只在部分功能里生效——重启是最稳妥的方式。
常见坑
坑一:改了 DirectML 忘了重启 → 以为加速没生效
这是 OpenUtau 新用户最常踩的坑——改完 GPU 设置没重启,渲染时 GPU 还是 0,以为 DirectML 有 bug。关掉 OpenUtau 重开一下就好。
坑二:改完重采样器路径忘了重启
手动往 Resamplers 文件夹扔了新重采样器,齿轮图标下拉里没看到。重启 OpenUtau 让它重新扫描。
坑三:改 UI 语言没重启
看起来还是英文 / 中文,或者部分翻译没更新。重启后语言切换完全生效。