最近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 版权协议,转载请附上原文出处链接和本声明!]
[本文由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虚拟机来说,开启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. **
部署完成后看到“Your deployment is complete”提示即为成功。
阶段二:检查并配置基本环境
使用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,然后确认即可
** 重要 **:↓如果遇到下面的提示↓,你应该在创建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
再次更新Git:
git pull
进入WebUI所在的目录,并执行Python的预安装:
cd stable-diffusion-webui pip3 install -r requirements.txt
Pip程序将会读取列表并自动安装所需要的Python依赖环境(可以不用超级权限,仅针对此用户生效):
安装成功可见以下提示“Successfully installed”:
**如果遇到错误提示“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”即为启动成功:
**如果遇到错误提示“ERROR: Cannot activate python venv, aborting…”则意味着VENV创建失败,请参阅下面的“故障排查”进行检查**
尝试随便写一些提示词画个图看看:
阶段六:设置参数以便外部访问
确保你在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指向,并且是免费的(如下图中的网址)。
故障排查
问题一:Could not install packages due to an OSError: [Error 28] No space left on device
用”df -h”命令检查磁盘剩余空间,发现空间已经不够了
参考Azure官方文档,将VM停机后调整磁盘大小,或者将SD WEBUI挂在到新建的数据盘上:扩展 Linux VM 上的虚拟硬盘 – Azure Virtual Machines | Microsoft Learn
问题二:ERROR: Cannot activate python venv, aborting…
请先确认已经安装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;
该症状出现意味着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插件:
- C站助手(Civitai Helper) https://github.com/zixaphir/Stable-Diffusion-Webui-Civitai-Helper.git
- Tag自动补全 https://github.com/DominikDoom/a1111-sd-webui-tagcomplete.git
- 细节修复(After Detailer,ADetailer) https://github.com/Bing-su/adetailer.git
- 多用户Checkpoint https://github.com/lihaoyun6/sd-webui-Multi-User-Checkpoint
- 动画制作animatediff https://github.com/continue-revolution/sd-webui-animatediff.git
- 双语本地化插件 https://github.com/journey-ad/sd-webui-bilingual-localization.git
- 控制网络(ControlNet插件) https://github.com/Mikubill/sd-webui-controlnet.git
- 提示词管理(prompt-all-in-one) https://github.com/Physton/sd-webui-prompt-all-in-one
- 二维码生成器 https://github.com/antfu/sd-webui-qrcode-toolkit.git
- 简体中文语言包 https://github.com/dtlnor/stable-diffusion-webui-localization-zh_CN
参考文献
- ERROR: Cannot activate python venv, aborting…, even when python3-venv is installed · Issue
- No module ‘xformers’. Proceeding without it. · AUTOMATIC1111/stable-diffusion-webui
- NCv3-series – Azure Virtual Machines | Microsoft Learn
- Azure N-series GPU driver setup for Linux – Azure Virtual Machines | Microsoft Learn
- Use Azure Spot Virtual Machines – Azure Virtual Machines | Microsoft Learn
- Expand virtual hard disks attached to a Windows VM in an Azure – Azure Virtual Machines | Microsoft Learn
相关链接
(END)
文章撰写:作者AndyX,来自AndyX.Net。
文章遵循 CC 4.0 BY-SA 版权协议,若需转载本文,请标注来源与链接:原创内容AndyX.Net版权所有
本文链接:使用Azure NCv3系列的Linux虚拟机搭建Stable Diffusion WebUI环境并实现外部访问