这个错误是什么问题?
运行stable duffusion出现这个错误
NansException: A tensor with all NaNs was produced in Unet. This could be either because there's not enough precision to represent the picture, or because your video card does not support half type. Try setting the "Upcast cross attention layer to float32" option in Settings > Stable Diffusion or using the --no-half commandline argument to fix this. Use --disable-nan-check commandline argument to disable this check
如何解决?
找到stable-diffusion-webui目录下的webui-user.bat文件,使用编辑器打开可以看见配置代码如下:
@echo off
set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS=
call webui.bat
添加--no-half --disable-nan-check参数修改如下:
@echo off
set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS=--no-half --disable-nan-check
call webui.bat
修改完成后重启stable-diffusion-webui即可
错误产生原因
这个错误提示是在Unet代码中产生了全部由NaN组成的张量。这可能有几个原因:
-
表示图像所需的精度不够:这意味着正在处理的图片可能包含非常小的值,这些值被舍入为零,从而导致NaN。要解决此问题,可以尝试增加计算中使用的精度。
-
视频卡不支持半精度类型:半精度是一种表示浮点数的格式,使用的位数比单精度少一半,可以节省内存和计算时间。如果你的视频卡不支持这种格式,可能会导致产生NaN。要解决此问题,可以尝试设置“将交叉关注层升级为float32”选项在设置>稳定扩散中,或者使用--no-half命令行参数来解决这个问题。使用--disable-nan-check命令行参数可以禁用此检查。
2023年7月5更新
又遇到这个问题了,使用以上的方法没有解决。猜测是模型不支持相应的提示词,附加两种方式解决:
1.修改提示词
2.更换模型
注意:本文归作者所有,未经作者允许,不得转载