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

自定义Pipeline调用SDXL遇TypeError:NoneType对象不可迭代求助

解决SDXL自定义Pipeline适配时的NoneType迭代报错

问题根源

你遇到的TypeError: argument of type 'NoneType' is not iterable,是因为SDXL的UNet要求必须传入包含text_embeds和time_ids的added_cond_kwargs字典,但你的自定义Pipeline里没有正确构造这个参数,导致它变成了None,代码判断"text_embeds" in added_cond_kwargs时自然报错。

具体修复步骤

  • 构造完整的text embeddings:SDXL需要同时处理正负prompt的embedding,要把两者拼接起来。参考官方逻辑,用text_encoder和text_encoder_2分别生成embedding,然后按维度拼接,最终得到text_embeds。
  • 生成time_ids参数:这个参数包含图像的目标尺寸、裁剪尺寸、缩放系数等信息,需要根据你的生成参数构造,格式示例:
    time_ids = torch.cat([
        torch.tensor([height]),
        torch.tensor([width]),
        torch.tensor([crop_height]),
        torch.tensor([crop_width]),
        torch.tensor([target_height]),
        torch.tensor([target_width]),
    ]).unsqueeze(0).to(device)
    
  • 确保added_cond_kwargs不为空:在调用UNet的forward方法时,显式传入构造好的字典:
    added_cond_kwargs = {"text_embeds": text_embeds, "time_ids": time_ids}
    unet_output = self.unet(
        sample,
        timestep,
        encoder_hidden_states=encoder_hidden_states,
        added_cond_kwargs=added_cond_kwargs,
        return_dict=return_dict,
    )
    
  • 检查参数传递链:从输入处理到UNet调用的每一步,确保added_cond_kwargs没有被意外置为None,所有依赖的参数(比如两个text encoder的输出、time_ids)都正确生成并传递。

额外注意

diffusers 0.18.2对SDXL的支持已经比较完善,但SDXL的UNet输入结构和SD 1.x/2.x差异很大,自定义Pipeline不能直接沿用旧逻辑,必须适配双text encoder、added_cond_kwargs这些新要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:32:10