Azure云计算人工智能

使用Azure NCads A100系列的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 NCads A100系列的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(with Standard Security Mode)
  • 虚拟机型号:Standard NC24ads A100 v4 (24 vcpus, 220 GiB memory)
  • 磁盘类型:初始化 Premium SSD LRS 32GB, 需要扩展到64GB或者更多。
  • 部署区域:EastUS / WestUS 2

 

实验目标

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

 

详细操作

阶段一:创建Azure NCads A100 v4系列虚拟机

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

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

镜像你可以选择Ubuntu Gen2或者Gen1的。

** 重要 ** :如果你选择Gen2,请确保Security Type设置为为Standard(如下图),因为默认的 Trusted Launch 模式将会导致CUDA驱动无法在UEFI中更新!

** 2023年12月 更新注释 ** : 新版Standard NCads A100 v4相较本文之前提到的Standard NC6s v3性能有巨幅提升,并且开启SPOT模式之后价格下降至0.61$/每小时。

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

 

**关于折扣价**

这里重点就要说一下了:

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

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

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

 

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

使用Azure NCads A100系列的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设备是否可以被正确识别:

sudo lspci | grep NVIDIA

0001:00:00.0 3D controller: NVIDIA Corporation GA100 [A100 PCIe 80GB] (rev a1)

 

阶段三:安装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.1-1_all.deb 

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

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

如果需要浏览其他支持的OS版本,可以直接访问Repos链接查看:Index of /compute/cuda/repos (nvidia.com)

 

下载并安装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 NCads A100系列的Linux虚拟机搭建Stable Diffusion WebUI并实现外部访问【原创文章】插图4

 

** 重要 **:↓如果遇到下面的提示↓,你应该在创建VM的时候选错了Security Type为 Trusted Launch 模式。

正如在”阶段一”中橙色行提到的,对于Gen2的VM你需要选择为Standard的模式。

进一步来说。在 Trusted Launch 模式下的MOK Key会被自动托管,因此在没有MOK Key的情况下CUDA驱动相关引导信息无法被更新,因此导致了在系统启动后CUDA驱动无法生效。

Configuring Secure Boot

 Your system has UEFI Secure Boot enabled.                                                                                   
                                                                                                                             
 UEFI Secure Boot requires additional configuration to work with third-party drivers.                                        
                                                                                                                             
 The system will assist you in configuring UEFI Secure Boot. To permit the use of third-party drivers, a new Machine-Owner   
 Key (MOK) has been generated. This key now needs to be enrolled in your system's firmware.                                  
                                                                                                                             
 To ensure that this change is being made by you as an authorized user, and not by an attacker, you must choose a password   
 now and then confirm the change after reboot using the same password, in both the "Enroll MOK" and "Change Secure Boot      
 state" menus that will be presented to you when this system reboots.                                                        
                                                                                                                             
 If you proceed but do not confirm the password upon reboot, Ubuntu will still be able to boot on your system but any        
 hardware that requires third-party drivers to work correctly may not be usable.

 

阶段四:克隆并安装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 NCads A100系列的Linux虚拟机搭建Stable Diffusion WebUI并实现外部访问【原创文章】插图5

 

再次更新Git:

git pull

 

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

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

 

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

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

 

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

使用Azure NCads A100系列的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 NCads A100系列的Linux虚拟机搭建Stable Diffusion WebUI并实现外部访问【原创文章】插图8

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

 

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

使用Azure NCads A100系列的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 允许安装外部插件
> 加入 --gradio-auth USERNAME:PASSWD 启用账户验证

 

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

bash webui.sh

 

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

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

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

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

 

故障排查

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

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

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

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

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

 

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

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

请先确认已经安装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后即可生效

 

问题四:RuntimeError: Torch is not able to use GPU;

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

该症状出现意味着Pytorch组件未识别GPU,有可能是Pytorch组件与当前CUDA不匹配,或者GPU驱动未成功安装导致的。请参照以下方案进行验证。

检查Pytorch当前版本,以及是否可以正确识别CUDA:

运行命令:
python3 -c "import torch; print(torch.__version__);print(torch.cuda.is_available())"


错误的输出如下:
2.1.0+cu121
False


预期正确的输出如下:
2.1.0+cu121
True

若遇到True,请尝试清理venv环境并重新安装Pytorch组件。

若遇到False,请继续下面的排查方法。

检查GPU驱动是否可以正常识别:

运行命令:
nvidia-smi


错误的输出如下:
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.


预期正确的输出如下:
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.23.08              Driver Version: 545.23.08    CUDA Version: 12.3     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA A100 80GB PCIe          On  | 00000001:00:00.0 Off |                    0 |
| N/A   29C    P0              42W / 300W |      4MiB / 81920MiB |      0%      Default |
|                                         |                      |             Disabled |
+-----------------------------------------+----------------------+----------------------+
                                                                                         
+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|  No running processes found                                                           |
+---------------------------------------------------------------------------------------+

若显示为上面错误的输出,需要检查你的GPU驱动是否正确安装(并尝试重新安装)。或者检查在VM创建时,是否将Security Type 错误的选择为 Trusted Launch 模式。

 

常用SD插件

以下是常用的stable diffusion插件:

 

 

参考文献

 

相关链接

 

(END)

 

 

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

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

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