AI Toolkit + H100 GPU,一小时内微调最新热门文生图模型 FLUX

2024-09-09 16:12

本文主要是介绍AI Toolkit + H100 GPU,一小时内微调最新热门文生图模型 FLUX,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上个月,FLUX 席卷了互联网,这并非没有原因。他们声称优于 DALLE 3、Ideogram 和 Stable Diffusion 3 等模型,而这一点已被证明是有依据的。随着越来越多的流行图像生成工具(如 Stable Diffusion Web UI Forge 和 ComyUI)开始支持这些模型,FLUX 在 Stable Diffusion 领域的扩展将会持续下去。

自 FLUX 模型发布以来,我们还看到了用户工作流程中的许多重要进展。其中最值得注意的是发布了第一个 LoRA(低秩自适应模型)和 ControlNet 模型,以改进指导。这些模型分别允许用户对文本指导和对象放置进行一定程度的控制。

在这篇文章中,我们将介绍使用 AI Toolkit 中的自定义数据训练你自己的 LoRA 的首批方法之一。Jared Burkett 提供的这个仓库,为我们带来了快速连续微调 FLUX schnell 或 dev 的最佳新方法。继续阅读,了解使用 FLUX 训练你自己的 LoRA 所需的所有步骤。

设置H100

如何在 Paperspace 控制台上创建新的机器

首先,我们使用的 H100 GPU 云服务源自 DigitalOcean 旗下的 Paperspace 平台。因为平台有 H100 单张和 H100x8 两种机型,而且提供了 Jupiter notebook和模型部署能力。该平台还提供包括 A6000、A5000、A100 等不同型号的 GPU。通过 DigitalOcean 中国区独家战略合作伙伴卓普云,可以咨询包年、包月的不同折扣。

在 DigitalOcean 的Paperspace 上可以配置单卡 GPU 或多 GPU的机器。你可以通过点击 Paperspace 控制台左上角的 Gradient/Core 按钮并切换到 Core 来启动新的 H100 或多路 A100/H100 机器。接着,点击右上角的“创建机器”按钮。

在创建新机器时,请务必选择正确的 GPU 和模板,即预装了大多数我们将使用的软件包的 ML-In-A-Box 模板。你还可以选择一台存储空间足够大的机器(大于 250 GB),以避免在训练模型后遇到潜在的内存问题。

设置完成后,启动你的机器。然后,你可以通过浏览器中的桌面流访问你的机器,或从本地机器通过 SSH 连接进入。

数据准备

现在我们已全部设置完毕,可以开始加载所有训练数据。要选择训练数据,请选择相机中独特的主题或我们可以轻松获得的图像。这可以是风格或特定类型的对象/主题/人。

例如,我们选择对本文作者的脸部进行训练。为此,我们使用高质量相机以不同角度和距离拍摄了大约 30 张自拍照。然后将这些图像裁剪成正方形,并重命名以适合命名所需的格式。然后我们使用 Florence-2 自动为每张图片添加标题,并将这些标题保存在与图像相对应的文本文件中。

数据必须以以下格式存储在自己的目录中:

---|Your Image Directory|
------- img1.png
------- img1.txt
------- img2.png
------- img2.txt
...

图片和文本文件必须遵循相同的命名约定

为了实现所有这些,我们建议调整以下代码片段以运行自动标记。在您的图像文件夹上运行以下代码片段(或 GitHub repo 中的 label.py)。

!pip install -U oyaml transformers einops albumentations python-dotenvimport requests
import torch
from PIL import Image
from transformers import AutoProcessor, AutoModelForCausalLM 
import os
device = "cuda:0" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
model_id = 'microsoft/Florence-2-large'model = AutoModelForCausalLM.from_pretrained(model_id, trust_remote_code=True, torch_dtype='auto').eval().cuda()
processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True)prompt = "<MORE_DETAILED_CAPTION>"for i in os.listdir('<YOUR DIRECTORY NAME>'+'/'):if i.split('.')[-1]=='txt':continueimage = Image.open('<YOUR DIRECTORY NAME>'+'/'+i)inputs = processor(text=prompt, images=image, return_tensors="pt").to(device, torch_dtype)generated_ids = model.generate(input_ids=inputs["input_ids"],pixel_values=inputs["pixel_values"],max_new_tokens=1024,num_beams=3,do_sample=False)generated_text = processor.batch_decode(generated_ids, skip_special_tokens=False)[0]parsed_answer = processor.post_process_generation(generated_text, task="<MORE_DETAILED_CAPTION>", image_size=(image.width, image.height))print(parsed_answer)with open('<YOUR DIRECTORY NAME>'+'/'+f"{i.split('.')[0]}.txt", "w") as f:f.write(parsed_answer["<MORE_DETAILED_CAPTION>"])f.close()

一旦在图像文件夹上运行完毕,带标题的文本文件将以与图像对应的名称保存。从这里开始,我们应该已经准备好开始使用 AI 工具包了!

设置训练循环

