Stable Diffusion各网络情况部署教程
大部分人都只是正常启动Stable Diffusion去使用,但是Stable Diffusion其实是可以脱离本机远程使用的。假如你在台式电脑运行了Stable Diffusion,但是可以躺在床上用手机去进行AI绘画,是不是会感觉更舒服一些?也可以分享给你的好友,让他们一起使用你部署好的Stable Diffusion进行绘画。
技术交流
本站已开放AI技术交流论坛,如果您在学习过程当中遇到问题,可在本站论坛【点击前往】发帖求助。
本地模式
本地模型也就是你不更改任何设置,直接默认加载运行SD。该方式可以通过该电脑的本地localhost
或IP地址
进行访问。
localhost
就是本地的主机地址,每一台Windows电脑都会有localhost
,它的默认IP地址为127.0.0.1
,也可以理解为localhost
=127.0.0.1
,没有任何区别。
端口号
我们已经有IP地址可以访问了,那么http://127.0.0.1:7860
后面的7860
的作用是什么?
这个7860
我们俗称为端口号,我们可以理解为一个衣柜有很多个抽屉,每个抽屉都用来存放不同的用品,7860
就是电脑系统中的一个抽屉,只有指定了抽屉的号码,才可以让系统更明确你所想使用的目的。比如我们可以为再安装一个开源项目,端口号为7870
,那么当我们访问http://127.0.0.1:7870
时,就可以打开该开源项目的操作界面啦。
这样做的最大好处就是一个IP地址,可以同时挂起很多个应用,互不干涉。
局域网
如果你希望在当前电脑内运行SD,然后通过其它电脑访问SD进行绘图,可以使用以下方式进行。
首先获取已经运行SD的电脑IP地址,我们可以通过CMD命令行来快速获取。
ipconfig
我们将会得到如下信息
C:\\Users\\openA>ipconfig Windows IP 配置 以太网适配器 以太网: 连接特定的 DNS 后缀 . . . . . . . : IPv6 地址 . . . . . . . . . . . . : 251e:30e:4235:7c40:c2a3:104:1338:c224 临时 IPv6 地址. . . . . . . . . . : 251e:30e:4235:7c40:6d06:af10:74a5:5ac2 本地链接 IPv6 地址. . . . . . . . : fe80::d324:2e9e:bf39:7b2e%19 IPv4 地址 . . . . . . . . . . . . : 192.168.0.106 子网掩码 . . . . . . . . . . . . : 255.255.255.0 默认网关. . . . . . . . . . . . . : fe80::a236:beff:fea0:7eb8%19 192.168.0.1 无线局域网适配器 WLAN: 媒体状态 . . . . . . . . . . . . : 媒体已断开连接 连接特定的 DNS 后缀 . . . . . . . : 无线局域网适配器 本地连接* 1: 媒体状态 . . . . . . . . . . . . : 媒体已断开连接 连接特定的 DNS 后缀 . . . . . . . : 无线局域网适配器 本地连接* 2: 媒体状态 . . . . . . . . . . . . : 媒体已断开连接 连接特定的 DNS 后缀 . . . . . . . : 以太网适配器 蓝牙网络连接: 媒体状态 . . . . . . . . . . . . : 媒体已断开连接 连接特定的 DNS 后缀 . . . . . . . :
我在在这段回显当中,只需要记住IPv4地址的值即可,也就是192.168.0.106
,每台电脑所获取到的局域网地址都是不同的,因为这会通过路由器或交换机的DDNS进行自动分配,将一个IP地址分配给你的电脑进行使用,所以一定要自行获取。
在我们得到地址之后,打开SD项目目录的webui-user.bat
文件,在COMMANDLINE_ARGS
一行,添加--listen
参数,保存即可。
@echo off git pull set PYTHON= set GIT= set VENV_DIR= set COMMANDLINE_ARGS= --listen call webui.bat
此时我们重新启动SD,原本的提示信息已经变更为http://0.0.0.0:7860
,我们无法直接打开这个网址,因为我们目前已经变更为局域网模式。
我们可以在本地或局域网内的其它电脑,通过访问http://192.168.0.106:7860
来启动。这样做的优点就是可以用低配置电脑远程操作SD,省去多人共用一台电脑的排队困扰。
❗ 注意:局域网状态下无法安装、更新、卸载任何插件,因为每个人的需求不同,如果局域网内的用户A删除了一个局域网B用户需要使用的插件,这会导致其它用户无法运行,所以局域网状态下的任何终端用户都无法对插件拓展项进行设置。
公网模式
什么是公网?公网是公共网络的简称,我们可以通过以下表格来对比一下各种模式之间的区别。
类型 | 描述 |
---|---|
本地模式 | 仅本地运行SD的电脑可以使用AI绘画 |
局域网模式 | 在与SD电脑使用同一路由器或交换机的其它终端设备上,也可以远程操作SD的AI绘画功能。 |
公网模式 | 任何可以访问互联网的电脑或其它终端设备,都可以使用SD进行AI绘画。 |
在了解了公网模式的作用之后,我们对webui-user.bat文件进行修改。
@echo off git pull set PYTHON= set GIT= set VENV_DIR= set COMMANDLINE_ARGS= --share call webui.bat
此时重新启动SD之后,会生成一个可以直接公网访问的链接Running on public URL: <https://fbf87879-b701-31d8.gradio.live
>,该链接为临时链接。
时效性
公网模式下的链接有效期为72小时,也就是三天的时间。
为什么有效期为72小时?因为这个操作界面的功能由Gradio提供,如果你需要无限时长的访问,则需要购买其服务。不过这一般是没有必要的,我们只需要在72小时到期之前后之后重启电脑即可刷新访问时长的限制。
安装性
因为我们的SD服务通过Share参数已经将设备暴露于公网之下,所以为了安全起见,我们可以添加账号密码功能。这样只有知道账号密码的人才能够登录并使用SD,避免算力浪费。
如果你需要账号密码功能,我们则需要再次修改配置文件,添加--gradio-auth username:password
参数,其中的username
为用户名,password
为密码。
例如,我们想设置用户名为openAI
,密码为ABC123
,则将webui-user.bat
文件修改为以下内容。
@echo off git pull set PYTHON= set GIT= set VENV_DIR= set COMMANDLINE_ARGS=--share --gradio-auth openAI:ABC123 call webui.bat
按道理来说,这样设置就已经可以了,但是SD所支持的界面依赖版本不是最新,这个版本的Gradio存在一个BUG,那就是登陆后无法正常与API交互,所以此时我们需要再添加一个参数--no-gradio-queue
即可。
@echo off git pull set PYTHON= set GIT= set VENV_DIR= set COMMANDLINE_ARGS=--share --gradio-auth openAI:ABC123 --no-gradio-queue call webui.bat
此时我们重新运行SD启动文件,我们可以看到如下内容:
Running on local URL: <http://127.0.0.1:7860> Running on public URL: <https://fbf87879-b701-31d8.gradio.live>
其中那一串晦涩难懂的https://fbf87879-b701-31d8.gradio.live
地址,为我们可以访问的公网地址,我们通过该地址访问之后,将会看到如下的登陆界面。
❗ 注意:局域网状态下无法安装、更新、卸载任何插件,因为每个人的需求不同,如果局域网内的用户A删除了一个局域网B用户需要使用的插件,这会导致其它用户无法运行,所以局域网状态下的任何终端用户都无法对插件拓展项进行设置。
公网IP
什么是公网IP?公网IP也就是可以共享到网络上给别人访问的IP地址,这个地址具有唯一性,但可能随时变更。如果你希望自己的公网IP地址能够永久有效不变更,我们可以通过动态DDNS解析功能来进行设置,通过程序后台实时获取公网IP地址,然后通过域名实时解析该地址即可达到通过域名访问的目的。但是此部分内容较长,涉及到的其它内容较多,不展开讲解。
正常来说127.0.0.1
是只有自己的电脑可以访问。192.168.0.1
这种地址是有使用同一路由器或交换机的设备可以相互访问的。如果你希望自己的设备可以在公网中能够正常使用,需要打电话给自己的宽带运营商申请公网IP。
在国外就不用考虑申请公网IP这个问题,因为国外的人口较少,公网IP地址是绝对够用的。但国内无论是人口还是设备都非常多,而IPv4的地址段有限,所以默认情况下各宽带运营商是不会为我们开通公网IP功能的。
- 移动宽带近两年申请公网的可能性几乎为0%
- 联通宽带近两年申请公网的可能性不足30%
- 电信宽带近两年申请公网的可能性较大,但是需要亲自到营业厅签署公网申请协议,避免非法用途。
如果你没有公网IP,那么其他人即使拥有你的SD公网链接和账号密码,也是无法远程访问SD进行AI绘画的。
点击下文前往Stable Diffusion的教程总目录,学习其它内容。
Gradio生成的链接实际使用中不到几分钟就挂了,怎么破
@Isnpidea emmm,你是指公网链接吗?有报错吗?
我发现这样会把图片生成到服务器上而不是client的某个目录。有没有参数可以让图片生成到当前电脑上….
@chunrix 这个我刚刚研究了一下,好像是不可以的。但是你可以安装图库插件,直接在SD内查看或下载已生成的内容,也很方便哈。
@PhiltreX 居然有这样的插件,我去看看!
你好,想问下几个问题:1,局域网和公网可不可以同时布局都生效,2,布局公网要不要路由器做端口映射之类的 3,如果布局了局域网,怎样在主机上重新登录sd,你的教程让我理解为只能二选一吗?谢谢
@wong 1.在局域网里访问公网的地址就可以啦,与直接使用内网的方式一样,所以没必要单独区别开。
2.如果需要绑定域名的话,需要绑定端口映射,而且前提是必须有公网权限。如果没有公网权限,需要做内网穿透,那肯定更是要映射的了。
3.本机部署局域网之后,在本机仍然可以使用127.0.0.1来访问的,这并不冲突。
老铁,这个添加–listen可以局域网访问了,我电脑有公网ipv6,确定ipv6在公网下是通的,其他服务是可以访问的,但是[ipv6]:7860是访问不了的,是不是stable diffusion不支持ipv6啊
@ilray 应该是支持的,但是公司的公网IP是需要网管将端口做路由器转发的。
您好,阿里云部署sd,启动的时候出现2个链接,Running on local URL和Running on public URL,都能访问,想问下用第一个链接会产生流量吗?或者什么其它费用什么的
@vanessa 抱歉,关于云服务器网络部署这一块我不太清楚。但是理论上,上传的流量不会产生费用,但是下载好像会。
我在局域网其他电脑连接的时候,登陆以后老是报错:Something went wrong 连接出错,不知道问题出在哪里
@lucky emmm 你这个错误提示是“出了些问题”,太泛指了,我没有办法找到具体的原因,你换个浏览器试一下吧。
大神你好,我想在公网上把我的本地部署sd共享给同事,按照你的方法修改了配置文件,但是并没有生成Running on public URL: 类似于这个的,本机可用。请问怎么解决,感谢
Running on local URL: http://127.0.0.1:7860
To create a public link, set `share=True` in `launch()`.
DiffusionWrapper has 859.54 M params.
Startup time: 6.4s (import torch: 1.2s, import gradio: 0.7s, import ldm: 0.4s, other imports: 0.6s, load scripts: 0.9s, create ui: 2.0s, gradio launch: 0.4s).
WARNING: Invalid HTTP request received.
WARNING: Invalid HTTP request received.
@大罗 参数加错了吧,应该是
--share
请问,这个是不是只能用于手动部署的stable diffusion版本?下载的那种一键启动,我修改了这个配置以后,地址依旧是127.0.0.1:7680
我试着在文件夹,通过cmd来运行webui-user.bat 运行以后就开始下载一个2.6g文件了。是否会和我之前的一键启动程序冲突喃?
@坐等真相 我这里没有尝试过使用其它的一键安装启动版本,不建议使用一键启动,因为那可能会存在各种各样的问题。
LatentDiffusion: Running in eps-prediction mode
DiffusionWrapper has 859.52 M params.
ERROR: [Errno 10048] error while attempting to bind on address (‘0.0.0.0’, 7860): 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。
@坐等真相 这个错误提示说明在尝试绑定套接字地址时发生了错误,因为该地址已经被其他程序或进程占用。具体而言,错误信息 “error while attempting to bind on address (‘0.0.0.0’, 7860): 通常每个套接字地址(协议/网络地址/端口)只允许使用一次” 表示在尝试使用地址 (‘0.0.0.0’, 7860) 绑定套接字时出错。
你需要确保自己的7860没有被占用,或者手动为SD指定一下其它端口。
建议用Nginx暴露出去,Gradio提供的要去外网绕一圈。Nginx需要注意设置超时时间。
@深蓝 感谢提醒,我这里还真没尝试过Nginx。
我是用公网模式,让其他网络的朋友试了一下能访问 但是生不出图片
什么时候可以在那种一键启动器里面配置局域网的就好了
@花花 已经有了,B站上 akki 的整合包启动器里就能改
这个可以部署在服务器吧?我有这个想法,但是没有试验过,只要有web,就可以和部署网站一样,服务器上配置IIS或者NGINX服务,网站是localhost:80,但是我还没想好,怎么搞定这个地址跳转还有访问权限问题。
@pakkey 这个我还真没研究过,理论上不需要这么麻烦。你的云服务器应该是自带公网IP的,你只需要开放端口就行了。如果想要绑定域名就将SD的端口修改成80,或者做个映射,用域名直接绑定就好。