最近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
- 虚拟机型号: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虚拟机来说,开启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. **
部署完成后看到“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驱动和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,然后确认即可
阶段四:克隆并安装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 允许安装外部插件
终止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后即可生效
参考文献
- 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环境并实现外部访问