我们以 Ostris repo AI Toolkit 为基础开展这项工作,并想对他们的出色工作表示赞赏。

要开始使用 AI Toolkit,首先获取以下代码并将其粘贴到您的终端中以设置环境:

git clone https://github.com/ostris/ai-toolkit.git
cd ai-toolkit
git submodule update --init --recursive
python3 -m venv venv
source venv/bin/activate
pip3 install -r requirements.txt
pip install peft
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

这应该需要几分钟。

从这里开始,我们还有最后一步要完成。使用以下终端命令登录,向 HuggingFace Cache 添加一个只读令牌:

huggingface-cli login

设置完成后,我们就可以开始训练循环了。

配置训练循环

AI Toolkit 提供了一个训练脚本 run.py,它可以处理训练 FLUX.1 模型的所有复杂问题。

可以对 schnell 或 dev 模型进行微调,但我们建议训练 dev 模型。dev 的使用许可更有限,但与 schnell 相比,它在快速理解、拼写和对象组合方面也更强大。然而,由于 schnell 经过了提炼,它的训练速度应该要快得多。

run.py 采用 yaml 配置文件来处理各种训练参数。对于此用例,我们将编辑 train_lora_flux_24gb.yaml 文件。以下是配置的示例版本:

---
job: extension
config:# this name will be the folder and filename namename: <YOUR LORA NAME>process:- type: 'sd_trainer'# root folder to save training sessions/samples/weightstraining_folder: "output"# uncomment to see performance stats in the terminal every N steps
#      performance_log_every: 1000device: cuda:0# if a trigger word is specified, it will be added to captions of training data if it does not already exist# alternatively, in your captions you can add [trigger] and it will be replaced with the trigger word
#      trigger_word: "p3r5on"network:type: "lora"linear: 16linear_alpha: 16save:dtype: float16 # precision to savesave_every: 250 # save every this many stepsmax_step_saves_to_keep: 4 # how many intermittent saves to keepdatasets:# datasets are a folder of images. captions need to be txt files with the same name as the image# for instance image2.jpg and image2.txt. Only jpg, jpeg, and png are supported currently# images will automatically be resized and bucketed into the resolution specified# on windows, escape back slashes with another backslash so# "C:\\path\\to\\images\\folder"- folder_path: <PATH TO YOUR IMAGES>caption_ext: "txt"caption_dropout_rate: 0.05  # will drop out the caption 5% of timeshuffle_tokens: false  # shuffle caption order, split by commascache_latents_to_disk: true  # leave this true unless you know what you're doingresolution: [1024]  # flux enjoys multiple resolutionstrain:batch_size: 1steps: 2500  # total number of steps to train 500 - 4000 is a good rangegradient_accumulation_steps: 1train_unet: truetrain_text_encoder: false  # probably won't work with fluxgradient_checkpointing: true  # need the on unless you have a ton of vramnoise_scheduler: "flowmatch" # for training onlyoptimizer: "adamw8bit"lr: 1e-4# uncomment this to skip the pre training sample
#        skip_first_sample: true# uncomment to completely disable sampling
#        disable_sampling: true# uncomment to use new vell curved weighting. Experimental but may produce better resultslinear_timesteps: true# ema will smooth out learning, but could slow it down. Recommended to leave on.ema_config:use_ema: trueema_decay: 0.99# will probably need this if gpu supports it for flux, other dtypes may not work correctlydtype: bf16model:# huggingface model name or pathname_or_path: "black-forest-labs/FLUX.1-dev"is_flux: truequantize: true  # run 8bit mixed precision
#        low_vram: true  # uncomment this if the GPU is connected to your monitors. It will use less vram to quantize, but is slower.sample:sampler: "flowmatch" # must match train.noise_schedulersample_every: 250 # sample every this many stepswidth: 1024height: 1024prompts:# you can add [trigger] to the prompts here and it will be replaced with the trigger word
#          - "[trigger] holding a sign that says 'I LOVE PROMPTS!'"\- "woman with red hair, playing chess at the park, bomb going off in the background"- "a woman holding a coffee cup, in a beanie, sitting at a cafe"- "a horse is a DJ at a night club, fish eye lens, smoke machine, lazer lights, holding a martini"- "a man showing off his cool new t shirt at the beach, a shark is jumping out of the water in the background"- "a bear building a log cabin in the snow covered mountains"- "woman playing the guitar, on stage, singing a song, laser lights, punk rocker"- "hipster man with a beard, building a chair, in a wood shop"- "photo of a man, white background, medium shot, modeling clothing, studio lighting, white backdrop"- "a man holding a sign that says, 'this is a sign'"- "a bulldog, in a post apocalyptic world, with a shotgun, in a leather jacket, in a desert, with a motorcycle"neg: ""  # not used on fluxseed: 42walk_seed: trueguidance_scale: 4sample_steps: 20
# you can add any additional meta info here. [name] is replaced with config name at top
meta:name: "[name]"version: '1.0'

