在亚马逊云科技Amazon SageMaker上进行Stable Diffusion模型训练和推理

 Stable Diffusion Quick Kit是一个基于亚马逊云科技Amazon SageMaker进行Stable Diffusion模型快速部署的工具包,包括了一组示例代码、服务部署脚本、前端UI,可以帮助可以快速部署一套Stable Diffusion的原型服务。

 本文将介绍如何在SageMaker Training Job中加载进行Stable Diffusion XL(以下简称SDXL)的Dreambooth微调训练,及训练完成后使用Stable Diffusion WebUI开源框架进行模型部署和即时推理,实现训推一体的整体pipeline及业务流程。

 背景介绍

 Dreambooth微调训练

 Dreambooth是Stable Diffusion模型训练的一种方式,通过输入instance_prompt定义实体主体(e.g.人物或者实体物品)和instance images的fine-tuning图像,抽取原SD中UNet,VAE网络,将instance prompt和instance images图像与之绑定,以便后续生成的图片中只要有instance的prompt中的关键词,即可保持输入instance图片里面的主体实体,实现人物和物品生图时的高保真效果。

 Stable Diffusion WebUI

 Stable Diffusion WebUI是基于Stable Diffusion开发的一个开源的可视化软件,WebUI在Stable Diffusion txt2img,img2img生图基础上拓展了很多插件来增强Stable Diffusion的生图能力,比如Ultimate Upscale、Inpain等,使得开发者可以方便地通过界面拖拽或者API调用进行Stable Diffusion模型的加载和调用。

 相对于Diffuser SDK的模型推理,WebUI有更丰富的调用参数及更多的插件支持,因此同样模型的出图效果某些场景下会比Diffuser更好,这也是目前业界不少客户使用WebUI API方式进行推理生图的原因。

 训练+推理业务场景

 在遇到使用Stable Diffusion模型微调和推理的业务场景中,针对ToB端客户,通常会上传需要训练的图像,使用Dreambooth训练人物(如模特或者数字人)和商品(如箱包,衣服),然后针对训练好的模型批量生成海报/广告/logo等文案素材的图像,该过程并不需要像app应用一样实时交互的出图,而是一个离线异步的过程。

 这种情况下,可以在训练任务的算力机上,同时安装部署模型微调和模型推理的框架,利用SageMaker Training Job方式,将微调和推理放到一个job中,微调训练完成,即加载model进行推理出图,从而一次性完成模型微调(Dreambooth)+模型推理(WebUI API)整个完整pipeline工作,将推理的模型改造到训练任务中,而不用再单独部署模型的服务端点。

 同时,SageMaker Training Job支持Spot竞价实例,训练任务完成则推理出图也完成,机器资源释放,进一步帮助用户节约整体的成本。

 SageMaker Training Job中进行SDXL Dreambooth Fine-tune

 Dreambooth训练框架

 Stable Diffusion 1.x版本时,Dreambooth fine-tune有多种开源版本的微调框架,SDXL版本后,Diffuser官方在HuggingFace社区发布了基于LoRA的Dreambooth fine-tune框架,代码相对于原1.x版本更加简洁,且使用了更新的xformers加速框架,支持Flash Attension v2,其Pytorch版本也升级到了2.0以上。

 其中train_dreambooth_lora_sdxl.py就是微调训练Dreambooth的代码。

 SageMaker Training Job脚本

 在SageMaker Training Job中,可以clone上一章节的diffuser官方repo训练代码作为source训练脚本目录,并将其依赖的xformers,deepspeed等依赖打包在Docker训练镜像中,通过shell entrypoint方式在算力机上拉起其训练脚本。

 详细如下:

  • 准备source源代码目录并clone官方代码

  • 打包训练任务的docker镜像(使用Amazon预置的0.0+cuda118 HuggingFace DLC容器作为基础镜像,与diffuser官方pytorch/cuda版本保持一致)

  • dockerfile编写

  • build镜像并推送到Amazon ECR镜像仓库

  • 准备训练图像,这里我们使用官方示例dataset图像

  • 图像数据上传到$images_s3uri的S3路径,以便SageMaker Training Job拉取。

  • SageMaker Estimator拉起Training Job

  • 训练任务脚本编写,这里采用shell entrypoint方式,方便调用diffuser官方脚本,且传递环境变量。

 我们通过SageMaker提供的Pytorch的Estimator训练器SDK,拉起Training Job训练任务。

 Dreambooth训练调参

 SDXL Dreambooth Fine-tune的训练参数与之前1.x版本调参类似,这里把Diffuser框架及SageMaker新加的主要配置参数说明如下:

  • ‘images’:f”s3://{bucket}/dreambooth-xl/images/”:上一步骤中准备好的dreambooth微调图像数据,通过inputs参数指定S3路径,SageMaker会自动将该路径下训练图像上传到训练算力机的/opt/ml/data/input/images目录下

  • keep_alive_period_in_seconds:该参数是SageMaker Training Job的warmpool,设置后可以把下一次训练机器保持在该用户的一个资源池中,这样方便多个SDXL Dreambooth训练时的镜像拉起,节省耗时的开销

  • enable_xformers_memory_efficient_attention:启用xformers的flash attention关注度计算优化,加速训练过程

  • train_use_spot_instance:是否使用spot竞价实例进行训练,进一步节省成本

  • max_run:训练任务的最大运行时间

  • max_wait:等待竞价实例的最长时间,如果使用spot竞价实例该参数是必须的

