首页 > 其他分享 >AI Toolkit + H100 GPU,一小时内微调最新热门文生图模型 FLUX

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

时间:2024-09-09 15:24:43浏览次数:13  
标签:name 训练 文生 模型 torch FLUX AI true 我们

上个月,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-dotenv

import 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':
        continue
    image = 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 name
  name: <YOUR LORA NAME>
  process:
    - type: 'sd_trainer'
      # root folder to save training sessions/samples/weights
      training_folder: "output"
      # uncomment to see performance stats in the terminal every N steps
#      performance_log_every: 1000
      device: 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: 16
        linear_alpha: 16
      save:
        dtype: float16 # precision to save
        save_every: 250 # save every this many steps
        max_step_saves_to_keep: 4 # how many intermittent saves to keep
      datasets:
        # 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 time
          shuffle_tokens: false  # shuffle caption order, split by commas
          cache_latents_to_disk: true  # leave this true unless you know what you're doing
          resolution: [1024]  # flux enjoys multiple resolutions
      train:
        batch_size: 1
        steps: 2500  # total number of steps to train 500 - 4000 is a good range
        gradient_accumulation_steps: 1
        train_unet: true
        train_text_encoder: false  # probably won't work with flux
        gradient_checkpointing: true  # need the on unless you have a ton of vram
        noise_scheduler: "flowmatch" # for training only
        optimizer: "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 results
        linear_timesteps: true

        # ema will smooth out learning, but could slow it down. Recommended to leave on.
        ema_config:
          use_ema: true
          ema_decay: 0.99

        # will probably need this if gpu supports it for flux, other dtypes may not work correctly
        dtype: bf16
      model:
        # huggingface model name or path
        name_or_path: "black-forest-labs/FLUX.1-dev"
        is_flux: true
        quantize: 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_scheduler
        sample_every: 250 # sample every this many steps
        width: 1024
        height: 1024
        prompts:
          # 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 flux
        seed: 42
        walk_seed: true
        guidance_scale: 4
        sample_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 中国区独家战略合作伙伴卓普云

标签:name,训练,文生,模型,torch,FLUX,AI,true,我们
From: https://blog.csdn.net/DO_Community/article/details/142058478

相关文章

  • AI算力池化技术助力运营商打造智算生态
    数字经济时代,算力已成为国民经济发展的重要基础设施。随着数字化转型的不断深入和人工智能技术的广泛应用,构建以新型智算中心为核心的智能算力生态体系正驱动着数字经济快速发展,成为人工智能赋能千行百业的重中之重。2022年2月,国家正式启动“东数西算”工程,作为数字信息基础设施建......
  • 记录一下,AIGC图生图的原理
    AIGC图生图的原理主要基于深度学习和生成式模型,特别是生成对抗网络(GAN)和扩散模型(DiffusionModel)等先进技术。这些模型通过学习大量图像数据中的规律和模式,能够生成具有高度真实感和多样性的图像。以下是对AIGC图生图原理的详细解析:提示:以下是本篇文章正文内容,下面内容......
  • AI算力池化技术在银行业的最佳实践荣获“科学普及达人奖”
    纵观半个多世纪以来的金融行业发展历史,每一次技术升级与商业模式变革依赖科技赋能与理念创新的有力支撑,以人工智能为代表的新技术给金融机构了带来巨大效益。近日,由中国人民银行科技司指导、北京金融科技产业联盟支持、《金融电子化》杂志社举办的第二届“金科E学堂——金融科技达......
  • Midjourney中文版登陆CSDN!AI绘画新纪元,等你来探索
    CSDN的朋友们,你们期待的AI绘画神器来了!......
  • OPPO市场份额跌跌不休,AI能否成为翻身关键?
    在智能手机市场的新一轮回暖中,众多品牌纷纷抓住了机遇,实现了出货量的显著提升。然而,曾经的市场领头羊OPPO却在这场竞赛中黯然失色,其市场份额和出货量均出现了明显的下滑,甚至在全球市场中的排名也一再跌落。面对如此严峻的形势,OPPO将全部希望寄托在了AI技术上,试图通过这一革命性......
  • IBM AI Developer 专业证书专项课程-Introduction to Software Engineering-Unit2-前
    前端网站开发前端开发简介用户交互:用户在浏览在线购物网站时,主要与网站的前端进行交互。这包括浏览不同的页面、选择不同的产品类别、比较产品等活动。前端的作用:前端是用户直接接触的部分,它决定了用户如何与网站或应用进行交互,以及他们的视觉体验。网站开发基础HTML(Hyp......
  • 【更新日志】AI运动识别插件又双叕发布更新了,v1.5.4版已正式发布。
    Ai运动识别插件可以为您的小程序赋于原生的人体检测、运动识别、姿态识别、运动计时计数AI能力,让您的小程序轻松实现AI健身、线上运动会、学生体测等场景,并拥有大量的用户案例,针对近期开发者的反馈,我们修复了相关问题,并对部分功能进行了优化增强,发布了v1.5.4版。本次版本的详细......
  • 在NAS上打造AI加持的云端个人开发环境
    作为一个有追求程序员,在工作之余有时也需要搞点开发,这时开发环境就成为一个有点棘手的问题。每个程序员都希望有一个长期的、稳定的开发环境,这样用起来才顺手。用工作电脑毕竟有不方便的方面,各种全家桶、监控、访问限制……总之工作和个人的事情还是应该彻底分开。如果用自己的......
  • GPU设备化到服务化:高质量AI算力基础设施的关键
    1引言随着人工智能技术的飞速发展,AI算力基础设施已成为支撑AI创新的关键。然而,当前的AI算力基础设施建设及管理面临着诸多挑战。目前常见的异构GPU集群部署和形态为图1-1的孤岛式集群部署+烟囱式算力使用。图1-1传统异构GPU集群形态孤岛式异构集群,即每个厂商的异构智算资源单独组......
  • LivePortrait: 让静态图像“活”起来、更好地控制图片/视频中人物的表情,新增动物模式,
     引言随着AI技术的飞速发展,图像生成与编辑的门槛不断降低,尤其在人像视频生成领域取得了令人瞩目的成就。快手可灵大模型团队开源的LivePortrait框架,以其出色的性能与创新的设计,引领了AI生成的新浪潮。LivePortrait不仅能够将静态图像转换为动态视频,还能精确控制面......