手动部署Stable Diffusion WebUI服务

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在这些接口的基础上进行了定制优化,以适应云上分布式场景。

方案架构

在实际部署时,您可以按本方案提供的默认设置完成部署,也可以根据实际资源规划修改部分设置。部署完成后,运行架构如下:

image

本方案的技术架构包括以下基础设施和云服务:

  • 专有网络VPC:形成云上私有网络。

  • 交换机:提供基本的网络分段和隔离功能。

  • 公网NAT网关:用于将私网资源的请求转发到公网,实现私网资源对外提供服务的能力。

  • 弹性公网IP:与NAT网关结合使用,帮助用户实现出口流量转发、入口地址转换和公网访问等功能,更灵活地管理和使用公网资源。

  • 安全组:用于限制专有网络VPC下交换机的网络流入和流出。

  • 存储系统:推荐使用文件存储NAS。大容量、高性价比、弹性扩展,适合通用类文件共享业务,用于存储使用SD WebUI生成的各类结果。

  • 模型在线服务PAI-EAS实例:用于部署SD WebUI。

规划网络和资源

在进行网络和资源规划时,您可以根据实际环境进行规划,各规划项说明如下:

规划网络

规划项

说明

地域

本解决方案的地域采用新加坡

选择地域的基本原则请参见地域和可用区由于在新加坡地域开通弹性公网IP服务后,访问CivitaiGithub的网速高效稳定,您可以直接通过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. 登录专有网络控制台

  2. 在顶部菜单栏,选择新加坡地域。

  3. 在左侧导航栏,单击专有网络

  4. 专有网络页面,单击创建专有网络,创建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网段的真子集。

  5. 单击确定,完成专有网络和交换机的创建。

创建公网NAT网关和弹性公网IP

您已经在专有网络VPC下的1个可用区创建了1台交换机。接下来您需要创建公网NAT网关和弹性公网IP。

  1. 登录专有网络控制台

  2. 在顶部菜单栏,选择新加坡地域。

  3. 在左侧导航栏,选择NAT网关 > 公网NAT网关

  4. 公网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

    设置带宽峰值,支持随时调整带宽峰值。

    计费类型

    按使用流量计费

    设置计费类型。

  5. 单击立即购买,完成公网NAT网关和弹性公网IP的创建。

创建安全组

您已经在专有网络VPC下的1个可用区创建了1台交换机。接下来您需要创建1个安全组,用于限制该专有网络VPC下交换机的网络流入和流出。

  1. 登录ECS控制台

  2. 在左侧导航栏,选择网络与安全 > 安全组

  3. 在顶部菜单栏,选择新加坡地域。

  4. 安全组页面,单击创建安全组,创建1个安全组,关键参数配置如下,其余参数取默认:

    参数

    示例值

    说明

    安全组名称

    sg_SDWebUI

    设置安全组的名称。

    网络

    ****/vpc_SDWebUI

    选择上述步骤已创建的专有网络VPC。

    安全组类型

    普通安全组

    本方案选择普通安全组,以实现公网出方向所有地址可访问。实际部署时,建议选择安全性更高的企业级安全组。

    入方向

    80443

    本方案使用默认开通的80443端口号,删除其他端口号。

  5. 单击创建安全组,完成安全组的创建。

创建文件存储NAS

在进行模型服务部署时,推荐选择存储规格为性能型的NAS进行挂载,以提高模型切换和图像生成的速度。因此,您需要创建1个通用型NAS。

  1. 登录文件存储控制台

  2. 在左侧导航栏,选择文件系统 > 文件系统列表

  3. 在顶部菜单栏,选择亚太东南1(新加坡)地域。

  4. 文件系统列表页面,单击创建文件系统,选择创建通用型NAS。关键参数配置如下,其余参数取默认:

    参数

    示例值

    说明

    存储规格

    性能型

    选择通用型NAS的规格。推荐选择性能型,切换模型和出图速度更快。

    专有网络VPC

    vpc_SDWebUI

    选择上述步骤中已创建的专有网络VPC。

    虚拟交换机

    vswitch_SDWebUI

    选择上述步骤中已创建的虚拟交换机。

  5. 选中服务协议,单击立即购买,完成文件存储NAS的创建。

    创建完成后,您可以在文件系统列表页面对应的文件系统 ID/名称处单击image.png,修改文件系统的名称。在本方案中,将其修改为nas_SDWebUI。

部署PAI-EAS模型服务

在成功部署资源后,你可以部署SD WebUI模型服务。本方案以部署集群版模型服务为例,具体操作步骤如下:

  1. 登录PAI控制台

  2. 在顶部菜单栏,选择新加坡地域。

  3. 在左侧导航栏单击工作空间列表,在工作空间列表页面中单击任意一个工作空间名称,进入对应工作空间内。如果没有可用的工作空间,请创建工作空间

  4. 在工作空间页面的左侧导航栏选择模型部署 > 模型在线服务(EAS),进入模型在线服务(EAS)页面。

  5. 推理服务页签下单击部署服务,选择自定义部署,在新建服务模式下配置以下关键参数,其余参数取默认:

    参数

    示例值

    说明

    模型服务信息

    服务名称

    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文件。

  6. 单击部署,大约等待5~10分钟后即可完成模型部署。