SageMaker Training Job中安装部署Stable Diffusion WebUI

 如上文所述,训练完成后可以直接使用fine-tuned模型进行推理出图,这里采用Stable Diffusion WebUI进行推理,需要在training job训练算力机上安装部署开源的WebUI组件,将模型目录同步到WebUI的model location下,然后调用WebUI API text2img/img2img出图,详细如下:

 docker镜像脚本

 由于是在training job中进行推理,扩充训练任务的dockerfile镜像文件,将Stable Diffusion WebUI组件及依赖同样的方式和上文中training的dockerfile打包到一起:

 WebUI启动脚本

 使用上述章节同样的build & push脚本,将docker镜像打包推送,然后在统一训练和推理的entry point脚本中启动训练任务,任务完成后启动WebUI。

 SageMaker Training Job中对Fine-tuned Dreambooth Model进行推理

 在start_sd_webui.py脚本启动WebUI服务器之后,即可使用WebUI API进行txt2img/img2img的推理调用,其推理API与官方参数一致。

 由于在同一台训练算力机上,其URI为localhost(0.0.0.0)对应端口及API路径前缀。

 总结

 本文介绍了在Quick Kit中使用SageMaker Training Job对SDXL模型进行Dreambooth微调,并且可以在训练完成后对fine-tuned后的模型使用Stable Diffusion WebUI进行推理,实现从训练到推理的一体化操作,满足客户对于快速训练人物或商品实体并批量推理出图的需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/110270.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2530. 执行 K 次操作后的最大分数

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。你的 起始分数 为 0 。 在一步 操作 中&#xff1a; 选出一个满足 0 < i < nums.length 的下标 i &#xff0c; 将你的 分数 增加 nums[i] &#xff0c;并且 将 nums[i] 替换为 ceil(nums[i] / 3) 。 返回在 恰好…

服务器中了mkp勒索病毒怎么处理,mkp勒索病毒解密,数据恢复

10月份以来&#xff0c;云天数据恢复中心陆续接到很多企业的求助&#xff0c;企业的服务器遭到了mkp勒索病毒攻击&#xff0c;导致企业的服务器数据库被加密&#xff0c;严重影响了企业工作&#xff0c;通过这一波mkp勒索病毒的攻击&#xff0c;云天数据恢复工程师为大家总结了…

【AI视野·今日Sound 声学论文速览 第二十六期】Mon, 16 Oct 2023

AI视野今日CS.Sound 声学论文速览 Mon, 16 Oct 2023 Totally 7 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers Low-latency Speech Enhancement via Speech Token Generation Authors Huaying Xue, Xiulian Peng, Yan Lu现有的基于深度学习的语音增强…

力扣第90题 子集|| 去重问题 c++ 注释版

题目 90. 子集 II 中等 相关标签 位运算 数组 回溯 给你一个整数数组 nums &#xff0c;其中可能包含重复元素&#xff0c;请你返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。返回的解集中&#xff0c;子集可以按 任意顺序 排列…

中文编程开发语言工具开发的实际软件案例:称重管理系统软件

中文编程开发语言工具开发的实际软件案例&#xff1a;称重管理系统软件 中文编程开发语言工具开发的实际软件案例&#xff1a;称重管理系统软件&#xff0c;软件可以安装在电脑上&#xff0c;也可以安装在收银机上&#xff0c;支持触摸和鼠标点&#xff0c;想学编程可以关注系统…

【web前端】web前端设计入门到实战第一弹——html基础精华

前端 一&#xff1a;图片属性二&#xff1a;音频标签三&#xff1a; 视频标签四&#xff1a;链接标签五&#xff1a;列表标签5.1.无序列表5.2.有序列表3.自定义列表 六&#xff1a;表格6.1合并单元格 七&#xff1a;input标签八&#xff1a;select系列九&#xff1a; 文本域标签…

《软件方法》2023版第1章(10)应用UML的建模工作流-大图

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 1.4 应用UML的建模工作流 1.4.1 概念 我用类图表示建模工作流相关概念如图1-16。 图1-16 建模工作流相关概念 图1-16左侧灰色部分定义了“游戏规则”&#xff0c;右侧则是在“游戏规…

