'BertModel' object has no attribute 'invert_attention_mask' 是一个典型的 Transformers 库版本不兼容 问题。
🔍 错误根因分析
- 代码层面:
ComfyUI_LayerStyle_Advance节点包内部集成了一个本地版的 GroundingDINO (local_groundingdino)。在其bertwarper.py第36行,代码试图直接访问bert_model.invert_attention_mask属性。 - 库版本冲突:
invert_attention_mask是 HuggingFacetransformers库中PreTrainedModel基类的一个方法。在较新的transformers版本(通常是 >= 4.36.0)中,该方法的实现方式或可见性发生了重构,导致旧版 GroundingDINO 代码无法通过__getattr__正确获取该属性。 - 结论:你当前 Miniconda 环境 (
comfyuicu126) 中的transformers版本太新,与ComfyUI_LayerStyle_Advance内置的老旧 GroundingDINO 代码产生了冲突。
🛠️ 解决方案(按推荐顺序执行)
方案一:降级 transformers 库(最快、最有效)
将transformers 降级到兼容版本即可立即修复此问题。打开你的 ComfyUI 启动命令行(确保激活了 comfyuicu126 环境),运行:
pip install transformers==4.35.2注:4.35.2 是 GroundingDINO 生态测试最稳定的版本。安装完成后重启 ComfyUI。
方案二:更新 ComfyUI_LayerStyle_Advance 节点
节点作者可能已经在新版中修复了此兼容性问题。- 打开 ComfyUI Manager。
- 点击 Update All 或找到
ComfyUI_LayerStyle_Advance单独更新。 - 重启 ComfyUI。
(如果更新后依然报同样的错,说明作者尚未修复,请退回使用方案一)
方案三:手动打补丁(仅限不想降级 transformers 的高级用户)
如果你因为其他节点必须使用最新版transformers,可以手动修改报错文件:
- 打开文件:
custom_nodes\ComfyUI_LayerStyle_Advance\py\local_groundingdino\models\GroundingDINO\bertwarper.py - 找到第 36 行:
pythonself.invert_attention_mask = bert_model.invert_attention_mask替换为带有兼容性检查的代码:
# 兼容新版 transformers (请确保此行前有8个空格)
if hasattr(bert_model, "invert_attention_mask"):
self.invert_attention_mask = bert_model.invert_attention_mask
else:
from transformers.modeling_utils import PreTrainedModel self.invert_attention_mask = lambda mask: PreTrainedModel.invert_attention_mask(bert_model, mask)
保存并重启 ComfyUI。
⚠️ 重要提醒
- 优先推荐方案一。GroundingDINO 对
transformers版本极其敏感,强行使用新版极易出现各种隐性 Bug。 - 降级
transformers不会影响 SAM 模型(sam_vit_h)的加载和运行,SAM 依赖的是torch和torchvision,与transformers解耦。 - 方案二,修改亲测有用