通过使用 Amazon SageMaker 微调 Stable Diffusion XL 来生成独特
使用 Amazon SageMaker 微调 Stable Diffusion XL 生成独特影像
关键要点
Stable Diffusion XL 是一个高质量的文本转影像深度学习模型,能够生成各种风格的专业影像。本文提供步骤说明,教您如何使用 Amazon SageMaker 创建自定义的、微调的 Stable Diffusion XL 模型,以生成独特的影像。本解决方案涉及自定义 Docker 影像的创建、训练模型、运行推理等步骤,支持多个媒体和娱乐、游戏及零售等领域的应用。免费获取模型,需要的只是您自己的主题影像。Stable Diffusion XL 由 Stability AI 推出,是一种高品质的文本转影像深度学习模型,能在多种风格中生成专业级影像。目前,Stable Diffusion XL 的管理版本已可在 Amazon SageMaker JumpStart 和 Amazon Bedrock 上使用,短时间内可生成创意内容。基础版 Stable Diffusion XL 10 可协助创作过程,适用于游戏角色设计、创意构思生成、电影分镜和影像升级等用例。然而,对于需要生成独特主题影像的情况,您可以透过使用自定义训练容器和 Amazon SageMaker 来微调 Stable Diffusion XL。这种个性化影像生成模型使您能将自定义主题融入到 Stable Diffusion XL 强大的影像生成过程中。
在本文中,我们将提供逐步说明,示范如何使用 SageMaker 创建一个自定义的、微调过的 Stable Diffusion XL 模型以生成独特影像。这一自动化解决方案为您快速入门提供了所需的所有代码和配置,您只需提供主题的影像。这对于多个领域如媒体娱乐、游戏和零售的应用都非常有用,例如使用自定义主题制作电影宣传材料、创建游戏角色或为零售创作品牌特定影像。有关更多 AI 用例,请访问 AI 用例探索器。
解决方案概述
该解决方案由三个逻辑部分组成:
部分描述1创建一个 Docker 容器影像,并配置训练容器所需的框架。2使用训练容器对您的数据集进行模型训练,并输出一个微调的自定义低秩适应LoRA模型。LoRA 是一种高效的微调方法,不需调整基模型参数,而是增添少量可临时应用于基模型的参数。3利用微调过的自定义模型生成创意独特的影像。以下示意图展示了解决方案架构。
整个训练容器的创建工作流使用了以下服务:
Amazon SageMaker 在机器学习生命周期中使用 Docker 容器,提供灵活性以便您 自带容器 开展模型开发、训练和推理。Kohya SS 是一个训练 Stable Diffusion 模型的框架,本解决方案利用基于 Linux 环境的 Docker。此解决方案使用等效的 GUI 参数,以预配置的 TOML 文件自动化整个 Stable Diffusion XL 微调过程。AWS CodeCommit 是一个完全管理的源代码控制服务,用于存储私有 Git 仓库。我们使用 CodeCommit 存储构建训练容器所需的代码Dockerfile、buildspecyml和训练脚本 (trainpy)。Amazon EventBridge 是一个无服务器事件总线,用于接收、过滤和路由事件,捕捉 CodeCommit 仓库文件的任何变更并触发构建新 Docker 容器影像。Amazon Elastic Container Registry (ECR) 是一个完全管理的容器托管注册表,用来存储自定义训练容器影像。AWS CodeBuild 是一个完全管理的持续集成服务,用来编译源代码、运行测试并生成可部署的软件包。关于微调模型的不同方法,与需要训练新完整模型的方法相比,LoRA 微调方法不会修改原始模型。想像成这是一层于基模型之上的附加层。这种不必为每个主题训练和生成完整模型的优势可以降低训练计算需求,缩减模型存储空间,也减少所需的训练时间,使得大规模运行的成本效益更高。在本文中,我们将示范如何基于 Stable Diffusion XL 10 基模型使用您的主题创建一个 LoRA 模型。
这一训练工作流使用了以下服务和功能:
Amazon Simple Storage Service (Amazon S3) 是一个高耐久性且可扩展的对象存储服务。您的自定义数据集和配置文件将上传至 Amazon S3,训练将使用这些影像进行。Amazon SageMaker 模型训练 是 SageMaker 的一个功能,允许您在不管理基础设施的情况下标准化和管理大规模的训练工作。训练任务中启动容器作为一部分时,将调用 trainpy 文件。当训练过程完成时,位于 /opt/ml/model 目录中的输出模型将自动上传至指定的 S3 存储桶。Amazon SageMaker Pipelines 是一个工作流编排服务,允许您自动化机器学习过程,从数据预处理到模型监控。这使您能够启动一个训练管道,并以 Amazon S3 数据集位置和配置文件、ECR 容器影像及训练工作的基础设施规范为输入。现在您已准备好提示微调后的模型生成独特影像。SageMaker 给予您灵活性,以 自带推理容器。您可以使用 SageMaker 托管服务 配置推理端点。不过,为了演示 Automatic1111 Stable Diffusion UI,我们将展示如何在 Amazon Elastic Compute Cloud (Amazon EC2) 实例或本地计算机上运行推理。
加速器安卓下载免费本解决方案完全自动化了 Stable Diffusion XL 10 的微调 LoRA 模型的创建。在接下来的部分中,我们将讨论如何满足前提条件,下载代码,并在 GitHub 仓库中的 Jupyter Notebook 中使用自动化解决方案,这需要在 Amazon SageMaker Studio 环境中进行。
这个端到端解决方案的代码可以在 GitHub 仓库 中找到。
前提条件
此解决方案已在 AWS 地区 uswest2 测试,但适用于这些服务可用的任何地区。请确保您具备以下前提条件:
AWS帐户SageMaker域SageMaker域用户资料在 SageMaker Studio 中下载必要的代码
本部分将提供在 SageMaker Studio 中下载必要代码和设置 Notebook 的步骤。
进入 SageMaker Studio JupyterLab 的终端
完成以下步骤以开启终端:
登录到您的 AWS 帐户并打开 SageMaker Studio 控制台。选择您的用户配置文件并选择打开 Studio来开启 SageMaker Studio。选择 JupyterLab 来打开 JupyterLab 应用。这是您将执行命令的环境。如果您已经创建了空间,选择 运行 以打开该空间。如果您尚未创建空间,选择 创建 JupyterLab 空间。输入空间的名称并选择 创建空间。保留默认值并选择 运行空间。当环境状态显示为 运行中 时,选择 打开 JupyterLab 以打开新空间。在 JupyterLab 启动器窗口中,选择 终端。将代码下载到 SageMaker Studio 环境
从终端运行以下命令。对于此帖子,您只检查所需的 GitHub 仓库目录这样您不必下载整个仓库。
bashgit clone nocheckout https//githubcom/aws/amazonsagemakerexamplesgitcd amazonsagemakerexamples/git sparsecheckout set usecases/texttoimagefinetuninggit checkout
如果成功,您应该会看到输出 Your branch is up to date with origin/main。
在 SageMaker Studio JupyterLab 中打开 Notebook
完成以下步骤以打开 Notebook:
在 JupyterLab 中,选择导航窗格中的 文件浏览器。导航到名为 amazonsagemakerexamples/usecases/texttoimagefinetuning 的项目目录。打开名为 kohyassfinetuningipynb 的 Jupyter Notebook。选择您的运行时内核预设为使用 Python 3。选择 选择。现在您拥有一个准备好执行命令的内核。在接下来的步骤中,我们将使用这个 Notebook 创建必要的资源。
训练自定义 Stable Diffusion XL 模型
在这部分,我们将逐步讲解如何训练一个自定义的 Stable Diffusion XL 模型。
通过 AWS CloudFormation 设置 AWS 基础设施
为了方便您,在此提供了一个 AWS CloudFormation 模板来创建必要的 AWS 资源。在创建资源之前,请为您的 SageMaker IAM 角色 配置 AWS 身份和访问管理 (IAM) 权限。该角色由 SageMaker 环境使用并授予执行某些操作的权限。遵循所有权限的 最佳实践,仅授予执行任务所需的权限。
在 IAM 控制台上,选择导航窗格中的 角色。选择名为 AmazonSageMakerExecutionRoleltidgt 的角色。这应该是分配给您的域的角色。在 权限策略 部分,选择名为 AmazonSageMakerExecutionPolicyltidgt 的策略。选择 编辑 来编辑自管理策略。添加以下 权限 到该策略,然后选择 下一步。选择 保存变更 以确认您添加的权限。现在您已拥有在 SageMaker 环境中运行命令所需的权限。
返回到您在 JupyterLab 环境中的 kohyassfinetuningipynb Notebook。在标记为 第一步 通过 AWS CloudFormation 创建所需资源 的 Notebook 步骤,运行代码单元以创建 CloudFormation 堆叠。在继续之前,请耐心等待 CloudFormation 堆叠完成创建。您可以在 AWS CloudFormation 控制台监控堆叠创建的状态。此步骤应大约需耗时 2 分钟。
上传自定义影像和微调配置文件
在这部分,您首先需要将微调配置文件上传到 Amazon S3。此配置文件是专门为 Kohya 程序设计的,其目的是以编程方式指定配置设置,而非使用 Kohya GUI 手动设定。
此文件提供了带有预设值的设置。如果需要,您可以用不同的值修改配置文件。有关参数的详细意义,请参考 LoRA 训练参数。您需要进行一些实验以达成预期效果。某些参数依赖底层硬件和 GPU例如 mixedprecision=bf16 或 xformers。请确保您的训练实例拥有支持您选择的参数所需的硬件配置。

