You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Paperspace Ubuntu虚拟机部署带xformers的Stable Diffusion遇 dtype不匹配错误

解决Stable Diffusion中attn_mask与query dtype不匹配问题

问题核心是注意力掩码attn_mask的浮点类型与查询张量query的BFloat16类型不兼容,提供三种可行解决方法:

方法一:修改OpenCLIP的注意力掩码类型

找到路径/home/paperspace/anaconda3/envs/ldm/lib/python3.10/site-packages/open_clip/transformer.py,修改attention函数,在传入掩码前强制转换为与查询张量一致的类型:

def attention(self, q_x, k_x=None, v_x=None, attn_mask=None):
    if k_x is None:
        k_x = q_x
    if v_x is None:
        v_x = q_x
    # 添加类型转换代码
    if attn_mask is not None:
        attn_mask = attn_mask.to(q_x.dtype)
    return self.attn(
        q_x, k_x, v_x, need_weights=False, attn_mask=attn_mask
    )[0]

方法二:禁用自动混合精度运行

直接在生成命令中添加--no-half参数,强制模型使用float32精度运行,避免类型差异:

python scripts/txt2img.py --prompt "a professional photograph of an astronaut riding a horse" --ckpt model/768-v-ema.ckpt --config configs/stable-diffusion/v2-inference-v.yaml --H 768 --W 768 --no-half

方法三:修改PyTorch注意力函数(临时应急)

如果你之前已经修改了torch/nn/functional.py,可以在multi_head_attention_forward函数中,调用scaled_dot_product_attention前添加类型转换:

# 在attn_output = scaled_dot_product_attention(...)之前添加
if attn_mask is not None:
    attn_mask = attn_mask.to(q.dtype)

额外提示:检查xformers与PyTorch版本兼容性,你当前用的PyTorch 11.7建议搭配xformers 0.0.17或0.0.18版本,避免版本冲突引发异常。

内容的提问来源于stack exchange,提问作者rhJura

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 13:22:15