[Bug]: –gpu-device-id has no effect when used with –directml on an AMD GPU

在 AMD 显卡上使用 --directml 时, --gpu-device-id 不会切换 DirectML 设备,Fooocus 仍可能继续使用核显或 0 号设备。优先检查你是否把设备号写在了 --directml 后面,而不是依赖 --gpu-device-id 。

快速结论:在 AMD 显卡上使用 --directml 时,--gpu-device-id 不会切换 DirectML 设备,Fooocus 仍可能继续使用核显或 0 号设备。优先检查你是否把设备号写在了 --directml 后面,而不是依赖 --gpu-device-id。

适用环境:Fooocus 2.5.5;Windows 11;Python 3.10.9(python_embeded);AMD 独显 + Intel 核显;启动参数包含 --directml;本地运行,浏览器为 Chrome。

最快修复方案:Issue 中确认有效的做法是:使用 --directml 1 这种形式为 DirectML 指定设备编号,也就是把设备号直接写在 --directml 参数后面,而不是写 --gpu-device-id 1。

注意事项:该方案来自 Issue 作者自行验证,不是官方补丁;不同 Fooocus 封装版本、DirectML 版本或设备枚举顺序可能不同。设备编号需要按你本机的实际枚举结果尝试,不能照搬示例中的 0 或 1。

问题场景

用户在 Windows 11 上本地运行 Fooocus,机器同时有 Intel 核显和 AMD 独显。启动时在 run.bat 或命令行中加入 --directml 与 --gpu-device-id <编号>,希望让 Fooocus 使用 AMD 显卡,但控制台显示的总显存只有 1024 MB,明显对应核显而不是 12 GB 的 AMD 显卡。

报错原文

[Bug]: --gpu-device-id has no effect when used with --directml on an AMD GPU

Set device to: 0
Using directml with device:
Total VRAM 1024 MB, total RAM 11703 MB
Set vram state to: NORMAL_VRAM
Always offload VRAM
Device: privateuseone
VAE dtype: torch.float32

原因分析

Fooocus 的 --gpu-device-id 参数在该场景下没有作用到 DirectML 的设备选择上。根据 Issue 作者的最终确认,使用 --directml 时,设备编号应作为 --directml 自身的可选值传入,即 --directml [DIRECTML_DEVICE];单独的 --gpu-device-id 会被忽略或无法改变 DirectML 实际绑定的设备。

另外一个容易造成误判的点是:作者后来发现 Fooocus 实际已经在使用 AMD GPU,只是软件检测到的显存被错误显示为 1 GB,因此仅凭“Total VRAM 1024 MB”并不能完全断定跑在核显上。

环境排查

  • 确认启动参数中是否同时使用了 --directml 和 --gpu-device-id;如果是,改为把设备编号跟在 --directml 后面。
  • 确认 Fooocus 版本:Issue 中为 2.5.5。
  • 确认 Python 版本:Issue 中为 Python 3.10.9(python_embeded)。
  • 确认操作系统:Issue 中为 Windows 11。
  • 确认显卡组合:Intel 核显 + AMD 独显;AMD 独显实际显存为 12 GB。
  • 查看启动日志中的 [System ARGV],确认实际传入的参数顺序和值是否正确。
  • 如果仍怀疑设备未切换,可在任务管理器或 AMD 软件中观察运行 Fooocus 时哪块 GPU 有负载。

解决步骤

  1. 打开 run.bat 或你用来启动 Fooocus 的命令行脚本。
  2. 找到现有的 --directml 以及 --gpu-device-id <编号> 参数。
  3. 不要再依赖 --gpu-device-id 来切换 DirectML 设备。
  4. 将设备编号直接写在 --directml 后面。例如想使用 1 号设备,写成 --directml 1;想使用 0 号设备,写成 --directml 0。
  5. 保存并重新启动 Fooocus。
  6. 观察启动日志中的 [System ARGV],确认参数已变为类似 ['Fooocus\\entry_with_update.py', '--directml', '1'] 的形式。
  7. 如果显存显示仍然异常,不要只看 Fooocus 显示的 VRAM 数值,进一步用系统级 GPU 监控确认实际使用的显卡。

验证方法

重新启动后,检查日志中的 [System ARGV] 是否包含你指定的 --directml <编号>。同时打开任务管理器、AMD Radeon Software 或系统 GPU 监控,运行一次生成任务,确认 AMD 独显出现明显占用或显存占用上升。若 Fooocus 仍显示 1024 MB,但系统监控显示 AMD GPU 正在工作,则说明该显示值可能不可靠,应以实际 GPU 负载为准。

参考来源

lllyasviel/Fooocus #4024

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 25454

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注