在使用Comfyui的ip引流功能时,提示我系统在进行注意力机制计算时,query、key和value这三个张量的数据类型不匹配。具体来说,query的数据类型是 float32(PyTorch 中的 torch.float32),而 key 和 value 的数据类型是 float16(PyTorch 中的 torch.float16 或 c10::Half)。
解决方法:
在谷歌上搜索了相关的帖子,发现都是webui有关问题的解决方法,即找到相关文件位置,将key和value改成与query相同类型的数值。
参考链接:IP-Adapter报错终极解决办法,MAC电脑也可以快乐的使用IP-Adapter实操练习了 - 哔哩哔哩
于是,我查看ipadapter安装包的相关文件以及报错位置(ComfyUI/custom_nodes/ComfyUI_IPAdapter_plus/CrossAttentionPatch.py),修改相关q、k、v的类型。
将
out_ip = optimized_attention(q, ip_k, ip_v, extra_options["n_heads"])
修改为
out_ip = optimized_attention(q.to(dtype=torch.float32), ip_k.to(dtype=torch.float32), ip_v.to(dtype=torch.float32), extra_options["n_heads"])
即解决了报错。
实现效果: