A卡ROCm运行Stable Diffusion AI画图
0_-__-_0
2022年10月18日 23:38

N卡可以CUDA运行AI画图,教程已经很多了。其实A卡也可以通过ROCm运行。和N卡类似,也需要相对较新的卡才能满足显存要求。

第零步 准备工作

本文假设已经完成Arch或基于Arch发行版的安装。

如果是新安装的Arch,一些基础的包(如sudo、git、nano、显卡驱动)需要额外安装或者使用替代品。如果是Manjaro,下文的命令应该可以直接执行。

开始前,建议先将系统更新

代码块
Shell
自动换行
复制代码
sudo pacman -Syu
复制成功

第一步 增加arch4edu源

下列1.和2.也可以按照镜像站文档配置。这里以清华的镜像站为例。

1. 编辑/etc/pacman.conf文件

代码块
Shell
自动换行
复制代码
sudo nano /etc/pacman.conf
复制成功

将下列内容添加至文件末尾

[arch4edu] Server = https://mirrors.tuna.tsinghua.edu.cn/arch4edu/$arch

2. 导入GPG key

代码块
Shell
自动换行
复制代码
sudo pacman-key --recv-keys 7931B6D628C8D3BA
sudo pacman-key --finger 7931B6D628C8D3BA
sudo pacman-key --lsign-key 7931B6D628C8D3BA
复制成功

3. 同步数据库

代码块
Shell
自动换行
复制代码
sudo pacman -Sy
复制成功

第二步 安装ROCm

1. 安装

代码块
Shell
自动换行
复制代码
sudo pacman -S rocm-hip-sdk
复制成功

2. 加入PATH

代码块
Shell
自动换行
复制代码
export PATH=$PATH:/opt/rocm/bin
复制成功

如果需要永久生效,可以加入/etc/profile

代码块
Shell
自动换行
复制代码
sudo nano /etc/profile
复制成功

找到注释“# Append our default paths”,并将下列行附在其他append_path行之后

append_path '/opt/rocm/bin&#​39;

3. 验证可用性

代码块
Shell
自动换行
复制代码
rocminfo
rocm-smi
复制成功

第三步 安装stable diffusion webui

这里可以按照github内wiki的方法操作,唯一需要注意的是本步骤5.后面的内容。

1. 安装python

代码块
Shell
自动换行
复制代码
sudo pacman -S python python-pip
复制成功

2. 下载stable-diffusion-webui

进入到准备运行stable diffusion webui的目录,稍后该目录占用空间将至少扩大至10G,如果给系统空间比较少,这里建议进入到数据盘。

假设数据盘挂载在“~/data”

代码块
Shell
自动换行
复制代码
cd ~/data
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
cd stable-diffusion-webui
复制成功

3. 首次运行准备python环境

代码块
Shell
自动换行
复制代码
python -m venv venv
source venv/bin/activate
pip3 install --upgrade pip wheel
复制成功

4. 安装pytorch

你可以在这里找到最新的安装命令

https://pytorch.org/get-started/locally/

选择Linux-pip-Python-ROCm

当前版本是

代码块
Shell
自动换行
复制代码
pip3 install torch torchvision --extra-index-url https://download.pytorch.org/whl/rocm5.1.1
复制成功

5. 测试pytorch

进入python

代码块
Shell
自动换行
复制代码
python3
复制成功

在python中输入

代码块
Python
自动换行
复制代码
import torch
torch.cuda.is_available()
复制成功

如果返回True,说明GPU有官方支持,直接exit()退出python进入6。

如果出现报错“"hipErrorNoBinaryForGpu: Unable to find code object for all current devices!"”,说明GPU不被官方支持

对于RDNA2显卡(RX6000系),其实部分型号是有支持的,所以即便你的型号不在列表里,可以设置环境变量,以gfx1030方式运行[1]。

代码块
Shell
自动换行
复制代码
export HSA_OVERRIDE_GFX_VERSION=10.3.0
复制成功

对于RDNA显卡(RX5000系),是完全没有支持的,但是同样设置环境变量伪装为RDNA2显卡后似乎依然可以工作[2]。

代码块
Shell
自动换行
复制代码
export HSA_OVERRIDE_GFX_VERSION=10.3.0
复制成功

对于VEGA显卡,可以尝试将上面环境变量设置为9.0.8(对应gfx908),这里我没有测试。

6. 复制model

将想用的model复制到models/Stable-diffusion。此后可以从WebUI左上角选择需要的ckpt文件。

这一步开始和显卡无关,ckpt的来源可以参考现在网上大把的教程。注意其中NovelAI的来源并不正规。

此前有文章指出,直接加载检查点可能存在安全风险[3],如果一定要执行,请至少使用最新的stable diffusion webui。

第四步 运行stable diffusion webui

1. 进入目录

如果刚刚执行完第三步,可以忽略下面三条命令。

每次打开新终端的时候先执行下面三行。注意第1行取决于上面第三步2.中运行git的位置。

代码块
Shell
自动换行
复制代码
cd ~/data
cd stable-diffusion-webui
source venv/bin/activate
复制成功

2. 开始运行

代码块
Shell
自动换行
复制代码
python launch.py --precision full --no-half
复制成功

首次运行需要额外下载数据。

用本地浏览器打开命令行最后显示的链接,就可以在WebUI生成图片了。在左上角选择此前导入的ckpt。

WebUI内首次生成图片需要等待一分钟到几分钟(主要取决于CPU性能),同时命令行会有类似这样的提示。

MIOpen(HIP): Warning [SQLiteBase] Missing system database file: gfx1030_40.kdb Performance may degrade. Please follow instructions to install: https://github.com/ROCmSoftwarePlatform/MIOpen#installing-miopen-kernels-package

只是偶尔运行的话没必要花时间根据链接内步骤解决,那样花费的时间比等待时间还长。

此后运行每张图只需要数秒钟(主要取决于GPU性能)。

可以使用nvtop观察GPU/显存用量。如果生成失败注意看命令行报错是否显存不足。

参考

[1] 【AI绘图/AMD】A卡用户的novelAI教程(GPU运行) - Notify_​

[2] AMD的ROCm是否支持RDNA构架呢?请各位大神指教? - Huisheng Xu的回答 - 知乎 https://www.zhihu.com/question/371965193/answer/1572701000

[3] ⚠️警惕!你的NovelAI模型,极有可能被恶意攻击! 藏在AI绘画泄露模型背后的,巨大安全隐患! - 神必无敌大将军​