Stable Diffusion AI绘画服务生成的图片结果(包括prompt等参数及生成的图片)需要进行存储,在Stable Diffusion服务的配置中,支持直接将图片结果存储在阿里云RDS MySQL数据库中,本文介绍如何配置Stable Diffusion服务实例并实现AI绘画。
背景信息
Stable Diffusion Web UI是一个基于Stable Diffusion的基础应用,利用gradio模块搭建出交互程序,可以在低代码GUI中立即访问Stable Diffusion。它支持文字生成图片,图片转图片,使用各种各样的模型来达到你想要的效果,还能训练您自己的专属模型。
前提条件
已开通阿里云账号。
确保账户余额充足。
说明如果开通按量付费实例,则账户中余额需大于100元。
步骤一:创建服务实例
登录计算巢控制台,在服务目录页的服务目录页签中,找到Stable Diffusion社区版服务。
单击查看详情进入服务详情页,然后单击正式创建,进入服务实例部署页面。
您也可以从服务商处获取服务实例部署链接。
在创建服务实例页面,根据界面提示填写参数,然后单击下一步:确认订单。
说明此处列举的为创建Stable Diffusion服务的关键参数,其他参数选择默认即可。
参数
说明
取值示例
选择模板
Stable Diffusion服务创建时已预设了两个模板,用于不同的应用场景:
gpu单机版:单机部署,费用较低,但可用性较低。
gpu集群版:支持负载均衡配置,适用于大型服务场景,具有较高的可用性。
本文仅作为示例,选择gpu单机版即可。
gpu单机版
服务实例名称
Stable Diffusion服务实例名称,可自定义。
sd-rds-test
资源组和地域
指定创建的实例所属资源组及地域。
资源组默认即可,您也可以按需选择自定义的资源组。
地域,不建议选择中国内地的地域,因为部分模型无法下载。
资源组:账号全部资源
地域:新加坡
付费类型配置
按量付费或包年包月,按需选择即可。
按量付费
ECS实例配置
实例类型:即ECS实例的资源规格,按实际需要选择即可。
实例密码:ECS实例的登录密码,自定义。
实例类型:ecs.gn6i-c4g1.xlarge
实例密码:ECSTestPW123!
重要此处密码仅作为示例,请勿直接在实际业务中使用。
登录信息
配置完成后,访问WebUI时需要使用,请妥善保管。
软件登录名:默认admin。
软件登录密码:自定义。
软件登录名:admin
软件登录密码:SDTestPW123!
重要此处密码仅作为示例,请勿直接在实际业务中使用。
RDS插件配置
本示例将RDS MySQL作为Stable Diffusion服务的后端存储服务,因此需要配置RDS相关配置。
开启RDS插件:固定配置为开启。
实例规格:即RDS实例的资源规格,按实际需要选择即可。
实例存储:RDS实例的存储空间大小,单位GB,按实际需要选择即可。
数据库账号名称:RDS实例的数据库账号。
实例密码:RDS实例数据库账号的密码。
开启RDS插件:开启
实例规格:mysql.n2.medium.1
实例存储:20
数据库账号名称:rdsuser
实例密码:RDSTestPW123!
重要此处密码仅作为示例,请勿直接在实际业务中使用。
可用区配置
交换机可用区:任意选择即可。
可用区A
选中我已阅读并同意《计算巢服务协议》,点击立即创建。
在左侧导航栏单击服务实例管理,即可在私有部署服务页签,查看Stable Diffusion服务的部署进度。
等待状态变更为已部署后,点击操作列的详情,在概览页单击Endpoint。
在弹出的界面中,输入创建服务实例时,设置的登录信息,即可正常访问Stable Diffusion服务。
步骤二:下载模型
您可以前往各模型网站,下载需要的模型。
此处以下载CHECKPOINT模型GhostMix为例,展示下载操作流程。模型链接如下:
https://civitai.com/api/download/models/76907
登录计算巢控制台,单击服务实例ID,进入服务实例概览页,单击运维管理页签,然后单击下载模型。
在弹出的创建自定义任务对话框中,设置如下参数,然后单击下一步。
参数
说明
取值
目标实例
选择该下载模型任务的目标实例。
手动选择已创建的实例。
配置参数
选择模型或预览图:本文以模型为例,因此选择Model。
模型类型:本文使用的模型为CHECKPOINT类型。
下载方式:本文使用HTTPS文件。
文件来源:填写获取的模型下载链接。
选择模型或预览图:Model
模型类型:CHECKPOINT
下载方式:HTTPS文件
文件来源:
https://civitai.com/api/download/models/76907
模型或预览图存储目录
保持默认即可。
本示例中默认值为:
/home/models/Stable-diffusion/
自定义模型或预览图名称
自定义。
本示例模型命名为:
test.safetensors
确认参数配置无误后,单击创建。您可以在运维管理中查看模型的下载进度。
当执行状态为成功时,即可访问WebUI,查看已下载的模型。
步骤三:AI绘画并存储到RDS MySQL数据库中
在WebUI窗口中,选中Save to DataBase。选中该选项后,即表示将生成数据持久化存储到RDS MySQL数据库中。
单击Generate,由AI自动根据模型生成图片,结果将自动保存在RDS MySQL中。
您可以单击Images页签,查看已生成的图片,并点击Download进行下载。
说明下载图片的文件后缀名为.png格式。
步骤四:在RDS MySQL数据库查询
登录计算巢控制台,单击服务实例ID,进入服务实例概览页,在资源页签,筛选RDS实例后,单击RDS MySQL实例ID。
在RDS MySQL实例基本信息页,单击右上角的登录数据库。
输入创建服务步骤设置的RDS插件配置中数据库账号名称和实例密码,进入数据库。
说明如果提示账号密码不正确,可以前往RDS管理控制台重置密码。更多信息,请参见重置密码。
AI绘画生成的图片及相关配置参数信息已经被存储在默认数据库stable_diffusion的generated_images中。
您可以使用如下命令,查询详细信息。
说明RDS MySQL数据库中不仅存储了图片Base64编码后的文本数据,还存储了prompt的所有配置信息,在复用等场景下使用非常便捷。
您还可以基于存储在RDS MySQL数据库中的数据,进行统计分析,实现更多业务价值。
SELECT * FROM generated_images;
结果示例:示例中各字段含义如下:
字段
含义
prompt
提示文本或图像,该参数用于指定提示文本或图像,它对生成图像的主题或内容起着指导作用。通过提供一个具体的提示,模型可以根据该提示生成与提示相关的图像。
该参数的作用是为模型提供一个引导,帮助模型理解您的意图并生成相应的图像。通过精心设计的提示,可以获得更符合期望的图像生成结果。
您可以使用Prompt Engineering技术在生成模型中使用有针对性的提示以控制最终的生成内容。
negative_prompt
提示文本或图像,用于指导生成图像时避免的主题或内容。可以用于约束生成的图像,避免某些特定特征。
steps
扩散步数,指定生成图像的迭代次数或扩散步数。每一步都会逐渐模糊图像,使其逐渐变得难以识别。通常情况下,步数越多,生成的图像越模糊。
seed
随机种子,用于控制生成图像的随机性。通过设置相同的种子,可以重复生成相同的图像。
sampler
采样器,用于选择生成图像时使用的采样策略。常见的采样器包括ancestral(祖先采样)和ddim(逐维度重要性采样)。
cfg_scale
配置规模,用于调整模型的大小和生成图像的质量。较大的规模通常会产生更高质量的图像,但也需要更多的计算资源。
size
生成图片的分辨率大小。
model_hash
模型哈希,用于指定所使用的预训练模型的唯一标识符。
model
模型,指定所使用的预训练模型的名称或路径。
image_base64
生成图片的Base64编码格式。
步骤五:从数据库下载并解码图片
图片文件在RDS MySQL数据库中是以Base64编码的形式,存储为txt文本格式,如果需要转换为图片格式,则需要对文本进行解码,以还原为二进制数据。本文以Python开发语言为例,解码方式如下:
获取存储在数据库中的图片文本内容。
说明您可以通过DMS连接数据库后,使用
SELECT * FROM generated_images;
命令查询表信息,在image_base64列,单击下载按钮,下载txt文件。关于如何通过DMS连接数据库并查询的操作,请参见RDS数据库查询。在Python开发环境中,创建项目并运行如下示例代码。
import base64 def decode_image(txt_path, output_image_path): with open(txt_path, 'r') as txt_file: encoded_image = txt_file.read() decoded_image = base64.b64decode(encoded_image) with open(output_image_path, 'wb') as image_file: image_file.write(decoded_image) # txt文本的路径 txt_path = 'D:\\test.txt' # 生成图片的路径 output_image_path = 'D:\\test.jpg' # 从txt文件中读取文本并解码为图片 decode_image(txt_path, output_image_path)