背景说明
阿里云计算巢提供了Stable Diffusion快速部署及下载自定义模型功能,使用者不需要自己下载代码,不需要自己安装复杂的依赖,不需要了解Git、Python、Docker等技术,只需要在控制台图形界面点击几下鼠标就可以快速启动Stable Diffusion服务进行绘画,非技术同学也能轻松搞定。
前文计算巢推出了单机版快速部署解决方案,参考
https://help.aliyun.com/practice_detail/611227
针对于多人共同使用出图的场景下,stable diffusion webui会排队出图的问题,计算巢推出了集群版stable diffusion快速部署的功能。
适用场景
-
固定配置场景下的多人webui出图多场景,目的在于多机提速
-
API调用集成的场景
主要功能包括
-
支持一键部署
-
支持弹性扩缩容
-
支持多机负载均衡调用
-
支持下载模型、下载插件等常用运维功能
架构说明
-
基于NAS做ECS间的共享存储,用于存放webui的配置、模型、插件功能
-
基于SLB负载均衡做多机流量的转发,对于多用户使用的场景,开启slb会话保持功能,对于api调用的场景下关闭会话保持
-
基于ESS弹性伸缩做ecs的动态扩缩容功能,默认需要手动扩缩容,如果有需要可以配置按cpu/gpu负载的动态扩缩容
-
NAT网关做集群的外网流量访问出口
方案实践
-
登录阿里云计算巢控制台 ,进入Stable Diffusion服务创建界面,根据界面提示,模版选择gpu集群版,填写相关参数(软件登录名及登录密码很重要,后面访问WebUI需要用到),填写完成点击确认订单。推荐选择按量付费方式,使用完将实例释放掉或 选择节省停机模式进行关机(会在下文介绍) 以节省成本。
(可选项)若想要将生成图片的结果(包括prompt等参数及生成的图片)存储到RDS,可以开启RDS插件功能。参数说明在创建服务实例的过程中,需要配置服务实例信息。下表介绍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数据 |
-
勾选我已阅读并同意《计算巢服务协议》,点击"立即创建"按钮。
-
查看部署进度。 点击去列表页查看,可以看到刚刚创建的服务实例以及服务部署进度。
-
访问stable-diffusion 等待状态变为"已部署"后,点击详情,进入对应的服务实例后,可以在页面上获取Endpoint以访问服务。 点击Endpoint后面的链接,输入第1步设置的软件登录名及密码。
-
完成验证后即可访问:
-
在运维管理中三个点里可以选择弹性扩缩容功能
点击确定即可完成2台机器扩容,同时还可以到对应的伸缩组中,按监控负载完成自动的弹性扩缩容
API访问
通过计算巢创建的Stable Diffusion默认开启了API访问,您可以通过API调用来更好地集成我们的服务。 通过上述步骤4中获取的Endpoint+/docs# 可以看到所有可访问的API列表,如访问 http://48.xxx.xx.163:8080/docs#可以看到
以下是一个通过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)场景下提供一键部署、高效运维、弹性伸缩等功能,提供详细的报价信息、资源分组、分账展示等功能,方便客户在解决方案类场景下快速部署落地。