在Windows环境下使用AMD显卡运行Stable Diffusion
在Windows环境下使用AMD显卡运行Stable Diffusion
在Windows环境下使用AMD显卡运行Stable Diffusion是一个具有挑战性的任务,但通过社区的努力,现在已经有多种方案可以实现这一目标。本文将详细介绍如何通过DirectML和ZLUDA等技术方案,在Windows环境下使用AMD显卡运行Stable Diffusion,让AMD用户也能享受到AI绘画的乐趣。
CUDA
CUDA是NVIDIA推出的并行计算平台和编程模型,它可以让开发者对GPU进行编程,然后在NVIDIA的GPU上运行,这样就可以充分利用GPU的并行计算能力。CUDA是NVIDIA的专利技术,因此AMD显卡无法使用CUDA。由于CUDA的推出时间较早,其生态系统也更加完善,很多库和框架都是基于CUDA的,比如TensorFlow、PyTorch等。
当下热门的AI绘画工具Stable Diffusion需要用到PyTorch,如果AMD显卡能够支持PyTorch,那么就可以运行Stable Diffusion。
Linux
在Linux环境下,AMD显卡是可以运行PyTorch的,而且AMD也推出了ROCm,这是一个开源的并行计算平台,可以让AMD显卡运行PyTorch。但是,在Windows环境下,ROCm并不支持PyTorch,因此需要寻找其他解决方案。
DirectML
2023年,社区开发了pytorch-directml项目,这是一个PyTorch的后端,可以让PyTorch在Windows环境下使用DirectML运行。DirectML是微软推出的一个机器学习加速库,可以让PyTorch在Windows环境下使用AMD显卡运行。
通过链接跳转到对应项目,发现名称已经变了——lshqqytiger/stable-diffusion-webui-amdgpu,这个项目早期应该是叫做stable-diffusion-webui-directml,可以看出现在并不仅限于使用pytorch-directml,后面我们会提到。
下图是GPU-Z的截图,可以看到显卡对DirectML以及CUDA的支持情况,虽然本文一直说的是AMD显卡,但实际上Intel的显卡也有一部分支持DirectML,理论上也是可以使用这个方案的,不过案例较少,没有了解,这里不详细说明了。
ROCm
AMD ROCm是一个开放式软件栈,包含多种驱动程序、开发工具和API,可为从底层内核到最终用户应用的GPU编程提供助力。ROCm已针对生成式AI和HPC应用进行了优化,并且能够帮助轻松迁移现有代码。定位应该和CUDA类似,这个只要到官网下载安装就行了,目前的Stable Diffusion应该是只能使用5.7版本的,下载包命名的时间是23年Q4。
PyTorch
PyTorch是一种用于构建深度学习模型的功能完备框架,是一种通常用于图像识别和语言处理等应用程序的机器学习。使用Python编写,因此对于大多数机器学习开发者而言,学习和使用起来相对简单。PyTorch的独特之处在于,它完全支持GPU,并且使用反向模式自动微分技术,因此可以动态修改计算图形。这使其成为快速实验和原型设计的常用选择。
如果使用DirectML方案,那么就需要安装pytorch_directml:
pip install torch-directml
Python
Python的版本管理非常重要,可以使用Conda来创建虚拟环境,这样可以在不同的项目中使用不同的Python版本。如果不是经常用到Python开发的话,使用MiniConda就可以,这个是一个轻量级的Conda,只包含了最基本的功能,不会占用太多空间。
- 下载安装
latest-miniconda-installer-links - 创建虚拟环境
上面的DirectML方案中,Wiki有提到推荐Python 3.10.6
# 创建虚拟环境
conda create -n pytdml python=3.10.6
# 第一次使用需要初始化
conda init
# 激活虚拟环境
conda activate pytdml
# 安装pytorch_directml
pip install torch-directml
参考资料:
在Windows上通过DirectML启用PyTorch
ZLUDA
ZLUDA是NVIDIA GPU上CUDA的替代方案。ZLUDA允许使用非NVIDIA GPU运行未修改的CUDA应用程序,具有接近原生性能。理论上,只需安装好ROCm,然后直接使用CUDA版的pytorch,再用lshqqytiger编译的版本替换对应的CUDA dll文件,即可直接在Windows上运行。
lshqqytiger版本:https://github.com/lshqqytiger/ZLUDA
另外,webui推荐SD.NEXTautomatic,这个版本对AMD显卡支持更好,我最后是用这个版本跑起来的。运行webui.bat,默认启动在7860端口,第一次启动要编译十几二十分钟,耐心等待,界面如下图:
我之前已经挂载过模型了,如果第一次进入可能会让你选择一个模型。加个提示词随便输出一张,尺寸最好不要太大,512×512就行,原因会在另一篇专门讲生成的文章里说:
可以看到GPU的占用已经上去了,说明此时已经是在用显卡进行计算了:
总结
- 安装ROCm
- 安装Python
- 安装PyTorch
- 安装ZLUDA(主要是配置环境变量)
- 替换CUDA dll文件
- 运行webui(后来发现整合包好像可以自动处理PyTorch等,我这边已经装好了就没法验证)
这一篇主要还是记录一下自己的学习过程,后续在生成方面就打算直接用整合好的包了,功能更加全面,会比自己搭建的方便一些,这样能更集中精力在具体的生成上,而不是在环境上浪费太多时间。