Stable Diffusion 生成图片报错 NaN 并出现黑屏,通常是因为显存计算精度不足、插件兼容性冲突或硬件过热导致。最推荐的处理方向是关闭半精度计算、排查插件兼容性或检查硬件散热状态。
先说结论:NaN 报错本质是计算过程中产生了无效数值,导致图像数据丢失或硬件保护性黑屏。
- 先确认:控制台是否显示"A tensor with all NaNs was produced in Unet"或是否有过热警告。
- 先处理:添加启动参数
`--no-half`关闭半精度,或暂时禁用 ADetailer 等插件。 - 再验证:重新生成图片,观察控制台日志是否仍有 NaN 警告且图片是否正常显示。
命令速用版
在启动脚本中添加以下参数尝试绕过精度检查或强制全精度计算:
python3 launch.py `--xformers` `--disable-nan-check`python3 launch.py `--no-half`注意:使用`--disable-nan-check`后若不报错但图片仍为黑色,说明模型文件本身可能存在错误。
为什么会这样
核心原因是计算过程中产生了无效数值(NaN),导致图像数据丢失。
Stable Diffusion 默认使用半精度浮点数(float16)加速计算。部分显卡架构不支持半精度,或在复杂计算步骤(如 Unet 交叉注意力层)中数值超出范围变成 NaN。插件(如 ADetailer)在新版 WebUI 中可能存在兼容性冲突,批量生成时触发维度不匹配。硬件过热也会导致计算错误引发黑屏。
分步处理
步骤 1:检查控制台报错信息
查看终端日志,确认是否出现"A tensor with all NaNs was produced in Unet"字样。如果是批量生成时第一张图黑屏,可能是 TensorRT 维度匹配问题。
步骤 2:调整精度参数
在启动命令中加入`--no-half`参数,强制使用全精度计算。这会增加显存占用,但能避免半精度溢出。
步骤 3:排查插件兼容性
暂时禁用 AfterDetailer (ADetailer) 等后处理插件。若关闭插件后生成正常,说明是插件与当前 WebUI 版本不兼容。
步骤 4:检查硬件散热
若生成过程中电脑突然黑屏死机,检查显卡和 CPU 温度。笔记本散热相对较差,长时间跑图可能导致过热保护。
怎么验证是否生效
观察生成的图片是否全黑或噪点。查看控制台日志是否有 NaN 警告。监控硬件温度是否在安全范围内。生成一张 512x512 的图片,至少需要 4GB 以上的显存,若显存不足也会中途报错。
常见坑
使用`--disable-nan-check`参数可能掩盖问题但仍出黑图,此时建议更换模型文件。批量生成时第一张图黑屏可能是 CFG 处理逻辑导致的维度不匹配。显存规格选低了,可能一开始能启动,但一生成图片就报错。
常见问题
显卡支持半精度为什么还报错?
即使支持,特定模型步骤数值溢出也会产生 NaN。
关闭 NaN 检查后图片还是黑的怎么办?
说明模型文件或精度设置仍有问题,建议更换模型。
只有批量生成时报错吗?
某些插件如 ADetailer 仅在批量或多图处理时触发兼容性错误。
参考来源
- StableDiffusion 半精度报错全面解析:从原理到实战解决方案
- AfterDetailer 插件用户必看:Stable Diffusion 新版兼容性报错解决全流程
- stable-diffusion-AI 画图软件常见报错的解决方案
- 为什么我的 stable diffusion 在生成的时候会像这样突然黑屏?
- ComfyUI_TensorRT 项目中 NaN 值导致首张图像黑屏问题分析-CSDN 博客
- Stable-Diffusion-V1-5 环境问题排查:常见部署与调用错误解决方案
- Stable Diffusion 无法生成图片并 NaNs Unet 报错,如何解决?
- 跑图或用 StableDiffusion 时突然黑屏?这些方法帮你解决
- Stable-Diffusion-V1-5 故障排除指南:常见错误提示与解决方案