Stable Diffusion是一个开源的深度学习模型,能够以较低的计算需求和高效的性能根据文本提示生成对应的图像。阿里云基于Stable Diffusion,在其基础上提供更加简洁易操作的UI并进行封装,为企业提供了AI模型应用Stable-Diffusion-WebUI。本文为您介绍如何手动部署Stable-Diffusion-WebUI服务。
方案概览
本方案介绍了使用模型在线服务PAI-EAS部署Stable-Diffusion-WebUI,并在WebUI进行AI绘画的详细过程。完成本方案的部署及体验,预计产生费用不超过15元。(假设您选择最低规格PAI-EAS资源,且资源运行时间不超过60分钟。如调整了资源规格,请以控制台显示的实际报价以及最终账单为准)。
本方案以模型在线服务PAI-EAS为基础,实现对Stable-Diffusion-WebUI(以下简称SD WebUI)进行云端便捷部署,并使用其进行AI绘画。具体优势与功能如下:
使用便捷:快捷部署,开箱即用;可根据需求动态切换GPU等底层资源。
企业级功能:前后端分离改造,支持多用户对多GPU的集群调度;支持用户隔离;支持账单拆分。
插件及优化:支持PAI-Blade性能优化工具;提供FileBrowser插件,允许用户在桌面端上传和下载云端模型、图片;提供自研的ModelZoo插件,支持开源模型下载加速。
部署形态
PAI SD WebUI支持以单机版、集群版或API版的形态进行部署,三者基于完全相同的部署流程。
单机版:面向个人用户,通过PAI SD WebUI解决方案获得与桌面端使用体验完全一致的云端WebUI服务。支持纯界面化操作,部署方式简单。
集群版:面向企业客户,通过PAI SD WebUI解决方案获得WebUI集群服务,支持多卡调度、用户身份识别和隔离。集群版通常适合有专属IT或运维支持的用户,集群版开放了更多可配置的参数供IT和运维使用,美术或设计用户简单熟悉后也可自主完成集群版的部署和使用。更多信息,请参见5分钟使用EAS部署Stable Diffusion API服务。
API版:建议在WebUI上搭建业务系统,并在二次开发时使用。使用异步API模式进行部署,并通过API访问来实现多实例的水平伸缩。结合EAS异步推理,您可以获得请求排队、异步推理、负载均衡和自动弹性伸缩等能力。社区WebUI提供了标准的文生图、图生图等接口,而PAI在这些接口的基础上进行了定制优化,以适应云上分布式场景。
方案架构
在实际部署时,您可以按本方案提供的默认设置完成部署,也可以根据实际资源规划修改部分设置。部署完成后,运行架构如下:
本方案的技术架构包括以下基础设施和云服务:
专有网络VPC:形成云上私有网络。
交换机:提供基本的网络分段和隔离功能。
公网NAT网关:用于将私网资源的请求转发到公网,实现私网资源对外提供服务的能力。
弹性公网IP:与NAT网关结合使用,帮助用户实现出口流量转发、入口地址转换和公网访问等功能,更灵活地管理和使用公网资源。
安全组:用于限制专有网络VPC下交换机的网络流入和流出。
存储系统:推荐使用文件存储NAS。大容量、高性价比、弹性扩展,适合通用类文件共享业务,用于存储使用SD WebUI生成的各类结果。
模型在线服务PAI-EAS实例:用于部署SD WebUI。
规划网络和资源
在进行网络和资源规划时,您可以根据实际环境进行规划,各规划项说明如下:
规划网络
规划项 | 说明 |
地域 | 本解决方案的地域采用新加坡。 选择地域的基本原则请参见地域和可用区。由于在新加坡地域开通弹性公网IP服务后,访问Civitai和Github的网速高效稳定,您可以直接通过WebUI下载插件和Civitai模型,且WebUI的网页操作体验与国内地域的部署一致,因此推荐选择新加坡。 |
专有网络VPC | 本方案创建1个专有网络VPC作为专有网络。 您可以在阿里云中创建自己的专属虚拟网络,以实现隔离和私密性。VPC还提供了灵活的IP地址管理、子网划分和网络访问控制等功能。 |
交换机 | 本方案在创建专有网络VPC时创建1台交换机。 在VPC内部的子网中进行数据包转发和连接网络资源。 |
公网NAT网关 | 本方案在VPC中创建1个公网NAT网关。 阿里云提供的一种网络转发设备,主要用于将私网资源的请求转发到公网,实现私网资源对外提供服务的能力。 |
弹性公网IP | 本方案在创建公网NAT网关时一同创建1个弹性公网IP。 阿里云提供的一种公网访问服务,可以与NAT网关结合使用,帮助您实现出口流量转发、入口地址转换和公网访问等功能,更灵活地管理和使用公网资源。 |
安全组 | 本方案创建1个安全组。 安全组用于限制专有网络VPC下云服务器ECS的网络流入和流出规则。 |
规划云资源
规划项 | 说明 |
模型在线服务PAI-EAS | 本方案会把SD WebUI部署在模型在线服务PAI-EAS上。 |
文件存储NAS(推荐) | 本方案推荐使用NAS作为共享存储。 阿里云上独立的高性能存储产品,与PAI SD WebUI方案打通。在挂载文件存储NAS后,可以快速方便地存储和使用SD WebUI生成的各种结果。 |
部署资源
规划好资源后,请按照以下步骤部署方案中的所有资源。关于部署资源的相关事项,请参见附录。
创建专有网络VPC和交换机
在本方案中,您需要创建1个专有网络和1台交换机。
登录专有网络控制台。
在顶部菜单栏,选择新加坡地域。
在左侧导航栏,单击专有网络。
在专有网络页面,单击创建专有网络,创建1个专有网络和1台交换机。关键参数配置如下,其余参数取默认:
参数
示例值
说明
专有网络
名称
vpc_SDWebUI
VPC名称,建议您在部署过程中新建一个VPC作为本方案的专有网络。
IPv4网段
192.168.0.0/16
在创建VPC时,您必须按照无类域间路由块(CIDR block)的格式为您的专有网络划分私网网段。阿里云VPC支持的网段信息请参见专有网络组成部分。
在网络规划时可以按照“管理网段-开发网段-测试网段-生产网段”等规则做好规划。网段一旦投入使用,调整过程复杂,因此规划十分重要。
交换机
名称
vswitch_SDWebUI
虚拟交换机名称。
可用区
新加坡 可用区A
在规划的地域内选择1个可用区,虚拟交换机部署在这个可用区上。
建议选择排序靠后的,一般此类可用区较新。新可用区资源更充沛,新规格也会在新的可用区优先上线。
IPv4网段
192.168.0.0/24
配置虚拟交换机的IPv4网段,为VPC网段的真子集。
单击确定,完成专有网络和交换机的创建。
创建公网NAT网关和弹性公网IP
您已经在专有网络VPC下的1个可用区创建了1台交换机。接下来您需要创建公网NAT网关和弹性公网IP。
登录专有网络控制台。
在顶部菜单栏,选择新加坡地域。
在左侧导航栏,选择
。在公网NAT网关页面,单击创建NAT网关,创建1个公网NAT网关和1个弹性公网IP。关键参数配置如下,其余参数取默认:
参数
示例值
说明
标签键
WebUI
资源的标识符,分类的名称。
标签值
SD_WebUI
与标签键相关联的具体值。
所属专有网络
vpc_SDWebUI/****
NAT网关所属的专有网络。
本方案选择上述步骤已创建的专有网络VPC。
关联交换机
vswitch_SDWebUI/****
NAT网关关联的交换机。
本方案选择上述步骤已创建的交换机。
实例名称
nat_SDWebUI
NAT网关的实例名称。
访问模式
VPC全通模式(SNAT)
NAT网关的访问模式。
本方案选择VPC全通模式,VPC中的所有机器即可通过NAT网关访问公网。
弹性公网IP
新购弹性公网IP
可以选择已有弹性公网IP,也可以新购。
带宽峰值
200 Mbps
设置带宽峰值,支持随时调整带宽峰值。
计费类型
按使用流量计费
设置计费类型。
单击立即购买,完成公网NAT网关和弹性公网IP的创建。
创建安全组
您已经在专有网络VPC下的1个可用区创建了1台交换机。接下来您需要创建1个安全组,用于限制该专有网络VPC下交换机的网络流入和流出。
在左侧导航栏,选择
。在顶部菜单栏,选择新加坡地域。
在安全组页面,单击创建安全组,创建1个安全组,关键参数配置如下,其余参数取默认:
参数
示例值
说明
安全组名称
sg_SDWebUI
设置安全组的名称。
网络
****/vpc_SDWebUI
选择上述步骤已创建的专有网络VPC。
安全组类型
普通安全组
本方案选择普通安全组,以实现公网出方向所有地址可访问。实际部署时,建议选择安全性更高的企业级安全组。
入方向
80
和443
本方案使用默认开通的80和443端口号,删除其他端口号。
单击创建安全组,完成安全组的创建。
创建文件存储NAS
在进行模型服务部署时,推荐选择存储规格为性能型的NAS进行挂载,以提高模型切换和图像生成的速度。因此,您需要创建1个通用型NAS。
在左侧导航栏,选择
。在顶部菜单栏,选择亚太东南1(新加坡)地域。
在文件系统列表页面,单击创建文件系统,选择创建通用型NAS。关键参数配置如下,其余参数取默认:
参数
示例值
说明
存储规格
性能型
选择通用型NAS的规格。推荐选择性能型,切换模型和出图速度更快。
专有网络VPC
vpc_SDWebUI
选择上述步骤中已创建的专有网络VPC。
虚拟交换机
vswitch_SDWebUI
选择上述步骤中已创建的虚拟交换机。
选中服务协议,单击立即购买,完成文件存储NAS的创建。
创建完成后,您可以在文件系统列表页面对应的文件系统 ID/名称处单击,修改文件系统的名称。在本方案中,将其修改为nas_SDWebUI。
部署PAI-EAS模型服务
在成功部署资源后,你可以部署SD WebUI模型服务。本方案以部署集群版模型服务为例,具体操作步骤如下:
登录PAI控制台。
在顶部菜单栏,选择新加坡地域。
在左侧导航栏单击工作空间列表,在工作空间列表页面中单击任意一个工作空间名称,进入对应工作空间内。如果没有可用的工作空间,请创建工作空间。
在工作空间页面的左侧导航栏选择
,进入模型在线服务(EAS)页面。在推理服务页签下单击部署服务,选择自定义部署,在新建服务模式下配置以下关键参数,其余参数取默认:
参数
示例值
说明
模型服务信息
服务名称
sdwebui
自定义服务名称,在同一个地域下,全局唯一。
部署方式
镜像部署AI-Web应用
服务的部署方式。
镜像选择
镜像类型:PAI平台镜像
镜像名称:stable-diffusion-webui
镜像版本:选择最新集群版本
选择SD WebUI的镜像,本方案以部署集群版模型服务为例。
选中阅读并同意PAI服务专用协议。
模型配置
挂载类型:NAS挂载
NAS 挂载点:nas_SDWebUI以及相应挂载点
NAS 源路径:
/
挂载路径:
/code/stable-diffusion-webui/data-nas
单击填写模型配置,选择挂载的共享存储、挂载点和挂载路径。
运行命令
运行命令:
./webui.sh --listen --port 8000 --skip-version-check --no-hashing --no-download-sd-model --skip-install --api --filebrowser --cluster-status --sd-dynamic-cache --data-dir /code/stable-diffusion-webui/data-nas
端口号:8000
完成上述配置后,系统将自动生成相应的运行命令。
使用NAS挂载后,需要在运行命令中增加命令:
--data-dir /code/stable-diffusion-webui/data-nas
。(可选)您也可以在运行命令中增加参数
--blade
来开启blade加速,以提升出图速度。更多参数说明,请参见附录。
资源部署信息
资源组种类
公共资源组
选择用于部署和运行服务的资源。
实例数
1
服务实例数。
资源配置方法
常规资源配置
本方案选择常规资源配置。
资源配置选择
资源类型:GPU
实例规格:ecs.gn6i-c16g1.4xlarge
建议使用GPU类型,例如选择规格为ecs.gn6i-c16g1.4xlarge。
专有网络配置(自动匹配)
VPC
vpc_SDWebUI
系统将自动匹配与NAS一致的专有网络VPC、交换机和安全组,无需额外配置。
交换机
vswitch_SDWebUI
安全组名称
sg_SDWebUI
完成上述配置后,在对应配置编辑区域会自动生成对应的JSON文件。
单击部署,大约等待5~10分钟后即可完成模型部署。
方案验证
完成以上操作后,您已经成功完成了SD WebUI集群版的部署。您可以启动WebUI页面,进行模型推理验证。
在模型在线服务(EAS)页面中,单击上述步骤中已部署的模型服务服务方式列的查看Web应用。
首次登录时,您需要在您的专属工作空间首页中等待约5分钟,然后单击进入Stable Diffusion WebUI,进入WebUI页面。
在SD WebUI页面文生图页签中,输入正向提示词Prompt,例如
a monkey is eating a green banana
,然后单击生成,即可完成AI绘图,效果图如下:后续,您可以通过SD WebUI完成文生图、图生图等任务,还可以使用SD WebUI进行后期处理、模型融合和训练等操作。另外,您还可以使用FileBrowser进行文件管理,Filebrowser支持在桌面端上传和下载云端模型和图片。
资源清理
在本方案中,您部署了1个PAI-EAS服务,创建了1个专有网络VPC、1个交换机、1个公网NAT网关、1个弹性公网IP、1个安全组和1个文件存储NAS(如果您使用NAS进行存储)。测试完方案后,您可以参考以下规则处理对应产品的实例,避免继续产生费用:
释放1个PAI-EAS模型在线服务:
登录PAI控制台,在 页面,单击进入EAS,在推理服务页签中单击目标服务操作列下的删除,按照界面提示删除该服务。
释放1个弹性公网IP:
登录专有网络控制台,在 页面,找到目标弹性公网IP,然后单击操作列下的解绑,将弹性公网IP与公网NAT网关解绑,然后再单击操作列下的释放,释放该弹性公网IP。
释放1个公网NAT网关:
登录专有网络控制台,在 页面,找到目标网关,然后在操作列单击删除,释放该公网NAT网关。
释放1台交换机:
登录专有网络控制台,在交换机页面,找到目标交换机,然后单击操作列下的删除,按照界面提示释放该交换机。
释放1个专有网络VPC:
登录专有网络控制台,在专有网络页面,找到目标VPC,然后单击操作列下的删除,按照界面提示释放该专有网络VPC。
释放1个安全组:
登录ECS管理控制台,在 页面,找到目标安全组,然后单击操作列下的删除,删除该安全组。
删除1个文件存储NAS:
登录文件存储控制台,在 页面,找到目标文件存储NAS,然后单击操作列下的删除,删除该NAS。
相关文档
EAS提供了Stable Diffusion的场景化部署方式,您只需配置几个参数,即可一键部署基于Stable Diffusion WebUI的服务。关于场景化部署支持的部署形态、部署流程、调用方式以及常见问题等更详细的内容介绍,请参见AI绘画-SDWebUI部署。
附录
部署和使用tips
部署地域:建议服务部署在新加坡
新加坡地域开通弹性公网IP服务后,访问Civitai和Github的网速高效稳定,您可以直接通过WebUI下载插件、Civitai模型,且WebUI网页操作体验与国内region部署一致。
国内地域因网络问题,无法直接在WebUI下载Civitai模型、插件,需要手动下载到本地后,再上传至云端服务。
共享存储:建议使用共享存储NAS,且部署时使用
--data-dir
参数该操作会将模型、图片等核心内容均放置于共享存储,服务重启、删除重建等操作不会受到影响。
共享存储可选OSS或NAS,建议优先选择NAS(通用型NAS,性能型规格),在模型切换、图库浏览器等场景使用NAS存储的速度比OSS快4倍以上。
如果需要使用对象存储OSS Bucket,在切换模型场景时性能低,影响体验。如果需要将图片统一存储到OSS中,可以通过配置,将模型存储于NAS,生成的图片存储于OSS。
版本和部署方式选择:建议选择最新版本
x.x-standard:推荐单用户测试验证时使用。标准单机部署,UI模式,仅能部署单个实例,不具备分布式能力,基本和社区WebUI保持一致。
x.x-cluster-webui:推荐在公司内部有美术、设计等多人团队,并且尽可能节约成本的场景中使用。多租户集群版模式,UI模式,支持多用户同时使用前端界面,但资源相互隔离,包括使用的模型、Lora、插件、输出图片等。并且每个用户前端均支持个性化设置,也可支持共享模型等设置。另外,后端实际推理服务也可以和普通EAS服务一样,支持定时伸缩、弹性伸缩,并且支持根据实际上线的用户数和请求数来扩缩容,最大程度上节约服务运行成本。
x.x-api:建议在WebUI上搭建业务系统,并在二次开发时使用。使用异步API模式进行部署,并通过API访问来实现多实例的水平伸缩。结合EAS异步推理,您可以获得请求排队、异步推理、负载均衡和自动弹性伸缩等能力。社区WebUI提供了标准的文生图、图生图等接口,而PAI在这些接口的基础上进行了定制优化,以适应云上分布式场景。
如果有场景上选择问题,请联系您的商务经理进行处理。
模型上传
通过FileBrowser插件上传。适合Lora等体积较小的文件上传,批量上传多个4 GB以上的基础大模型失败概率较高。适合美术团队日常使用。
通过ossutil或ECS挂载NAS上传。适合批量上传基础大模型,需要有一定IT基础。适合运维或技术团队协助美术团队进行一次性上传。
模型下载
安装Civitai助手插件后,可以直接下载Civitai模型。适合美术团队使用。
通过EAS提供的SSH功能,登录到容器内部通过命令进行下载。适合运维或技术团队协助美术团队使用。
服务启动时可配置的参数说明
公共参数
公共参数
功能说明
使用建议
--blade
启用PAI-blade加速,提升出图速度。
建议开启。
--filebrowser
支持您自主上传、下载模型或图片的插件。
默认启用。
--data-dir /code/stable-diffusion-webui/data-oss
持久化存储挂载使用的路径。
挂载持久化存储时使用,默认起始路径为
/code/stable-diffusion-webui/
,也可以使用相对路径。--api
WebUI的API调用模式。
默认启用。
--enable-nsfw-censor
默认关闭。如果您有安全合规需求,则可以选择开启鉴黄过滤功能。
根据业务需要进行调整。
--always-hide-tabs
指定部分Tab页处于隐藏状态。
根据业务需要进行调整。
--min-ram-reserved 40 --sd-dynamic-cache
缓存Stable Diffusion大模型到内存中。
无。
集群版参数
说明ckpt的大模型和ControlNet的大模型会自动加载公共目录下的文件和您自定义的文件。
集群版参数
功能说明
使用建议
--lora-dir
指定公共Lora模型目录,例如:
--lora-dir /code/stable-diffusion-webui/data-oss/models/Lora
。默认不配置,用户的所有Lora目录将被隔离,并且只加载用户文件夹中的Lora模型。当指定特定目录后,所有的用户将同时加载该公共目录中的Lora模型和用户文件夹中的Lora模型。
--vae-dir
指定公共VAE模型目录,例如:
--vae-dir /code/stable-diffusion-webui/data-oss/models/VAE
。默认不配置,用户的所有VAE目录将被隔离,并且只加载用户文件夹中的VAE模型。当指定特定目录后,所有的用户只加载该公共目录下的VAE模型。
--gfpgan-dir
指定公共GFPGAN模型目录,例如:
--gfpgan-dir /code/stable-diffusion-webui/data-oss/models/GFPGAN
。默认不配置,用户的所有GFPGAN目录将被隔离,并且只加载用户文件夹中的GFPGAN模型。当指定特定目录后,所有的用户只加载该公共目录下的GFPGAN模型。
--embeddings-dir
指定公共embeddings模型目录,例如:
--embeddings-dir /code/stable-diffusion-webui/data-oss/embeddings
。默认不配置,用户的所有embeddings目录将被隔离,并且只加载用户文件夹中的embeddings模型。当指定特定目录后,所有的用户只加载该公共目录下的embeddings模型。
--hypernetwork-dir
指定公共hypernetwork模型目录,例如:
--hypernetwork-dir /code/stable-diffusion-webui/data-oss/models/hypernetworks
。默认不配置,用户的所有hypernetwork目录将被隔离,并且只加载用户文件夹中的hypernetwork模型。当指定特定目录后,所有的用户只加载该公共目录下的hypernetwork模型。
--root-extensions
插件目录使用共享目录。使用该参数后,所有用户看到的插件完全相同。
需要集中安装插件或集中管理插件时使用该参数。