TypeError: p = torch.backends.cuda.SDPAParams(q

这个报错发生在 ComfyUI 2220d111 提交之后、使用 AMD gfx1201 Windows 构建但未随 torch 附带 aotriton kernel 镜像文件时。优先排查 torch/lib/aotriton.images 目录是否存在,并通过修改 aotriton_support

快速结论:这个报错发生在 ComfyUI 2220d111 提交之后、使用 AMD gfx1201 Windows 构建但未随 torch 附带 aotriton kernel 镜像文件时。优先排查 torch/lib/aotriton.images 目录是否存在,并通过修改 aotriton_supported() 让其返回 False 来恢复旧行为。

适用环境:Windows + AMD gfx1201 (RX 9070 XT),ROCm 7.14,ComfyUI master 分支 2220d111 提交及之后版本;已确认该构建中 torch/lib/aotriton.images 目录不存在。

最快修复方案:将 ComfyUI 的 aotriton_supported() 函数修改为直接返回 False(Issue 确认的修复方案,可恢复 2220d111 之前行为并让工作流正常完成)。但注意:该修复方案尚未覆盖伴随的 FP8 支持行为变化。

注意事项:有 gfx1200 用户反馈简单返回 False 会破坏所有带 aotriton 镜像的 ROCm 环境;更稳妥的修复应保留旧的目录/架构存在性检查作为前置条件,再将探针叠加其上。同时,#2220d111 还顺带静默启用了受影响的 FP8 支持(对 gfx1201 无害,但属于附带行为变化)。当前尚无同时覆盖两种场景的合并修复版本。

问题场景

用户运行 ComfyUI master 分支(2220d111 或之后)加载 MiniMax H3 I2V 官方工作流(UNETLoader(minimax_h3_fl2va_pruned_int8_convrot.safetensors) + CLIPLoader(qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors) + MiniMaxH3ImageToVideo)。环境为 Windows + AMD gfx1201(RX 9070 XT),torch 为 ROCm 7.14 构建,但 torch/lib/aotriton.images 目录缺失。问题在文本编码阶段触发,Qwen3-VL vision tower 的 attention 首次调用即失败。

报错原文

TypeError: p = torch.backends.cuda.SDPAParams(q
torch.AcceleratorError: CUDA error: invalid argument
Search for `hipErrorInvalidValue' ...
[ERROR] !!! Exception during processing !!! CUDA error: invalid argument

原因分析

2220d111 前,aotriton_supported(gpu_arch) 通过 os.listdir 检查 torch/lib/aotriton.images。在该 Windows 构建中该目录不存在,os.listdir 抛出 FileNotFoundError,被外层 bare except: pass 吞掉,ENABLE_PYTORCH_ATTENTION 未被设置,flash attention 保持关闭,工作流正常运行。

2220d111 将实现改为探针方式:用 (1,1,8,64) fp16 连续张量调用 SDPAParams 并返回 True。在 gfx1201 + ROCm >= 7.0 时,此返回值导致 ENABLE_PYTORCH_ATTENTION = True 和 enable_flash_sdp(True) 执行。但实际调用点(Qwen3-VL vision tower,skip_reshape=True)使用 torch.split + transpose(0,1).unsqueeze(0) 产生的非连续视图,head_dim 也非 64,与探针形状不符。

可能原因:探针形状设计假设 True 结果同样可信,但实际代码依赖 True 的可信度时未覆盖真实调用场景。minimal repro 中 can_use_flash_attention 在无 kernel 镜像时返回 True,但 HIP 异步启动失败——缺失镜像只有在 kernel 启动时才异步报错,探针无法在启动前检测到。

有 gfx1200 数据点显示 head_dim 64/72/80/96/128 的连续与非连续布局在 kernel 实际存在时全部通过 OOK 测试,证明探针形状本身不是问题,而是构建缺少 kernel 镜像文件。gfx1201 在 aotriton 中已解除实验门控,无条件报告支持,因此无法通过现有 API 探测镜像缺失。

环境排查

  • 确认 ComfyUI 版本 >= 2220d111(master 分支提交)
  • 确认 CPU 架构为 AMD gfx1201(RX 9070 XT)
  • 确认 torch 为 ROCm 7.14 构建,执行 python 检查:import torch; print(torch.version.hip)
  • 执行 minimal repro 脚本,确认 os.path.isdir(torch/lib/aotriton.images) 返回 False
  • 确认 torch.backends.cuda.is_flash_attention_available() 返回 True
  • 确认环境变量 TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL 是否为 1(gfx1200 需要,gfx1201 不需要)

解决步骤

  1. 先确认问题来源:执行 python -c 检查 aotriton.images 是否存在并输出 can_use_flash_attention 结果;注意 TypeError 时 SDPAParams 参数需去掉最后布尔值
  2. 优先尝试(Issue 确认修复):修改 comfy/model_management.py 的 aotriton_supported() 使其返回 False,保存后完全重启 ComfyUI
  3. 若你也在排查 gfx1200 等仍处于实验门控的环境,可尝试将 TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL=1 加入环境变量再测试
  4. 更完整的等待官方修复:查阅 GitHub 上游是否已合并解决方案;建议让 aotriton_supported() 保留目录存在性作为前置检查,再叠加探针逻辑,且探针结果仅做参考(而非上传到“目录缺失”案例中)
  5. 检查 SUPPORT_FP8_OPS 是否被意外改变:若在意这种附带行为变化,可在崩溃临时修复中也纳入 FP8 开关审查
  6. 若使用自定义节点,可先禁用全部测试(Issue 已做);否则跳过此步
  7. 最终回归测试:重跑 MiniMax H3 I2V 官方工作流,确认文本编码不再报错

验证方法

重跑原始 MiniMax H3 I2V 工作流,确认 queue 完成且无 CUDA error / hipErrorInvalidValue 输出;也可以先复跑 minimal repro 并确认 can_use_flash_attention 返回 False(如果实施了返回 False 的补丁)或 torch/lib/aotriton.images 已包含正确 arch 内核(如果使用了正确 wheel)。若问题来自缺失内核,还需用真实节点确认文本编码全部跑完且无异步启动错误。

参考来源

Comfy-Org/ComfyUI #15647

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 22414

发表回复

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