Azure云计算人工智能

使用Azure NCv3系列的Linux虚拟机搭建Stable Diffusion WebUI并实现外部访问【原创文章】

最近Stable Diffusion(简称SD)一直很火爆,相比Midjourney,Stable Diffusion开源且免费可以本地部署,SD+Controlnet自由度更高无限制,并且可以自己训练私有模型,可玩度很高。
网上大多数Stable Diffusion WebUI的教程都是基于Windows操作系统的,但很少有人写部署Linux环境下的文章,所以正好趁热打铁写一遍Linux环境的AzureVM部署Stable Diffusion WebUI的教程。

[本文为AndyX.Net原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明!]

使用Azure NCv3系列的Linux虚拟机搭建Stable Diffusion WebUI并实现外部访问【原创文章】插图

 

[本文由AndyX撰写,本文的“Azure Portal”门户界面以英文为主,仅供参考。]

[本人中所有涉及到 Azure 的实验均在 Azure Global 国际版中进行配置,部分功能可能在 Azure 世纪互联中受到限制]

[本文为AndyX.Net原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明!]

[如果本文章帮助到了您,请记得在文章末尾“打赏”作者,感谢!]

 

Azure虚拟机配置

  • 虚拟机名称:Stable-Diffusion-Test-WestUS2
  • 平台镜像:Ubuntu Server 22.04 LTS – x64 Gen2
  • 虚拟机型号:Standard NC6s v3 (6 vcpus, 112 GiB memory, Tesla V100 GPU)
  • 磁盘类型:初始化 Premium SSD LRS 32GB, 需要扩展到64GB或者更多。
  • 部署区域:WestUS 2

 

实验目标

  • 以最优化的价格搭建一台包含Nvidia Tesla V100 GPU(16GB)的,基于Linux Ubuntu 22.04的虚拟机
  • 使外部可以访问Stable Diffusion WebUI以便进行画图或者模型训练

 

详细操作

阶段一:创建Azure NCv3系列虚拟机

按照常规在Azure Portal门户中创建一台Standard NC6s v3的虚拟机,如果没有Quota的话,可以自行申请(一些账户允许启动审批,某些账户需要自己创建工单以便申请)

关于区域我选择WestUS2,因为资源比较多而且距离高峰期正常有互补的时差(美国的使用高峰时间等于中国的睡觉时间)

镜像你可以选择Ubuntu Gen2或者Gen1的,没有影响。

使用Azure NCv3系列的Linux虚拟机搭建Stable Diffusion WebUI并实现外部访问【原创文章】插图1

 

**关于折扣价**

这里重点就要说一下了:

  • 对于实验用的Azure虚拟机来说,开启Spot模式(被翻译为“现成虚拟机”)将可以极大的减少你使用VM的成本。
  • 结合上图和下图可以看到,虚拟机 Standard NC6s v3 正常计费约等于3.1$/小时,如果开启了Spot模式,计费仅为0.9$/小时。
  • 但代价是此类VM的使用优先程度比较低,如果平台遇到了资源不足的问题,将会优先强制关闭Spot VM,无论你是否有业务运行在上面。这也就是为何我们选择WestUS2区域的重要性,正好可以错峰使用。

**逐出策略选择 – Capacity only: Your virtual machine will be evicted when Azure’s excess capacity disappears. **

使用Azure NCv3系列的Linux虚拟机搭建Stable Diffusion WebUI并实现外部访问【原创文章】插图2

 

部署完成后看到“Your deployment is complete”提示即为成功。

使用Azure NCv3系列的Linux虚拟机搭建Stable Diffusion WebUI并实现外部访问【原创文章】插图3

 

阶段二:检查并配置基本环境

使用SSH登录到Ubuntu操作系统,运行以下命令检查Python和git相关组件是否已经安装

andyx@Stable-Diffusion-Test-WestUS2:~$ git --version
git version 2.34.1

andyx@Stable-Diffusion-Test-WestUS2:~$ python3 --version
Python 3.10.6

andyx@Stable-Diffusion-Test-WestUS2:~$ pip3 --version
Command 'pip3' not found, but can be installed with:
sudo apt install python3-pip

 ###此处提示缺少组件,需要手动安装###

 

如果提示缺少组件,请自行安装:

sudo apt update && sudo apt install git python3 python3-pip -y 

sudo apt install python3.10-venv -y

 

阶段三:安装Nvidia驱动和CUDA套件

参考Azure官方文章安装Nvidia驱动和CUDA套件

适用于 Linux 的 Azure N 系列 GPU 驱动程序安装 – Azure Virtual Machines | Microsoft Learn

添加英伟达CUDA的Repos源:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb 

sudo dpkg -i cuda-keyring_1.0-1_all.deb 

### 如果你在用Ubuntu20.04,请自行修改上面链接中的版本号为repos/ubuntu2004 ###

 

下载并安装Nvidia驱动和CUDA套件:

sudo apt update 

sudo apt install cuda-drivers -y

sudo apt install cuda-12-2 cuda-11-8 -y

**为何要添加2个CUDA套件?因为已知Python Torch最新版为2.0.1-cu118存在已知兼容性问题,12.2部分组件不能用于Torch 2.0.1-cu118可能导致GPU识别可能会失败,因此需要11.8一起安装。也许未来的新版本会解决这个问题**

如果遇到此类提示(可能会遇到多次),默认即可按TAB键切换到OK,然后确认即可

