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

用户在 Windows 11 上运行 Fooocus 2.5.5 版本(原始报错环境),通过 `run.bat` 或命令行启动,系统同时具有 Intel 核显和 AMD 独立显卡(12 GB VRAM)。用户添加了 --directml --gpu-device-id 0 或 --gpu-devic

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

[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 的索引号)

解决步骤

  1. 放弃使用 --gpu-device-id 参数,该参数对 DirectML 无效。
  2. 改用 --directml [DIRECTML_DEVICE] 格式:例如,如果你的 AMD 显卡设备 ID 为 1,则在命令行或 run.bat 中改用 --directml 1。去掉 --gpu-device-id 参数。
  3. 确认设备 ID:可以通过设备管理器或 DirectML 相关工具确认 AMD 显卡对应哪个索引号(通常核显为 0,独显为 1)。如果只有一张独显,直接使用 --directml 0(若 0 为核显则尝试 1)。
  4. 启动后验证:检查日志中 VRAM 显示是否变化。如果仍显示 1 GB,这可能是正常的——DirectML 有时无法正确报告 VRAM,不等于使用了错误设备。此时应通过实际生成图片并观察性能(如生成速度比核显有明显提升)来判断是否切换成功。
  5. 可优先尝试:在 Fooocus 界面中打开设置,查看是否有 GPU 显存占用变化或额外日志确认。或通过任务管理器确认目标 GPU 的利用率是否上升。

验证方法

启动命令行中不再出现 --gpu-device-id,日志中显示 Set device to: [你指定的数字](该数字为 --directml 后的值)。然后使用一张中等尺寸图片生成,观察 AMD GPU 利用率(可在任务管理器中查看性能标签页下的 GPU 负载)是否明显增加,且总生成速度相对于核显有显著提升。如果 VRAM 仍然只显示 1 GB,说明 DirectML 显存检测不准确,但实际已使用 AMD GPU。

参考来源

lllyasviel/Fooocus #4024

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 8633

发表回复

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