![[Bug]: --gpu-device-id has no effect when used with --directml on an AMD GPU](https://www.chat-gpts.plus/wp-content/uploads/2026/06/4024-b3734cdf.jpg)
[Bug]: –gpu-device-id has no effect when used with –directml on an AMD GPU
快速结论:该问题发生于 Fooocus 在 Windows 平台使用 AMD GPU 并通过 `–directml` 参数启动时,试图用 `–gpu-device-id` 指定显卡但无效。实际原因是 `–directml` 需要使用其自身的参数传值方式(如 `–directml 1`),而非 `–gpu-device-id`。且仅检测到 1 GB VRAM 是因为 DirectML 设备的 VRAM 检测不准确,不代表 GPU 选错了。
问题场景
用户在 Windows 11 上运行 Fooocus 2.5.5 版本(原始报错环境),通过 `run.bat` 或命令行启动,系统同时具有 Intel 核显和 AMD 独立显卡(12 GB VRAM)。用户添加了 --directml --gpu-device-id 0 或 --gpu-device-id 1 参数,希望指定 AMD 显卡,但控制台日志始终显示“Total VRAM 1024 MB”(1 GB),且日志显示 `Set device to: 0`,用户因此认为仍在使用 Intel 核显。
报错原文
[System ARGV] ['Fooocus\\entry_with_update.py', '--directml', '--gpu-device-id', '0']
...
Set device to: 0
Using directml with device:
Total VRAM 1024 MB, total RAM 11703 MB
Device: privateuseone
原因分析
根据 Issue 评论中的自述解决方案,原因在于:对于 DirectML 后端,--gpu-device-id 参数根本不生效。DirectML 的设备选择需要通过 --directml [DIRECTML_DEVICE] 方式的传参来实现。例如,若想使用设备索引为 1 的 AMD 显卡,应使用 --directml 1 而非 --directml --gpu-device-id 1。另外,直接检测到 1 GB VRAM 是 DirectML 设备的 VRAM 检测逻辑问题(只检测了公用后端的默认显存大小),并不代表实际使用的设备错误。
可能原因:Fooocus 的 --gpu-device-id 参数设计上仅适用于 CUDA 后端,而未适配 DirectML 的设备选择逻辑。
环境排查
- Windows 11 操作系统
- Fooocus 版本:2.5.0 / 2.5.5(问题确认存在于当前版本)
- Python 版本:3.10.9(打包环境)
- AMD GPU,至少检测到 VRAM 12 GB(用户自述)
- 使用 DirectML 后端(
--directml参数) - 确认显卡设备 ID(例如在设备管理器中查看 AMD GPU 的索引号)
解决步骤
- 放弃使用
--gpu-device-id参数,该参数对 DirectML 无效。 - 改用
--directml [DIRECTML_DEVICE]格式:例如,如果你的 AMD 显卡设备 ID 为 1,则在命令行或run.bat中改用--directml 1。去掉--gpu-device-id参数。 - 确认设备 ID:可以通过设备管理器或 DirectML 相关工具确认 AMD 显卡对应哪个索引号(通常核显为 0,独显为 1)。如果只有一张独显,直接使用
--directml 0(若 0 为核显则尝试 1)。 - 启动后验证:检查日志中 VRAM 显示是否变化。如果仍显示 1 GB,这可能是正常的——DirectML 有时无法正确报告 VRAM,不等于使用了错误设备。此时应通过实际生成图片并观察性能(如生成速度比核显有明显提升)来判断是否切换成功。
- 可优先尝试:在 Fooocus 界面中打开设置,查看是否有 GPU 显存占用变化或额外日志确认。或通过任务管理器确认目标 GPU 的利用率是否上升。
验证方法
启动命令行中不再出现 --gpu-device-id,日志中显示 Set device to: [你指定的数字](该数字为 --directml 后的值)。然后使用一张中等尺寸图片生成,观察 AMD GPU 利用率(可在任务管理器中查看性能标签页下的 GPU 负载)是否明显增加,且总生成速度相对于核显有显著提升。如果 VRAM 仍然只显示 1 GB,说明 DirectML 显存检测不准确,但实际已使用 AMD GPU。



