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)