使用 AMD 显卡本地部署 Stable Diffusion Webui

发表于 2023-02-13

序言

当最开始知道 Stable Diffusion 时就想尝试本地部署的,但是我长期使用的是 AMD 的显卡所以就没有尝试。

最近我发现 AMD 的 ROCm 支持 NVIDIA CUDA,而且 PyTorch 也可以配合 ROCm 使用。

所以我又打起了 Stable Diffusion Webui 本地部署的主意。

整体脉络

我毕竟不是相关行业的开发人员,所以我就是一边看教程一边理解。

我发现如果不理解整体的脉络,以及各个工具、框架之间的关系,在安装过程中遇到问题都不知道怎么解决。

在我的安装过程中我有使用到的工具、框架主要有:Ubuntu、Python3.10、pip3、PyTorch、ROCm(CUDA)、Stable Diffusion Webui。

他们的关系其实很简单,一张图让你理解它。重点理解:PyTorch、ROCm(CUDA)、Stable Diffusion Webui。(结构不一定正确,只是为了方便理解) 整体脉络

版本信息

  • Ubuntu: v22.04
  • ROCm: 5.4
  • PyTorch: 1.13.1
  • Python: 3.10
  • 显卡: AMD Radeon RX 6750 XT

安装 pip3

pip3 是一个包管理工具,后面很多依赖都需要它来安装。

在 Ubuntu 环境下直接使用命令安装。

sudo apt install python3-pip

pip3 也可以指定相关的镜像源以加快访问速度,我这里就不赘述了。

安装 PyTorch

PyTorch 是一个 开源的 Python 机器学习库。后面项目的运行是需要依赖于它的。

进入 Pytorch 官网 可以查看相关的版本依赖和安装教程。 PyTorch 的安装教程

图中的版本等信息就是我所使用的。

pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/rocm5.2

验证 PyTorch 是否安装成功。

################## 终端 ##################
# 在终端输入 python3 进入 Python 的命令行。
python3
################## 终端 ##################

################# Python #################
>>> import torch
>>> print(torch.rand(5, 3))
tensor([[0.3380, 0.3845, 0.3217],
        [0.8337, 0.9050, 0.2650],
        [0.2979, 0.7141, 0.9069],
        [0.1449, 0.1132, 0.1375],
        [0.4675, 0.3947, 0.1426]])
# 输出类似的信息,表示 Pytorch 安装成功了。
################# Python #################

安装 ROCm

ROCm 是 AMD GPU 计算平台,相关的安装教程可查看 AMD 官网

虽然 PyTorch 教程中依赖的 ROCm 版本是 5.2,实际上我安装 5.4 也是可以使用的。

先添加安装器。

sudo apt-get update
wget https://repo.radeon.com/amdgpu-install/5.4/ubuntu/jammy/amdgpu-install_5.4.50400-1_all.deb
sudo apt-get install ./amdgpu-install_5.4.50400-1_all.deb

执行 ROCm 安装,--no-dkms 参数表示不安装显卡驱动,视个人情况使用。

sudo amdgpu-install --usecase=hiplibsdk,rocm --no-dkms

还需要添加用户组,否则会出现调用不到资源的问题。

sudo usermod -a -G video $LOGNAME
sudo usermod -a -G render $LOGNAME

可以使用 sudo rocminforocm-smi 命令查看相关资源信息。能正常查看就表示安装成功。 PyTorch 的安装教程

环境验证

完成了 PyTorch、ROCm 的安装就可以进行一轮验证了,这个验证在 Pytorch 官网 是有的。

PyTorch 的安装教程

################## 终端 ##################
# 在终端输入 python3 进入 Python 的命令行。
python3
################## 终端 ##################

################# Python #################
>>> import torch
>>> torch.cuda.is_available()
True
# 返回的 true 表示已经访问到 GPU 资源了。
################# Python #################

如果遇到报错信息:hipErrorNoBinaryForGpu: Unable to find code object for all current devices!。 需要向 Linux 环境变量写入一个参数。

# 通过命令临时指定参数(其他指定方式不赘述)。
export HSA_OVERRIDE_GFX_VERSION=10.3.0

运行 Stable Diffusion Webui

从 GitHub 克隆项目 Stable Diffusion Webui 运行。

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
cd stable-diffusion-webui
# 有些教程中通过 python3-venv 创建了虚拟环境,但是我通过虚拟环境就访问不到 GPU 资源。
# python -m venv venv                        创建虚拟环境
# source ./venv/bin/activate                 进入虚拟环境
# python -m pip install --upgrade pip wheel  执行一些安装
python launch.py --precision full --no-half

运行的时候会自动安装很多依赖,如果出现安装失败可以手动安装后重新运行项目。也会从 GitHub 克隆一些其他的依赖项目,所以网络环境很重要如果下载失败可以查看错误日志然后手动下载。

依赖的缺失可以根据提示逐个安装。

# 一些常见的依赖缺失
sudo apt install rocm-libs miopen-hip rccl libtinfo5 libopenmpi3 libopenblas-dev
pip install gfpgan==1.3.8
pip install clip
pip install open_clip_torch

作为开源项目在不断更新新功能,肯定也意味着会有新的问题产生,所以遇到搜索引擎搜不到的问题可以到 Stable Diffusion Webui Issues 搜索一下或者提出问题。

到这里 Stable Diffusion Webui 的项目依赖安装完成后,理论上就可以运行了,但是会因为模型的缺失启动失败。 完成项目依赖安装

这里有一个 xformers 缺失的提醒,自己手动处理一下,如果不使用 xformers 可以先不管。

安装模型

完成了项目的配置后,现在我们需要进行模型的安装。

模型可以到 Hugging Face 下载,下载下来后放置到项目的 models/Stable-diffusion 下。

完成模型的安装后再次重启,就可以正常启动了。 正常启动 Webui