基于阿里云RDS MySQL数据库实现Stable Diffusion AI绘画

阿里云RDS MySQL数据库支持作为Stable Diffusion服务的底层存储数据库,帮助您快速部署Stable Diffusion服务,您无需再手动配置数据库,只需简单配置,即可完成服务搭建。

背景

阿里云计算巢产品支持部署Stable Diffusion服务,实现AI绘画,该服务生成的图片结果(包括prompt等参数及生成的图片)需要进行存储,在Stable Diffusion服务的配置中,支持直接将图片结果存储在阿里云RDS MySQL数据库中,本文介绍如何配置Stable Diffusion服务与阿里云RDS MySQL数据库,实现AI绘画。

说明

Stable Diffusion Web UI是一个基于Stable Diffusion的基础应用,利用gradio模块搭建出交互程序,可以在低代码GUI中立即访问Stable Diffusion。它支持文字生成图片,图片转图片,使用各种各样的模型来达到你想要的效果,还能训练自己的专属模型。

前提条件

  • 已开通阿里云账号。

  • 确保账户余额充足。

    说明

    如果开通按量付费实例,则账户中余额需大于100元。

步骤一:创建Stable Diffusion服务

  1. 访问计算巢管理控制台,进入Stable Diffusion服务创建界面,根据界面提示,填写如下参数,点击下一步:确认订单

    参数

    说明

    取值示例

    选择模板

    Stable Diffusion服务创建时已预设了两个模板,用于不同的应用场景:

    • SD原生版本:基于官方Stable Diffusion代码库的原生实现,功能稳定,兼容性好,适配大多数基础文本到图像生成需求。

    • SD-Forge版本:深度优化的社区版,适用高性能、复杂功能需求场景。

    本文仅作为示例,选择SD原生版本即可。

    SD原生版本

    服务实例名称

    Stable Diffusion服务实例名称,可自定义。

    sd-rds-test

    地域

    指定创建的实例所属地域。

    不建议选择中国内地地域,因为部分模型无法下载。

    新加坡

    付费类型配置

    按量付费包年包月,按需选择即可。

    按量付费

    资源配置

    • 实例类型:即ECS实例的资源规格,按实际需要选择即可。

    • 实例密码:ECS实例的登录密码,自定义。

    • 实例类型:ecs.gn6i-c4g1.xlarge

    • 实例密码:ECSTestPW123!

      说明

      此处密码仅作为示例,请勿直接在实际业务中使用。

    实例密码

    配置完成后,访问WebUI时需要使用,请妥善保管。

    • 软件登录名:默认admin。

    • 软件登录密码:自定义。

    • 软件登录名:admin

    • 软件登录密码:SDTestPW123!

      说明

      此处密码仅作为示例,请勿直接在实际业务中使用。

    可用区配置

    根据业务需求配置可用区ID专有网络、网段等信息。

    • 可用区ID:可用区B

    • 选择已有/新建的专有网络:新建专有网络

    • 专有网络IPv4网段:192.168.0.0/16

    • 交换机子网网段:192.168.1.0/24

    • 是否开启公网访问:关闭公网访问

    标签和资源组

    设置标签,选择实例所属资源组。

    • 标签:无

    • 资源组:dy-test

    说明

    上述为创建Stable Diffusion服务的关键参数,其他参数选择默认即可。

  2. 单击下一步:确定订单

  3. 单击立即创建

  4. 在左侧导航栏单击服务实例管理,即可在私有部署服务页签,查看Stable Diffusion服务的部署进度。

  5. 等待状态变更为已部署后,点击操作列的详情,在概览页单击Endpoint

  6. 输入创建服务步骤设置的登录信息,Stable Diffusion服务即可正常访问。

步骤二:下载模型

  1. 您可以前往各模型网站,下载需要的模型,本文以CHECKPOINT模型GhostMix为例,获取模型的下载链接如下:

    https://civitai.com/api/download/models/76907
  2. 前往计算巢控制台,单击实例ID,进去实例概览页,点击运维管理页签,然后点击下载模型

  3. 创建自定义任务页面,设置如下参数后,单击下一步。

    参数

    说明

    取值

    目标实例

    选择该下载模型任务的目标实例。

    手动选择已创建的实例。

    配置参数

    • 选择模型或预览图:本文以模型为例,因此选择Model

    • 模型类型:本文使用的模型为CHECKPOINT类型。

    • 下载方式:本文使用HTTPS文件。

    • 文件来源:填写获取的模型下载链接。

    • 选择模型或预览图:Model

    • 模型类型:CHECKPOINT

    • 下载方式:HTTPS文件

    • 文件来源:https://civitai.com/api/download/models/76907

    模型或预览图存储目录

    保持默认即可。

    本示例中默认值为:/home/models/Stable-diffusion/

    自定义模型或预览图名称

    自定义。

    本示例模型命名为:test.safetensors

  4. 确认参数配置无误后,单击创建。您可以在运维管理中查看下载模型进度。

  5. 当执行状态为成功时,即可访问WebUI,查看已下载的模型。