我们要编辑的最重要的几行位于第 5 行 - 更改名称、第 30 行 - 添加图像目录的路径,以及第 69 行和第 70 行 - 我们可以编辑高度和宽度以反映我们的训练图像。编辑这些行以相应地调整训练器以在你的图像上运行。

此外,我们可能想要编辑提示。几个提示涉及动物或场景,因此如果我们试图捕捉特定的人,我们可能想要编辑这些提示以更好地通知模型。我们还可以使用第 87-88 行的指导尺度和样本步骤值进一步控制这些生成的样本。

如果我们想更快地训练 FLUX.1 模型,我们可以通过编辑第 37 行的批处理大小和第 39 行的梯度累积步骤来进一步优化模型训练。如果我们在多 GPU 或 H100 上进行训练,我们可以稍微提高这些值,但我们建议保持不变。请注意,提高它们可能会导致内存不足错误。

在第 38 行,我们可以更改训练步骤的数量。他们建议在 500 到 4000 之间,所以我们选择中间的 2500。我们用这个值得到了很好的结果。它会每 250 步检查一次,但如果需要,我们也可以在第 22 行更改这个值。

最后,我们可以将模型从 dev 更改为 schnell,方法是在第 62 行粘贴 schnell 的 HuggingFace id(“black-forest-labs/FLUX.1-schnell”)。现在一切都已设置好,我们可以运行训练了!

运行 FLUX.1 训练循环

要运行训练循环,我们现在需要做的就是使用 run.py 脚本。

 python3 run.py config/examples/train_lora_flux_24gb.yaml

对于我们的训练循环,我们在单个 H100 上使用 60 张图像进行 2500 步训练。整个过程大约需要 45 分钟才能运行。之后,LoRA 文件及其检查点保存在

Downloads/ai-toolkit/output/my_first_flux_lora_v1/.

我们可以看到,面部特征慢慢发生变化,以更紧密地匹配所需对象的特征

在输出目录中,我们还可以使用前面提到的配置提示找到模型生成的样本。这些可以用来查看训练的进展情况。

使用我们新的 FLUX.1 LoRA 进行推理

现在模型已经完成训练,我们可以使用新训练的 LoRA 来调整 FLUX.1 的输出。我们提供了一个可在 Notebook 中使用的快速推理脚本。

import torch
from diffusers import DiffusionPipeline
model_id = 'black-forest-labs/FLUX.1-dev'
adapter_id = f'output/{lora_name}/{lora_name}.safetensors'
pipeline = DiffusionPipeline.from_pretrained(model_id)
pipeline.load_lora_weights(adapter_id)
prompt = "ethnographic photography of man at a picnic"
negative_prompt = "blurry, cropped, ugly"
pipeline.to('cuda' if torch.cuda.is_available() else 'mps' if torch.backends.mps.is_available() else 'cpu')
image = pipeline(prompt=prompt,num_inference_steps=50,generator=torch.Generator(device='cuda' if torch.cuda.is_available() else 'mps' if torch.backends.mps.is_available() else 'cpu').manual_seed(1641421826),width=1152,height=768,
).images[0]
display(image)

通过仅 500 步对本文作者的脸部进行微调,我们能够相当准确地重现他们的特征:

LoRA 训练的示例输出

此过程可应用于任何类型的对象、主题、概念或风格,以进行 LoRA 训练。我们建议尝试各种图像,尽可能多地选择捕捉主题/风格,就像稳定扩散一样。

结束语

FLUX.1 确实是向前迈出的一步,我们个人无法停止将其用于各种艺术任务。它正在迅速取代所有其他图像生成器,这是有充分理由的。

本教程展示了如何使用云端的 GPU 为 FLUX.1 微调 LoRA 模型。读者应该了解如何使用其中显示的技术训练自定义 LoRA。

目前 DigitalOcean 旗下 GPU 云服务平台 Paperspace 提供 NVIDIA H100 的实例,按秒计费,支持随时创建和取消 GPU 云实例。同时,Paperspace 还提供专用网络、云端备份,以及从模型训练到部署的一系列软件工具与服务,可大幅提升 AI 创业者们的开发与业务扩展效率。如需要详询更多产品方案细节以及目前库存情况,可联系 DigitalOcean 中国区独家战略合作伙伴卓普云。

这篇关于AI Toolkit + H100 GPU,一小时内微调最新热门文生图模型 FLUX的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1151644

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

AI绘图怎么变现?想做点副业的小白必看!

在科技飞速发展的今天,AI绘图作为一种新兴技术,不仅改变了艺术创作的方式,也为创作者提供了多种变现途径。本文将详细探讨几种常见的AI绘图变现方式,帮助创作者更好地利用这一技术实现经济收益。 更多实操教程和AI绘画工具,可以扫描下方,免费获取 定制服务:个性化的创意商机 个性化定制 AI绘图技术能够根据用户需求生成个性化的头像、壁纸、插画等作品。例如,姓氏头像在电商平台上非常受欢迎,

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费