您还需要将一组影像上传到 Amazon S3。如果您没有自己的数据集并决定使用公共来源的影像,请确保遵循版权和许可要求。
S3 存储桶的结构如下:
bucket/0001dataset/kohyasdxlconfigtomlbucket/0001dataset/ltassetfoldernamegt/ (影像和标题文件存放于此)bucket/0002dataset/kohyasdxlconfigtomlbucket/0002dataset/ltassetfoldernamegt/ (影像和标题文件存放于此)
assetfoldername 使用特殊的命名惯例,稍后在本文中定义。每个 xxxxdataset 前缀可以包含具有不同配置文件内容的独立数据集。每个管道以单一数据集作为输入。配置文件和资源文件夹将由 SageMaker 训练任务在训练步骤中下载。
完成以下步骤:
再次导航回 JupyterLab 环境中的 kohyassfinetuningipynb Notebook。在 Notebook 步骤标记为 第二步 上传微调配置文件 时,运行代码单元以将配置文件上传至 Amazon S3。验证您是否有一个名为 sagemakerkohyassfinetuningltaccount idgt 的 S3 存储桶,并在其下有 0001dataset 前缀和 kohyasdxlconfigtoml 文件。接下来,您需要创建一个资源文件夹并将自定义影像和标题文件上传至 Amazon S3。 assetfoldername 必须根据要求的命名惯例进行命名。这个命名惯例定义了重复次数和提示词识别。提示词用于识别您的自定义主题。例如,60dwjz 表示 60 次重复,提示词为 dwjz。考虑使用主题的缩写或首字母作为提示词,以避免与现有单词冲突。例如,如果您的主题是一头老虎,您可以使用提示词