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

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

PyCharm 接入 DeepSeek最新完整教程

《PyCharm接入DeepSeek最新完整教程》文章介绍了DeepSeek-V3模型的性能提升以及如何在PyCharm中接入和使用DeepSeek进行代码开发,本文通过图文并茂的形式给大家介绍的... 目录DeepSeek-V3效果演示创建API Key在PyCharm中下载Continue插件配置Con

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

SpringBoot整合DeepSeek实现AI对话功能

《SpringBoot整合DeepSeek实现AI对话功能》本文介绍了如何在SpringBoot项目中整合DeepSeekAPI和本地私有化部署DeepSeekR1模型,通过SpringAI框架简化了... 目录Spring AI版本依赖整合DeepSeek API key整合本地化部署的DeepSeek

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

MySql9.1.0安装详细教程(最新推荐)

《MySql9.1.0安装详细教程(最新推荐)》MySQL是一个流行的关系型数据库管理系统,支持多线程和多种数据库连接途径,能够处理上千万条记录的大型数据库,本文介绍MySql9.1.0安装详细教程,... 目录mysql介绍:一、下载 Mysql 安装文件二、Mysql 安装教程三、环境配置1.右击此电脑

在 Windows 上安装 DeepSeek 的完整指南(最新推荐)

《在Windows上安装DeepSeek的完整指南(最新推荐)》在Windows上安装DeepSeek的完整指南,包括下载和安装Ollama、下载DeepSeekRXNUMX模型、运行Deep... 目录在www.chinasem.cn Windows 上安装 DeepSeek 的完整指南步骤 1:下载并安装