Canvas绘图学习笔记:画笔的路径与状态

beginPath beginPath表示开始一个路径&#xff0c;我们在上一章画弧的时候用到过好多次&#xff0c;他的API非常简单&#xff1a; context.beginPath(); 开始路径有2层意思&#xff0c;一个就是本次绘制的起点是新的&#xff08;不再是上次结束的点了&#xff09;&#xff0…

2021-9-25 美团售后服务系统后端一面【2024秋招】

1 实习 1.1 讲讲你做的一个需求&#xff0c;为什么这么做之类的 答&#xff1a; 1.2 什么是接线 1.3 什么的初始接线&#xff0c;和权威接线 答&#xff1a;初始接线是现状&#xff0c;权威是规划中的 1.4 为什么要做比较呢&#xff1f; 答&#xff1a;运维人员需要查看…

强大的下载管理器:Progressive Downloader for Mac

Progressive Downloader for Mac是一种强大的下载管理器&#xff0c;它可以帮助用户更快速、更稳定地下载文件。相比于其他下载工具&#xff0c;PD下载管理器具有很多独特的功能和优势&#xff0c;本文将对其进行详细推广。 在数字化时代&#xff0c;下载已成为我们日常工作中必…

pdf压缩文件怎么压缩最小?

pdf压缩文件怎么压缩最小&#xff1f;我们很多项目介绍或是学术的报告都是采用的这个pdf格式&#xff0c;那么我们在存储或是需要进行分享的时候&#xff0c;可能就会因为文件过大而导致无法打开或是发送了。那么就需要将其进行压缩。PDF文件压缩方法很多&#xff0c;pdf压缩文…

批量处理图像模板

以下是一个Python模板&#xff0c;用于批量处理图像并将处理后的图像保存在另一个文件夹中。在此示例中&#xff0c;将使用Pillow库来处理图像&#xff0c;可以使用其他图像处理库&#xff0c;根据需要进行修改。   首先&#xff0c;确保已经安装了Pillow库&#xff0c;可以使…

web前端面试-- http的各个版本的区别(HTTP/0.9、HTTP/1.0、HTTP/1.1、HTTP/2.0、HTTP/3.0)

本人是一个web前端开发工程师&#xff0c;主要是vue框架&#xff0c;整理了一些面试题&#xff0c;今后也会一直更新&#xff0c;有好题目的同学欢迎评论区分享 ;-&#xff09; web面试题专栏&#xff1a;点击此处 http的各个版本的区别 HTTP&#xff08;超文本传输协议&…

el-input: 把不符合正则校验的值动态清空,只保留符合的值

<el-input v-model"form.profit" placeholder"请输入授权专利新增利润" input"handleInput" clearable />/*** 不符合正则校验,清空*/const handleInput () > {if (form.value.profit) {if (!/^\d*\.?\d*$/.test(form.value.profit))…

hive往es映射表写数据报错

hive是基于Hadoop的一个数据仓库工具&#xff0c;用来进行数据提取、转化、加载&#xff0c;这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表&#xff0c;并提供SQL查询功能&#xff0c;能将SQL语句转…

JDK版本和Gradle版本配套关系

Java versionSupport for compiling/testing/…​Support for running Gradle 8 N/A 2.0 9 N/A 4.3 10 N/A 4.7 11 N/A 5.0 12 N/A 5.4 13 N/A 6.0 14 N/A 6.3 15 6.7 6.7 16 7.0 7.0 17 7.3 7.3 18 7.5 7.5 19 7.6 7.6 20 8.1 8.3 21 …

Elasticsearch7.9.3保姆级安装教程

Linux版本Elasticsearch版本(待安装)Kibana版本(待安装)CentOS 77.9.37.9.3 一、下载地址 1、官网下载 打开地址 https://www.elastic.co/cn/downloads/past-releases#elasticsearch&#xff0c;按如图所示选择对应版本即可 2、采用wget下载 为了不必要的麻烦&#xff0c;建…

【vscode编辑器插件】前端 php unity自用插件分享

文章目录 一篇一句前言前端vuegitphpunity后端其他待续完结 一篇一句 “思考是最困难的工作&#xff0c;这也许是为什么很少有人这样做。” - 亨利福特&#xff08;Henry Ford&#xff09; 前言 无论是什么语言&#xff0c;我都会选择使用vscode进行开发&#xff0c;我愿称v…

【Java基础】基础数据类型

1. 基础数据类型 类型占用存储空间表数范围包装类包装类缓存对象byte1字节8bit-128~127Byte-128~127short2字节-215~215-1Short-128~127int4字节-231~231-1&#xff08;约21亿&#xff09;Integer-128~127long8字节-263~263-1Long-128~127单精度float4字节-3.403E38 ~ 3.403E3…