在当今迅速发展的AI景观中,对高质量,带注释的数据集和自定义模型的需求比以往任何时候都更大。为了满足这一需求,我们的项目旨在开发一个创新的模块,该模块将数据注释与模型微调无缝整合。该模块将利用Claude或Chatgpt-4等尖端语言模型标记提供客户图像,然后使用这些注释对稳定的扩散XL(SDXL)模型进行微调。
该项目的目的是创建一个强大而有效的模块,该模块可自动化数据注释过程并增强模型培训。通过集成高级AI功能,我们旨在与新注释的数据集生产高度适应性和精确的SDXL模型。
利用Claude/Chatgpt-4(或类似)API来为一组5-20个客户映像生成高质量的注释。
确保注释是准确且一致的,以创建可靠的数据集用于培训目的。
使用注释数据集微调SDXL模型。
实施低级适应(LORA)技术,以根据注释数据的特定特征来优化模型的性能。
该项目旨在通过自动化和集成关键过程来提高AI模型开发的效率和准确性。高级语言模型用于注释和复杂的微调方法的组合将导致一个高效的解决方案,以满足各种AI应用的不断增长的需求。通过减少体力劳动并改善模型绩效,该项目将为依靠生成AI技术的行业提供重要价值。

微调有不同类型。微调方法的选择取决于系统规格和使用。 Lora(低级适应)模型具有更高的效率和紧凑性。它们的功能像在现有检查点模型上建立的适配器。具体而言,Lora模型仅更新检查点模型的参数子集,从而增强其功能。这种方法使Lora型号可以保持较小的尺寸,通常从2MB到500MB,并可以频繁地进行特定概念或样式的微调。
例如,当使用Dreambooth进行微调稳定的扩散模型,该模型修改整个模型以适应特定的概念或样式时,由于产生的较大模型大小(大约2至7 GB)和大量的GPU使用,因此需要大量的计算资源。相比之下,洛拉模型获得了可比的推断结果,其GPU要求明显降低。
虽然洛拉是一种广泛采用的方法,但还有其他方法可以修改稳定扩散。一种这样的方法涉及交叉说法模块,该模块是从将提示文本转换为文本嵌入的输入。文本反转代表另一种方法,甚至比洛拉更紧凑,更快。但是,文本反转仅限于用于特定概念或样式的微调文本嵌入。负责图像生成的基础U-NET保持不变,将文本反转限制为生成与训练过程中使用的图像相似的图像,而无需产生全新的输出。
在这个项目中,有两种类型的微调方法。第一个选择是使用Dreambooth和Lora的组合,而另一个仅使用Lora。使用第一个选项是最佳选择,它是该项目中首选的方法。此选择的原因是:
增强的适应性:Dreambooth是一种微调方法,可以使整个模型全面适应特定的概念或样式。通过与Dreambooth进行微调,SDXL模型可以学习与所需输出紧密保持一致的细微细节和特征。
效率和紧凑性:洛拉(低级适应)在Dreambooth微调之后发挥作用。 Lora模型旨在通过仅更新检查点模型参数的子集来优化效率。与完全微调的模型相比,这种方法大大降低了模型大小(通常为2MB至500MB),例如仅通过Dreambooth修改的模型。
减少的计算资源:将Dreambooth与Lora结合起来会导致在培训和推理过程中需要更少的GPU资源的模型中。 Dreambooth最初需要大量资源,这是由于其全面的微调过程,但是Lora随后的参数减少确保了模型仍然可以管理和高效。
绩效保存:尽管效率提高,洛拉仍保持了通过Dreambooth微调实现的高质量性能。这种组合确保该模型保留其产生令人印象深刻的输出的能力,可与完全微调模型产生的能力相当。
迭代精致的灵活性:Dreambooth的迭代方法随后是Lora,允许迭代精致和微调。在不损害模型的效率或性能的情况下,需要对不断发展的概念或样式进行持续适应不断发展的概念或样式的情况至关重要。
如上所述,在该项目中微调SDXL模型的首选方法是Dreambooth和Lora组合。结合Dreambooth和Lora的基本原理在于优化模型适应性和计算效率之间的权衡。 Dreambooth允许对模型的参数进行彻底适应数据或所需输出中的特定细微差别。但是,这种全面的适应可能会导致更大的模型尺寸和增加的计算需求,尤其是在培训和推理期间。另一方面,洛拉(Lora)介入了Dreambooth之后,以简化该模型,在保留其性能的同时降低了大小。这种组合利用了这两种方法的优势:Dreambooth进行精确适应和洛拉以进行有效的参数管理。
这种微调方法的主要步骤是:
参数调整:使用Dreambooth调整SDXL模型中的整个参数集,以更加与定义的目标保持一致。此过程涉及基于目标数据集或所需输出特性的迭代更新。
培训阶段:使用定义的目标和培训数据执行微调过程。此阶段确保SDXL模型可以很好地调整到手头任务的特定细微差别和要求。
参数选择:DreamBooth,确定参数的子集,这些参数对于维持或增强性能最关键。此步骤涉及分析微调SDXL模型中不同参数的重要性和影响。
低级别分解:将LORA技术(例如低级矩阵分解)应用于这些选定的参数子集。 Lora将参数矩阵分解为低级别组件,从而降低了冗余,并将计算资源集中在最具影响力的参数上。
选择性参数更新:仅更新已确定的低级组件,从而在保留或改善其性能指标的同时优化了模型的效率。
(返回到顶部)
Accelerate是一个通用且用户友好的库,该库设计是通过拥抱面孔来简化和优化在各种硬件设置上培训和部署机器学习模型的过程。它提供了一个统一的界面,该界面抽象了配置和管理不同的分布式培训环境(例如Multi-GPU和TPU设置)的复杂性。加速使开发人员可以轻松扩展其Pytorch代码,重点是模型开发而不是基础基础架构。
该图书馆的好处是:
简化分布式培训:无需手动配置和管理复杂的分布式设置,从而使您可以专注于开发和微调模型。
增强资源利用率:最大化可用硬件的使用,以确保您的GPU和TPU有效地利用您的GPU和TPU来加快训练和推理过程。
支持大型模型:促进需要大型模型的处理,这些模型需要大量的内存和计算能力,从而使其与最先进的神经网络一起使用。
减少开发开销:简化分布式培训在您的项目中的集成,节省时间并减少与管理不同硬件环境相关的开销。
BitsandBytes是一个高效且创新的库,旨在优化大型神经网络的性能,尤其是在培训和推理的背景下。它提供了工具和技术,可显着减少记忆消耗和计算开销而无需牺牲准确性。 BitsandBytes的杰出功能之一是其对8位精度优化器的支持。
在这个项目中,我们使用了8位优化器技术。 BitsandBytes中的8位优化器是一种在训练过程中将重量和梯度的精度从32位浮点数量化为8位整数的技术。利用BitsandBytes的8位优化器对于涉及大规模神经网络的项目尤其有利,例如稳定扩散XL(SDXL)等生成模型的微调。使用8位优化器的主要原因包括:
处理较大的型号:将较大的型号安装到可用的硬件内存中,从而实现了原本是不可行的最先进体系结构的培训。
更快的训练:通过减少计算负载来加速培训时间,从而可以更快地实验和迭代。
资源优化:最大化可用硬件的使用,减少了昂贵的升级需求并有效利用现有资源。
增强性能:与传统的32位训练方法相当的精度和性能,同时受益于记忆和计算需求的减少。
Transformers库是由拥抱面所开发的,是一个开源库,为自然语言处理(NLP)和其他任务提供了广泛的先进培训模型。它支持各种变压器架构,例如Bert,GPT,T5,Roberta等。该库旨在使这些功能强大的模型易于用于各种应用程序,包括文本分类,翻译,问题答案等。
使用此库的好处是:
访问尖端模型:轻松访问和实现NLP及以后的一些最先进的模型,以确保您正在使用表现最好的体系结构。
快速开发:图书馆的直接API允许快速进行原型制作和实验,从而大大加快了开发过程。转移学习能力:对您的特定任务进行微型预训练的模型,利用先验知识并通过更少的数据来实现高性能。
多功能应用程序:使用库进行广泛的任务,包括文本分类,情感分析,命名实体识别,机器翻译等。
强大的社区支持:受益于拥抱面孔提供的强大社区和广泛的资源,以确保您获得克服挑战和创新所需的支持。
PEFT(参数有效的微调)库旨在优化大规模机器学习模型的微调过程。 PEFT开发的目的是应对具有有限的计算资源的微调大规模模型的挑战,重点关注的技术可以有效地适应预训练的模型对新任务的有效调整,但对模型参数的变化很小。
使用PEFT的好处:
效率:侧重于参数效率方法,减少与微型大型模型相关的计算和内存开销。
可访问性:使您可以在标准硬件上微调最先进的模型,从而使对高级机器学习技术的访问民主化。
速度:加速微调过程,允许更快的模型更新和部署。
性能:得益于高级微调技术,即使调整了更少的参数,也可以确保高性能。
多功能性:可以应用于各种模型和任务,为机器学习从业人员提供多功能工具。
(返回到顶部)
计算这些梯度的反向传播需要存储模型的中间激活。这可能是记忆密集型的,尤其是对于SDXL等大型模型。梯度检查点通过将内存使用量交换为额外的计算时间来解决此内存挑战。梯度检查点在反向传播过程中并没有在整个模型中存储所有中间激活,而是从先前保存的检查点开始定期重新计算激活。这种方法通过在向后通过期间直接重新计算激活来降低峰值内存的使用情况。通过使用梯度检查点,存储所有中间激活的存储开销将减少。当经过广泛参数调整(Dreambooth)和选择性更新(LORA)的微调模型(LORA)时,这尤其有益。虽然梯度检查点减少了内存消耗,但由于重新组件而引入了其他计算开销。内存和计算之间的权衡需要根据可用资源和特定的微调目标来平衡。
亚当(自适应力矩估计)是一种流行的优化算法,广泛用于深度学习。它结合了每个参数的自适应学习率和动量以加速收敛。通常,亚当使用32位浮点数(单个精度)来存储梯度和更新参数。 “ 8位亚当”通过为这些操作使用8位定点编号来修改此操作。通过使用8位精度而不是32位,“ 8位亚当”可以显着降低训练过程中存储梯度和参数所需的内存足迹。这对于具有许多参数的大型模型尤其有利。由于记忆带宽的要求减少,较低的精度算术操作可以潜在地加速计算。这可能会导致更快的培训时间,尤其是在优化较低精度操作的硬件体系结构上。但是,有权衡。使用较低的精度会影响模型的准确性和稳定性,尤其是如果未仔细实施的话。诸如梯度缩放或自适应精度调整之类的技术可能需要减轻任何潜在的准确性损失。
浮点精度有两个精度水平,32位浮点和16位浮点。 32位浮点是用于存储模型参数和执行计算的大多数深度学习框架中使用的标准精度。它提供了高数值的精度,但需要更多的内存和计算资源。 16位浮点是降低的精度格式,该格式使用了32位浮点的一半。它加速了计算,尤其是在带有张量内核的GPU上,同时为许多深度学习任务保持足够的数值精度。利用16位精度可以显着加快训练时间,尤其是对于涉及复杂计算的大型模型等大型模型。此外,降低的精度需要更少的内存带宽,这使得在可用硬件限制内训练较大的型号或批处理大小。
(返回到顶部)
使用COLAB设置项目的说明。请按照下面的链接自己训练。您可以在“ Statue_lora”文件夹中找到经过预定的模型。
要使用经过训练的大理石雕像数据集训练的验证模型运行简化的推理演示,请使用以下命令。
要在终端中安装所需的软件包,请键入:
pip install -r requirements.txt在终端中,类型:
streamlit run main.py(返回到顶部)