使用Azure NCv3系列的Linux虚拟机搭建Stable Diffusion WebUI并实现外部访问【原创文章】插图4

 

阶段四:克隆并安装Stable Diffusion WebUI

从github中克隆源代码:

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui

Cloning into 'stable-diffusion-webui'...
remote: Enumerating objects: 25567, done.
remote: Counting objects: 100% (1120/1120), done.
remote: Compressing objects: 100% (542/542), done.
remote: Total 25567 (delta 746), reused 877 (delta 565), pack-reused 24447
Receiving objects: 100% (25567/25567), 31.70 MiB | 28.30 MiB/s, done.
Resolving deltas: 100% (17867/17867), done.

 

切换至稳定版(可选,但是推荐稳定版):

git checkout master

使用Azure NCv3系列的Linux虚拟机搭建Stable Diffusion WebUI并实现外部访问【原创文章】插图5

 

再次更新Git:

git pull

 

进入WebUI所在的目录,并执行Python的预安装:

cd stable-diffusion-webui 
pip3 install -r requirements.txt

 

Pip程序将会读取列表并自动安装所需要的Python依赖环境(可以不用超级权限,仅针对此用户生效):

使用Azure NCv3系列的Linux虚拟机搭建Stable Diffusion WebUI并实现外部访问【原创文章】插图6

 

安装成功可见以下提示“Successfully installed”:

使用Azure NCv3系列的Linux虚拟机搭建Stable Diffusion WebUI并实现外部访问【原创文章】插图7

**如果遇到错误提示“ERROR: Could not install packages due to an OSError: [Errno 28] No space left on device”请保证你有足够的磁盘空间,或者参阅下面的“故障排查”进行扩盘操作**

 

阶段五:启动Stable Diffusion WebUI

确保你在WebUI所在的目录,然后运行webui.sh以便启动

cd stable-diffusion-webui 

bash webui.sh

 

看到“Running on local URL: http://127.0.0.1:7860”即为启动成功:

使用Azure NCv3系列的Linux虚拟机搭建Stable Diffusion WebUI并实现外部访问【原创文章】插图8

**如果遇到错误提示“ERROR: Cannot activate python venv, aborting…”则意味着VENV创建失败,请参阅下面的“故障排查”进行检查**

 

尝试随便写一些提示词画个图看看:

使用Azure NCv3系列的Linux虚拟机搭建Stable Diffusion WebUI并实现外部访问【原创文章】插图9

 

阶段六:设置参数以便外部访问

确保你在WebUI所在的目录,修改webui-user.sh可添加启动参数:

cd stable-diffusion-webui 

nano webui-user.sh 

# Commandline arguments for webui py, for example: 
####去掉export 之前的井号#### 
export COMMANDLINE ARGS="--theme dark --listen --port 12345 --enable-insecure-extension-access" 

###加入 --listen 参数以便外部网络访问 
###加入--port xxxx 参数以便修改端口号 
###加入--theme dark 参数启用黑色主题 
###加入 --enable-insecure-extension-access 允许安装外部插件

 

终止WebUI的运行,然后再次运行:

bash webui.sh

 

验证是否可以从外部进行访问:

对于Azure VM,你可以添加自定义DNS为域名,支持CNAME指向,并且是免费的(如下图中的网址)。

使用Azure NCv3系列的Linux虚拟机搭建Stable Diffusion WebUI并实现外部访问【原创文章】插图10

 

故障排查

问题一:Could not install packages due to an OSError: [Error 28] No space left on device

用”df -h”命令检查磁盘剩余空间,发现空间已经不够了

使用Azure NCv3系列的Linux虚拟机搭建Stable Diffusion WebUI并实现外部访问【原创文章】插图11

参考Azure官方文档,将VM停机后调整磁盘大小,或者将SD WEBUI挂在到新建的数据盘上:扩展 Linux VM 上的虚拟硬盘 – Azure Virtual Machines | Microsoft Learn

使用Azure NCv3系列的Linux虚拟机搭建Stable Diffusion WebUI并实现外部访问【原创文章】插图12

 

问题二:ERROR: Cannot activate python venv, aborting…

使用Azure NCv3系列的Linux虚拟机搭建Stable Diffusion WebUI并实现外部访问【原创文章】插图13

请先确认已经安装Python VENV包:

sudo apt -y install python3.10-venv

如果问题依然出现,请确保你在WebUI所在的目录,然后下运行命令以便解决

cd stable-diffusion-webui 

python3 -m venv venv/

 

问题三:No module ‘xformers’. Proceeding without it.

事实上这并不是一个错误,只是没有启用xformers。启用该组件将会提GPU对于高图像处理的性能。

解决起来也很简单,首先需要安装xformers组件:

pip3 install xformers

然后修改webui-user.sh并添加”–xformers”参数:

cd stable-diffusion-webui 

nano webui-user.sh
 
##在export COMMANDLINE ARGS这一行的双引号中追加参数--xformers
##重新启动SD WebUI后即可生效

 

参考文献

 

相关链接

 

(END)

 

 

文章撰写:作者AndyX,来自AndyX.Net

文章遵循 CC 4.0 BY-SA 版权协议,若需转载本文,请标注来源与链接:原创内容AndyX.Net版权所有

本文链接:使用Azure NCv3系列的Linux虚拟机搭建Stable Diffusion WebUI环境并实现外部访问