让 MSST-WebUI 支持 Intel Arc 系列显卡(A750/A770/B580 等)进行音乐源分离推理。
- Intel Arc A 系列(A310/A380/A580/A750/A770)
- Intel Arc B 系列(B570/B580)
- Intel Core Ultra 集成显卡(Meteor Lake / Lunar Lake / Arrow Lake-H)
| 项目 | 要求 |
|---|---|
| 操作系统 | Windows 10/11 |
| Python | 3.9 ~ 3.12 |
| GPU 驱动 | Intel Arc & Iris Xe Graphics WHQL |
| Visual C++ Redistributable | 最新版 |
在 MSST-WebUI 已有的 conda/pip 环境中,卸载原有 CUDA 版 torch 后安装 XPU 版本。
pip uninstall torch torchvision torchaudio -y
pip install torch==2.7.0 torchvision==0.22.0 torchaudio==2.7.0 --index-url https://download.pytorch.org/whl/xpuPyTorch 2.5+ 已将 Intel GPU 支持合入主线,
torch.xpu开箱即用,无需额外安装 IPEX。
python -c "import torch; print(torch.xpu.is_available()); print(torch.xpu.get_device_name(0))"应输出 True 和显卡型号(如 Intel(R) Arc(TM) B580 Graphics)。
将本仓库中的以下文件复制到 MSST-WebUI 项目根目录:
xpu_patch.py # 核心垫片
run_xpu.py # 启动包装器
run_xpu.bat # Windows 双击启动脚本
# 命令行启动
python run_xpu.py # 标准 WebUI 模式
python run_xpu.py -p 8080 --debug # 透传参数
python run_xpu.py --webview # WebView GUI 模式
# 或双击 run_xpu.bat启动后日志中应看到:
Intel Arc XPU detected: 1 device(s)
XPU device 0: Intel(R) Arc(TM) B580 Graphics
All XPU patches applied successfully
然后在 WebUI 的设备选择下拉框中会看到 B580 作为可选设备,直接开始推理即可。
MSST-WebUI 原始代码仅支持 CUDA / MPS / CPU 三种设备。本垫片通过以下 5 层 monkey-patch 透明适配 XPU:
| 层 | 目标 | 解决的问题 |
|---|---|---|
| AMP 重定向 | torch.amp.autocast("cuda") → "xpu" |
bs_roformer / mel_band_roformer 等模型的 autocast 硬编码 |
| CUDA 代理 | torch.cuda.is_available() 等 → XPU |
启动设备检测 + VR 模型的 empty_cache |
| MSSeparator | __init__ + del_cache |
MSST 推理分离器的设备选择和缓存清理 |
| VRSeparator | setup_torch_device + del_cache |
VR 推理分离器的设备选择和缓存清理 |
| Spawn 注入 | multiprocessing.spawn.get_command_line |
推理运行在子进程,spawn 模式不继承 monkey-patch |
关键设计点:
- 零文件写入:所有 patch 均为运行时内存替换,不修改 MSST-WebUI 任何源文件
- 零环境持久化:通过注入
get_command_line修改子进程-c参数实现跨进程传播,不需.pth文件 - CUDA 优先:若检测到真实的 NVIDIA CUDA GPU,垫片不激活,保持原始行为
_patched_init
├── device="xpu"
├── 临时还原 cuda.is_available() → 原始 init 以为无 GPU,模型加载到 CPU
├── 原始 init 完成
├── 恢复 CUDA 代理
├── self.device = "xpu:0"
└── model.to("xpu:0") ← 模型移到 XPU,此时 GPU 开始工作
注意:日志中出现的 No hardware acceleration could be configured, running in CPU mode 是预期行为——这是原始 init 在 "无 GPU" 假象下的中间状态日志,模型最终会被垫片移到 XPU 上。
Q: 日志显示 "Using device: cpu",但 GPU 在任务管理器中显示有负载?
A: "Using device: cpu" 是原始代码的中间状态日志。垫片在原始 init 完成后将模型移到 XPU,实际推理跑在 GPU 上。看任务管理器 GPU 负载即可确认。
Q: 启动时报 "No module named 'torch'"?
A: 确保使用安装了 XPU 版 PyTorch 的 Python 环境启动。
Q: import xpu_patch 后无任何输出,WebUI 中也没有 XPU 设备?
A: 检查 torch.xpu.is_available() 是否为 True。可能原因:驱动未安装、PyTorch 不是 XPU 版、或同时有 NVIDIA GPU(此时垫片不激活,CUDA 优先)。
Q: 推理时报 "TypeError: 'NoneType' object is not subscriptable"?
A: 请确保使用最新版 xpu_patch.py,该问题已在 inference_params 参数传递中修复。