在启动Stable Diffusion时一直报Torch not compiled with CUDA enabled警告,一开始没在意本着能用就行的态度凑活用,每个图都耗时十多秒,然后本着好奇Torch not compiled with CUDA enabled这个警告去搜索解决方案,都没说这个警告解决了有什么用,并且网上资料东拼西凑根本不能解决问题,本着专研解决问题的心态花一晚上解决这个警告,并将计算速度提高了十倍基本4G的模型2秒能出图。
在这发一个推广:GitHub - stablediffusion-website-online: stable diffusionAI绘画 AI画图生成平台,适合自己开绘画平台网站,包含图片生成及图片浏览
出现这个问题是两个方面一是的确显存不足
本地环境:windows11 13900k 32G Nvidia 3080ti
当前显卡驱动版本:
注意上面的CUDA12.0.147不一定要和CUDA Toolkit 版本一样,但是CUDA Toolkit一定要和pytorch中版本一样
我没用conda太麻烦了,直接裸装到本地python环境速度还快,下面是步骤:
正式开始
首先要安装cuda_11.6.0_511.23_windows.exe 这个版本必须要和pytorch官网对应(其实不一定非要安装最新的cuda老的也可以的只要版本对上),然后安装pytorch可以从官网或者本地,如果安装过程中出现以来报错,可以检查手动安装依赖再重新安装
网盘地址:
我用夸克网盘分享了「cuda驱动」,
链接:夸克网盘分享
关于CUDA Toolkit 与你的显卡驱动版本对应关系可以参考这个文档,他都是大于等于也就是说你的cuda老版本也没关系 CUDA 12.2 Release Notes 可以如上图看显卡版本或者cmd命令行执行nvidia-smi查看
1.下载CUDA Toolkit
CUDA Toolkit 11.6 Downloads | NVIDIA Developer
cuda_11.6.0_511.23_windows.exe (全部下一步)
2.安装pytorch
Start Locally | PyTorch 参考地址
pip都是在cmd命令行安装如果没pip去baidu查一下python pip安装教程,python版本我这里是10.0
组合脚本(在线安装):
pip install protobuf==3.20.0 requests==2.28.2 torch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116
本地安装(可选)
下载地址:https://download.pytorch.org/whl/cu116/torch-1.13.1%2Bcu116-cp310-cp310-win_amd64.whl
pip install protobuf==3.20.0 requests==2.28.2 torch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 torch-1.13.1+cu116-cp310-cp310-win_amd64.whl
python命令行:
import torch
torch.cuda.is_available()
如果返回true表示安装成功
50步加了很多关键词才19秒不到
如果20步只要3秒,并且分辨率也高不会崩溃。
另外补充就是分辨率采样过高报错问题:
RuntimeError: CUDA out of memory. Tried to allocate 31.29 GiB(GPU 0; 12.00 GiB total capacity; 4.29 GiBlready allocated; 5.1l GiB free; 4.37 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF————————————————
解决思路作者地址:通过设置PYTORCH_CUDA_ALLOC_CONF中的max_split_size_mb解决Pytorch的显存碎片化导致的CUDA:Out Of Memory问题_梦音Yune的博客-CSDN博客
对于小显存我设置成
set PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:32 貌似也能解决问题,这个需要在启动bat里面加入一行就行了