在GPU云服务器中部署Stable Diffusion web UI
1. 前言 2. 关于云服务器的选择 3. 关于机器的选择 4. 部署Stable Diffusion Python和CUDA 检查pip源 下载Stable Diffusion web UI 尝试运行Stable Diffusion 使用命令手动下载依赖 基础模型 python库依赖 本机下载依赖并上传到服务器 下载模型 上传服务器 5. 运行 6. 参考1. 前言
最近在研究如何使用Controlnet细粒度控制Stable Diffusion生成满意的图片,无奈自己本地的显卡只有6G的显存,而Controlnet的Openpose功能需要10G以上的显存才能正常出图。于是只能租用GPU云服务器并将SD模型部署在服务器上,然后再通过本地浏览器访问。
2. 关于云服务器的选择
推荐这篇文章:GPU云服务器平台对比!哪家最值得推荐?
自己使用的是AutoDL,但是并没有使用它家自带的Stable Diffusion模型,还是自己从头开始部署。不太推荐这家,原因是如果使用按量计费,关机后经常会出现无卡可用的情况,尤其是3090这种热门卡。
3. 关于机器的选择
以AutoDL为例,注册完成后来到以下界面选机器:
一般来说,现阶段3090从价格、显存大小各个方面综合来看是比较好选择,当然也是经常被一抢而空。
关于计费方式,只推荐按量计费,很多有优惠的平台可以用1~2块/小时租到3090的显卡。除非是需要训练大模型,只是自己用的话不推荐包日/周/月,那价格1年自己都快能买一块了。按量计费的缺点就是关机后可能会因为空闲显卡不足无法正常开机。
AutoDL自带了NovelAI,但是实际使用起来可能会有各种错误,其中最多的是Python版本的问题。我这个时间点,它们的机器上自带的都是Python3.8,但是最新版本的stable-diffusion需要3.10的环境,所以不推荐用它自带的,而是选择如下的配置:
这里需要提一下,一些出场早一点的显卡可能会不让使用CUDA11.8的环境(如RTX3080),所以这里还是推荐使用3090及以后的显卡。
4. 部署Stable Diffusion
Python和CUDA
一般GPU服务器已经自带Python和显卡驱动,建议使用服务器厂商自带的,否则后续会出现很多问题。
检查pip源
这一步很重要。Stable Diffusion的更新速度很快,但是有一部分厂商的机器所使用的的pip源没有及时更新,没有SD所需要的一些依赖的最新版本,就会导致一直报错。
以autodl为例,我的机器默认使用了华为源,导致自己在后续安装依赖的时候facexlib和numpy一直找不到最新的版本,最后换成阿里源才成功解决,同时换源后记得再更新一下pip的版本。
具体的操作方式见:pip换源 -pip更换国内镜像源
下载Stable Diffusion web UI
在终端中输入以下命令,这里推荐部署在数据盘而不是系统盘,因为后续还需要下载各种模型,占用空间较大。
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
如果连接超时,建议多试几次,因为git的连接有时很不稳定。
尝试运行Stable Diffusion
下载完成后,进入项目根目录,执行命令:
cd stable-diffusion-webui
COMMANDLINE_ARGS="--medvram --always-batch-cond-uncond --port 6006" REQS_FILE="requirements.txt" python launch.py
其中launch.py是执行脚本,medvram和always-batch-cond-uncond都是显存优化的参数;
port 6006指定进程运行在机器的6006端口上。因为autodl自带了一个对外暴露的服务,端口号为6006,所以这样设置。当然,也有其他的方法,会在后面说明;
最后的REQS_FILE是运行所需要的的依赖,命令执行后会自动安装依赖。
使用命令手动下载依赖
如果租用的是国内节点的云服务器,大概率会碰到各种连接失败和超时的问题。比如:
The TLS connection was non-properly terminated
如果出现这种问题推荐手动下载。
基础模型
首先在主目录下创建repositories目录:
mkdir repositories
Stable Diffusion web UI有四个依赖模型,需要分别下载。
StableDiffusion:
git clone https://github.com/CompVis/stable-diffusion.git repositories/stable-diffusion
taming-transformers:
git clone https://github.com/CompVis/taming-transformers.git repositories/taming-transformers
CodeFormer:
git clone https://github.com/sczhou/CodeFormer.git repositories/CodeFormer
BLIP:
git clone https://github.com/salesforce/BLIP.git repositories/BLIP
安装完成后再次执行命令,会自动安装剩下的依赖,当然后续也可能因为连接超时而报错:
COMMANDLINE_ARGS="--medvram --always-batch-cond-uncond --port 6006" REQS_FILE="requirements.txt" python launch.py
python库依赖
在安装依赖的时候也可能会因为网络而卡住,尤其是gfpgan库,这时候建议使用pip install命令手动安装依赖。如果出现类似以下错误:
No matching distribution found for facexlib>=0.2.5
这是因为无法从pip中获取最新版本的库,建议升级一下pip,并且检查一下pip源是否太久没更新。
本机下载依赖并上传到服务器
如果网络实在无法连接,则只能用本机下载模型并上传到服务器上。
在Stable Diffusion的依赖中有一个v1-5-pruned-emaonly.safetensors模型需要从huggingface网站中下载,但是终端的下载速度巨慢。按量计费每分每秒都是money,所以更推荐本地下载后直接上传到服务器。这里以autodl的服务器为例。
下载模型
网址:
https://huggingface.co/runwayml/stable-diffusion-v1-5/blob/main/v1-5-pruned-emaonly.safetensors
上传服务器
常规可以使用Xshell的方式,详情可以参加文档:AutoDL数据上传
我这里介绍通过阿里云盘(因为没有限速)的方式上传到autodl的服务器。
模型上传至阿里云盘,如果没有账号,需要先注册。
在控制台界面(开机状态),打开AutoPanel:
打开公网网盘,选择阿里云盘,下方会出现一个二维码,需要在手机上下载阿里云盘的app然后扫描并授权。 点击下载,使用服务器从云盘中下载模型:下载后的文件存放在数据盘的根目录中,进入数据存放的文件夹后,将模型移动到项目主目录:
mv v1-5-pruned-emaonly.safetensors stable-diffusion-webui/
后续其他模型都可以用这种方式上传至服务器。
5. 运行
前面所有依赖安装完毕后,在项目主目录下再次执行命令:
COMMANDLINE_ARGS="--medvram --always-batch-cond-uncond --port 6006" REQS_FILE="requirements.txt" python launch.py
如果出现以下输出则表示运行成功:
使用autodl的情况下,在控制台中点击自定义服务:
后面会出现提示,让进行实名,因为监管进一步收紧,如果不希望实名建议换其他服务器厂商。完成实名后就可以在本地浏览器中操作Stable Diffusion作画了。
界面如下:
Controlnet使用成功!