Stable Diffusion集群版--计算巢私有化部署方案

  • 收获赞:
  • 擅长领域:

背景说明

阿里云计算巢提供了Stable Diffusion快速部署及下载自定义模型功能,使用者不需要自己下载代码,不需要自己安装复杂的依赖,不需要了解Git、Python、Docker等技术,只需要在控制台图形界面点击几下鼠标就可以快速启动Stable Diffusion服务进行绘画,非技术同学也能轻松搞定。

前文计算巢推出了单机版快速部署解决方案,参考

如何在阿里云快速启动Stable Diffusion轻松玩转AI绘画

针对于多人共同使用出图的场景下,stable diffusion webui会排队出图的问题,计算巢推出了集群版stable diffusion快速部署的功能。

适用场景:

  • 固定配置场景下的多人webui出图多场景,目的在于多机提速

  • API调用集成的场景

主要功能包括:

  • 支持一键部署

  • 支持弹性扩缩容

  • 支持多机负载均衡调用

  • 支持下载模型、下载插件等常用运维功能

架构说明

  • 基于NAS做ECS间的共享存储,用于存放webui的配置、模型、插件功能

  • 基于SLB负载均衡做多机流量的转发,对于多用户使用的场景,开启slb会话保持功能,对于api调用的场景下关闭会话保持

  • 基于ESS弹性伸缩做ecs的动态扩缩容功能,默认需要手动扩缩容,如果有需要可以配置按cpu/gpu负载的动态扩缩容

  • NAT网关做集群的外网流量访问出口

image.png

方案实践

  1. 登录阿里云计算巢控制台,进入Stable Diffusion服务创建界面,根据界面提示,模版选择gpu集群版,填写相关参数(软件登录名及登录密码很重要,后面访问WebUI需要用到),填写完成点击确认订单。推荐选择按量付费方式,使用完将实例释放掉或选择节省停机模式进行关机(会在下文介绍)以节省成本。

image.pngimage.pngimage.pngimage.png

(可选项)若想要将生成图片的结果(包括prompt等参数及生成的图片)存储到RDS,可以开启RDS插件功能。image.png参数说明:在创建服务实例的过程中,需要配置服务实例信息。下表介绍stable-diffusion服务实例输入参数的详细信息。

参数组

参数项

示例

说明

服务实例名称

test

实例的名称

地域

部署地域

新加坡

选中服务实例的地域,因为一些模型在国内无法下载访问,建议选择中国香港或海外地域

可用区配置

部署区域

可用区I

地域下的不同可用区域

付费类型配置

付费类型

按量付费 或 包年包月

ECS实例配置

实例类型

ecs.gn6i-c4g1.xlarge

实例规格,可以根据实际需求选择

ECS实例配置

实例密码

设置实例密码。长度8,30个字符,必须包含三项(大写字母、小写字母、数字、()`!@#$%^&*-+={}[]:;'<>,.?/ 中的特殊符号)

ECS实例配置

实例数量

实例数量

负载均衡配置

负载均衡规格

实例规格,可以根据实际需求选择

负载均衡配置

负载均衡会话保持

0关闭 600配置保持时间

API调用建议关闭会话保持

登录信息

软件登录名

admin

设置软件登录名,默认为admin

登录信息

软件登录名密码

设置软件登录密码

网络配置

专有网络IPv4网段

192.168.0.0/16

VPC的ip地址段范围

网络配置

交换机子网网段

192.168.0.0/24

交换机子网网段

登录信息

软件登录名

admin

软件登录名称

登录信息

软件登录密码

设置实例密码。长度830个字符,必须包含三项(大写字母、小写字母、数字、()`!@#$%^&*-+={}[]:;'<>,.?/ 中的特殊符号)

RDS插件配置

开启RDS插件

true

是否开启RDS插件,默认开启,如不需要可关闭

RDS实例配置

实例规格

mysql.n2.medium.1

RDS数据库实例规格,根据实际需求选择(优惠ing)

RDS实例配置

实例存储

20

RDS数据库存储空间,默认20GB(优惠ing)

RDS实例配置

数据库账号

rdsuser

RDS数据库的访问账号名

RDS实例配置

数据库密码

RDS数据库的访问密码,可登录数据库查看AI数据

  1. 勾选我已阅读并同意《计算巢服务协议》,点击"立即创建"按钮。image.pngimage.png

  2. 查看部署进度。 点击去列表页查看,可以看到刚刚创建的服务实例以及服务部署进度。image.png

  3. 访问stable-diffusion 等待状态变为"已部署"后,点击详情,进入对应的服务实例后,可以在页面上获取Endpoint以访问服务。image.png点击Endpoint后面的链接,输入第1步设置的软件登录名及密码。

image.png
  1. 完成验证后即可访问:image.png

  2. 在运维管理中三个点里可以选择弹性扩缩容功能

    image.png

image.png

点击确定即可完成2台机器扩容,同时还可以到对应的伸缩组中,按监控负载完成自动的弹性扩缩容

API访问

通过计算巢创建的Stable Diffusion默认开启了API访问,您可以通过API调用来更好地集成我们的服务。 通过上述步骤4中获取的Endpoint+/docs# 可以看到所有可访问的API列表,如访问 http://48.xxx.xx.163:8080/docs# 可以看到

image.png

以下是一个通过Python调用Stable Diffusion API的示例:

import requests
import io
import base64
from PIL import Image, PngImagePlugin

if __name__ == '__main__':
 url = "http://48.xxx.xx.163:8080"
 payload = {
 "prompt": "puppy dog",
 "steps": 5
 }
 token = "admin:password"
 encoded_token = base64.b64encode(token.encode("utf-8")).decode("utf-8")
 headers = {
 "Content-Type": "application/json",
 "Authorization": f'Basic {encoded_token}'
 }
 response = requests.post(url=f'{url}/sdapi/v1/txt2img', json=payload, headers=headers)
 r = response.json()
 for i in r['images']:
 image = Image.open(io.BytesIO(base64.b64decode(i.split(",", 1)[0])))
 png_payload = {
 "image": "data:image/png;base64," + i
 }
 response2 = requests.post(url=f'{url}/sdapi/v1/png-info', json=png_payload)
 pnginfo = PngImagePlugin.PngInfo()
 pnginfo.add_text("parameters", response2.json().get("info"))
 image.save('output.png', pnginfo=pnginfo)

更多API访问信息可查看API访问向导了解

其他功能

模型下载/插件下载/RDS相关功能 参考单机版功能相同不重复复制了https://help.aliyun.com/practice_detail/611227#d8e1e0e0c4jaj

总结

本文介绍了sd集群版的详细功能实践,计算巢在私有化部署(cloud op)场景下提供一键部署、高效运维、弹性伸缩等功能,提供详细的报价信息、资源分组、分账展示等功能,方便客户在解决方案类场景下快速部署落地。