步骤三:AI绘画并存储到RDS MySQL数据库中

  1. WebUI窗口中,选中Save to DataBase。选中该选项后,即表示将生成数据持久化存储到RDS MySQL数据库中。

    image..png

  2. 单击Generate,由AI自动根据模型生成图片,结果将自动保存在RDS MySQL中。

    image..png

  3. 您可以单击Images页签,查看已生成的图片,并点击Download进行下载。

    说明

    下载图片的文件后缀为.png

    image..png

步骤四:在RDS MySQL数据库查询

  1. 前往计算巢控制台,单击实例ID,进去实例概览页,在资源页签,筛选RDS实例后,单击RDS MySQL实例ID。

    image..png

  2. RDS MySQL实例基本信息页,单击右上角的登录数据库

  3. 输入创建服务步骤设置的RDS插件配置数据库账号名称实例密码,进入数据库。

    说明

    如果提示账号密码不正确,可以前往RDS管理控制台重置密码。更多信息,请参见重置密码

  4. AI绘画生成的图片及相关配置参数信息已经被存储在默认数据库stable_diffusiongenerated_images表中。

    image..png

  5. 您可以使用如下命令,查询详细信息。

    说明
    • RDS MySQL数据库中不仅存储了图片Base64编码后的文本数据,还存储了prompt的所有配置信息,在复用等场景下使用非常便捷。

    • 您还可以基于存储在RDS MySQL数据库中的数据,进行统计分析,实现更多业务价值。

    SELECT * FROM generated_images;

    结果示例:

    image..png

    各字段含义如下:

    字段

    含义

    prompt

    提示文本或图像,该参数用于指定提示文本或图像,它对生成图像的主题或内容起着指导作用。通过提供一个具体的提示,模型可以根据该提示生成与提示相关的图像。

    该参数的作用是为模型提供一个引导,帮助模型理解您的意图并生成相应的图像。通过精心设计的提示,可以获得更符合期望的图像生成结果。

    您可以使用Prompt Engineering技术在生成模型中使用有针对性的提示以控制最终的生成内容。

    negative_prompt

    负面提示文本或图像,用于指导生成图像时避免的主题或内容。可以用于约束生成的图像避免某些特定特征。

    steps

    扩散步数,指定生成图像的迭代次数或扩散步数。每一步都会逐渐模糊图像,使其逐渐变得难以识别。通常情况下,步数越多,生成的图像越模糊。

    seed

    随机种子,用于控制生成图像的随机性。通过设置相同的种子,可以重复生成相同的图像。

    sampler

    采样器,用于选择生成图像时使用的采样策略。常见的采样器包括ancestral(祖先采样)和ddim(逐维度重要性采样)。

    cfg_scale

    配置规模,用于调整模型的大小和生成图像的质量。较大的规模通常会产生更高质量的图像,但也需要更多的计算资源。

    size

    生成图片的分辨率大小。

    model_hash

    模型哈希,用于指定所使用的预训练模型的唯一标识符。

    model

    模型,指定所使用的预训练模型的名称或路径。

    image_base64

    生成图片的Base64编码格式。

步骤五:从数据库下载并解码

图片文件在RDS MySQL数据库中是以Base64编码的形式,存储为txt文本格式,如果需要转换为图片格式,则需要对文本进行解码,以还原为二进制数据。

本文以Python开发语言为例,解码方式如下:

  1. 获取存储在数据库中的图片文本内容。

    说明

    您可以通过DMS连接数据库后,使用SELECT * FROM generated_images;命令查询表信息,在image_base64列,单击下载按钮,下载txt文件。如何通过DMS连接数据库并查询,请参见RDS数据库查询

  2. 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)

相关参考

您还可以使用RDS MySQL更多高级功能来运维AIGC相关数据。了解RDS的更多信息,请参见RDS MySQL产品简介