草庐IT

在GPU云服务器中部署Stable Diffusion web UI

_澜静_ 2023-05-21 原文

在GPU云服务器中部署Stable Diffusion web UI

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是执行脚本,medvramalways-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的服务器。

  1. 模型上传至阿里云盘,如果没有账号,需要先注册。

  2. 在控制台界面(开机状态),打开AutoPanel

  1. 打开公网网盘,选择阿里云盘,下方会出现一个二维码,需要在手机上下载阿里云盘的app然后扫描并授权。

  1. 点击下载,使用服务器从云盘中下载模型:

下载后的文件存放在数据盘的根目录中,进入数据存放的文件夹后,将模型移动到项目主目录:

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使用成功!

6. 参考

  • https://zhuanlan.zhihu.com/p/386821676
  • https://zhuanlan.zhihu.com/p/574200991

有关在GPU云服务器中部署Stable Diffusion web UI的更多相关文章

  1. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  4. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  5. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  6. ruby-on-rails - 在 Rails 中调试生产服务器 - 2

    您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除

  7. ruby - 我的 Ruby IRC 机器人没有连接到 IRC 服务器。我究竟做错了什么? - 2

    require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame

  8. ruby - Rails 开发服务器、PDFKit 和多线程 - 2

    我有一个使用PDFKit呈现网页的pdf版本的Rails应用程序。我使用Thin作为开发服务器。问题是当我处于开发模式时。当我使用“bundleexecrailss”启动我的服务器并尝试呈现任何PDF时,整个过程会陷入僵局,因为当您呈现PDF时,会向服务器请求一些额外的资源,如图像和css,看起来只有一个线程.如何配置Rails开发服务器以运行多个工作线程?非常感谢。 最佳答案 我找到的最简单的解决方案是unicorn.geminstallunicorn创建一个unicorn.conf:worker_processes3然后使用它:

  9. ruby - Dropbox 类似 git 的服务——没有 rsync 和 inotify - 2

    关于如何使用git设置类似Dropbox的服务,您有什么建议吗?您认为git是解决此问题的合适工具吗?我在考虑使用git+rush解决方案,你觉得怎么样? 最佳答案 检查这个开源项目:https://github.com/hbons/SparkleShare来自项目的自述文件:Howdoesitwork?SparkleSharecreatesaspecialfolderonyourcomputer.Youcanaddremotelyhostedfolders(or"projects")tothisfolder.Theseprojec

  10. ruby TFTP 服务器 - 2

    我将以下代码放在一起用于一个简单的RubyTFTP服务器。它工作正常,因为它监听端口69并且我的TFTP客户端连接到它,我能够将数据包写入test.txt,但我不只是写入数据包,我希望能够从我的客户端通过TFTP传输文件到/temp目录。预先感谢您的帮助!require'socket.so'classTFTPServerdefinitialize(port)@port=portenddefstart@socket=UDPSocket.new@socket.bind('',@port)whiletruepacket=@socket.recvfrom(1024)putspacketFile

随机推荐