我们提供安全,免费的手游软件下载!
我的电脑是21年配的,当时并没有AI相关的需求,并且由于各种原因,我选择了AMD的显卡。但是在今天的2024年,使用AI进行工作已经成为一种不再罕见的需求。我也希望尝试一下,但我发现AMD显卡在这方面却处处碰壁。通过研究,我发现尽管AMD显卡在AI方面的支持取得了很大进步,但由于历史原因,NVIDIA显卡在这方面的支持更加完善。因此,我想记录一下在Windows环境下使用AMD显卡运行AI程序的过程。
现在,这些步骤可以通过整合包来完成。只需搜索“绘世整合包”就能找到。这里只是记录一下学习过程,方便学习和查阅。
首先要说的是CUDA。不同于CPU,GPU的并行计算能力更强。CUDA是NVIDIA推出的并行计算平台和编程模型,它可以让开发者对GPU进行编程,然后在NVIDIA的GPU上运行,这样就可以充分利用GPU的并行计算能力,而不仅限于显示图形。由于CUDA是NVIDIA的专利技术,所以AMD显卡无法使用CUDA。得益于较早的推出时间,CUDA的生态系统也更加完善,有很多的库和框架都是基于CUDA的,比如TensorFlow、PyTorch等。
当下热门的AI绘画工具Stable Diffusion就需要用到PyTorch。换句话说,如果AMD显卡能够支持PyTorch,那么就可以运行Stable Diffusion。
在Linux环境下,我了解到AMD显卡是可以运行PyTorch的,而且AMD也推出了ROCm,这是一个开源的并行计算平台,可以让AMD显卡运行PyTorch。但在Windows环境下,ROCm并不支持PyTorch,因此我们需要另辟蹊径。
研究过程中也考虑了装双系统,但以双系统的方式来使用AI绘画较为麻烦。可能过一段时间就不想再切换系统了,所以我还是更希望在Windows环境下使用AMD显卡运行Stable Diffusion。
Linux环境下的运行效率据说已经没有什么损耗了,相关资料很多,这里不做详细介绍。
2023年的方案里,能看到名为pytorch-directml的项目。这是一个PyTorch的后端,可以让PyTorch在Windows环境下使用DirectML运行。而DirectML是微软推出的一个机器学习加速库,可以让PyTorch在Windows环境下使用AMD显卡运行。
在经过社区的努力后,克服重重困难,pytorch-directml项目已经可以在Windows环境下使用AMD显卡运行PyTorch了。这就为我们提供了一个在Windows环境下使用AMD显卡运行Stable Diffusion的方案。
stable-diffusion 最有名的整合包AUTOMATIC1111/stable-diffusion-webui的wiki中也有AMD显卡的使用说明,但是这个项目并没有直接支持AMD显卡,所以我们需要使用一个fork项目。wiki截图如下:
通过链接跳转到对应项目,发现名称已经变了——lshqqytiger/stable-diffusion-webui-amdgpu,这个项目早期应该是叫做stable-diffusion-webui-directml,可以看出现在并不仅限于使用pytorch-directml,后面我们会提到。
下图是GPU-Z的截图,可以看到显卡对DirectML以及CUDA的支持情况,虽然本文一直说的是AMD显卡,但实际上Intel的显卡也有一部分支持DirectML,理论上也是可以使用这个方案的,不过案例较少,没有了解,这里不详细说明了。
AMD ROCm 是一个开放式软件栈,包含多种驱动程序、开发工具和API,可为从底层内核到最终用户应用的GPU编程提供助力。ROCm已针对生成式AI和HPC应用进行了优化,并且能够帮助轻松迁移现有代码。
定位应该和CUDA类似,这个只要到官网下载安装就行了,目前的Stable Diffusion应该是只能使用5.7版本的,下载包命名的时间是23年Q4。
PyTorch是一种用于构建深度学习模型的功能完备框架,是一种通常用于图像识别和语言处理等应用程序的机器学习。使用Python编写,因此对于大多数机器学习开发者而言,学习和使用起来相对简单。PyTorch的独特之处在于,它完全支持GPU,并且使用反向模式自动微分技术,因此可以动态修改计算图形。这使其成为快速实验和原型设计的常用选择。
如果使用DirectML方案,那么就需要安装pytorch_directml:
pip install torch-directml
既然反复提到PyTorch,那这里在说一下Python,相关学习资料多如牛毛。主要说一下版本问题,与前端的Node.js环境类似,不同版本适配情况也不同,能做的工作也不一样,所以需要一个类似版本切换的工具。Node.js使用的是nvm,Python可以用Conda,原理不太一样,Conda是创建一个对应版本的虚拟环境,然后在虚拟环境中安装对应版本的Python,这样就可以在不同的项目中使用不同的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
其实说了那么多DirectML,但是实际上这个方案现在已经不是最好的了,而且DirectML仍然不能将AMD显卡的性能全部发挥出来。今年2月份,ZLUDA发布了AMD显卡版本,可以让AMD显卡运行CUDA程序,这样就可以在Windows环境下使用AMD显卡运行Stable Diffusion了。
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等,我这边已经装好了就没法验证)
这一篇主要还是记录一下自己的学习过程,后续在生成方面就打算直接用整合好的包了,功能更加全面,会比自己搭建的方便一些,这样能更集中精力在具体的生成上,而不是在环境上浪费太多时间。
热门资讯