方案验证

完成以上操作后,您已经成功完成了SD WebUI集群版的部署。您可以启动WebUI页面,进行模型推理验证。

  1. 模型在线服务(EAS)页面中,单击上述步骤中已部署的模型服务服务方式列的查看Web应用

    首次登录时,您需要在您的专属工作空间首页中等待约5分钟,然后单击进入Stable Diffusion WebUI,进入WebUI页面。

  2. SD WebUI页面文生图页签中,输入正向提示词Prompt,例如a monkey is eating a green banana,然后单击生成,即可完成AI绘图,效果图如下:image

    后续,您可以通过SD WebUI完成文生图、图生图等任务,还可以使用SD WebUI进行后期处理、模型融合和训练等操作。另外,您还可以使用FileBrowser进行文件管理,Filebrowser支持在桌面端上传和下载云端模型和图片。

资源清理

在本方案中,您部署了1PAI-EAS服务,创建了1个专有网络VPC、1个交换机、1个公网NAT网关、1个弹性公网IP、1个安全组和1个文件存储NAS(如果您使用NAS进行存储)。测试完方案后,您可以参考以下规则处理对应产品的实例,避免继续产生费用:

  • 释放1PAI-EAS模型在线服务:

    登录PAI控制台,在模型部署 > 模型在线服务(EAS)页面,单击进入EAS,在推理服务页签中单击目标服务操作列下的删除,按照界面提示删除该服务。

  • 释放1个弹性公网IP:

    登录专有网络控制台,在公网访问 > 弹性公网IP页面,找到目标弹性公网IP,然后单击操作列下的解绑,将弹性公网IP与公网NAT网关解绑,然后再单击操作列下的释放,释放该弹性公网IP。

  • 释放1个公网NAT网关:

    登录专有网络控制台,在NAT网关 > 公网NAT网关页面,找到目标网关,然后在操作列单击删除,释放该公网NAT网关。

  • 释放1台交换机:

    登录专有网络控制台,在交换机页面,找到目标交换机,然后单击操作列下的删除,按照界面提示释放该交换机。

  • 释放1个专有网络VPC:

    登录专有网络控制台,在专有网络页面,找到目标VPC,然后单击操作列下的删除,按照界面提示释放该专有网络VPC。

  • 释放1个安全组:

    登录ECS管理控制台,在网络与安全 > 安全组页面,找到目标安全组,然后单击操作列下的删除,删除该安全组。

  • 删除1个文件存储NAS:

    登录文件存储控制台,在文件系统 > 文件系统列表页面,找到目标文件存储NAS,然后单击操作列下的删除,删除该NAS。

相关文档

EAS提供了Stable Diffusion的场景化部署方式,您只需配置几个参数,即可一键部署基于Stable Diffusion WebUI的服务。关于场景化部署支持的部署形态、部署流程、调用方式以及常见问题等更详细的内容介绍,请参见AI绘画-SDWebUI部署

附录

部署和使用tips

  • 部署地域:建议服务部署在新加坡

    • 新加坡地域开通弹性公网IP服务后,访问CivitaiGithub的网速高效稳定,您可以直接通过WebUI下载插件、Civitai模型,且WebUI网页操作体验与国内region部署一致。

    • 国内地域因网络问题,无法直接在WebUI下载Civitai模型、插件,需要手动下载到本地后,再上传至云端服务。

  • 共享存储:建议使用共享存储NAS,且部署时使用--data-dir参数

    • 该操作会将模型、图片等核心内容均放置于共享存储,服务重启、删除重建等操作不会受到影响。

    • 共享存储可选OSSNAS,建议优先选择NAS(通用型NAS,性能型规格),在模型切换、图库浏览器等场景使用NAS存储的速度比OSS4倍以上。

    • 如果需要使用对象存储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以上的基础大模型失败概率较高。适合美术团队日常使用。

    • 通过ossutilECS挂载NAS上传。适合批量上传基础大模型,需要有一定IT基础。适合运维或技术团队协助美术团队进行一次性上传。

  • 模型下载

    • 安装Civitai助手插件后,可以直接下载Civitai模型。适合美术团队使用。

    • 通过EAS提供的SSH功能,登录到容器内部通过命令进行下载。适合运维或技术团队协助美术团队使用。

服务启动时可配置的参数说明

  • 公共参数

    公共参数

    功能说明

    使用建议

    --blade

    启用PAI-blade加速,提升出图速度。

    建议开启。

    --filebrowser

    支持您自主上传、下载模型或图片的插件。

    默认启用。

    --data-dir /code/stable-diffusion-webui/data-oss

    持久化存储挂载使用的路径。

    挂载持久化存储时使用,默认起始路径为/code/stable-diffusion-webui/,也可以使用相对路径。

    --api

    WebUIAPI调用模式。

    默认启用。

    --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

    插件目录使用共享目录。使用该参数后,所有用户看到的插件完全相同。

    需要集中安装插件或集中管理插件时使用该参数。