8
月
在社区成长 8 月
LEVEL 90
100 XP
过去一个月,FLUX 席卷了互联网,这是有充分理由的。他们声称优于DALLE 3、Ideogram 和Stable Diffusion 3 等模型的说法已被证明是有根据的。随着越来越多流行的图像生成工具(例如Stable Diffusion Web UI Forge 和ComyUI)使用模型的能力,稳定扩散空间的扩展只会继续下去。
自该模型发布以来,我们还看到了用户工作流程的许多重要进步。其中特别包括发布第一个LoRA(低秩适应模型)和ControlNet 模型以改进指导。这些允许用户分别对文本引导和对象放置给予一定程度的指导。
在本文中,我们将研究使用AI Toolkit 中的自定义数据训练我们自己的LoRA 的首批方法之一。来自Jared Burkett 的此存储库为我们提供了快速连续快速微调FLUX schnell 或dev 的最佳新方法。请继续查看使用FLUX 训练您自己的LoRA 所需的所有步骤。
将这个项目变为现实
在图纸空间上运行
/0:34
1×
如何在Paperspace 控制台上创建新机器
首先,我们建议在Paperspace 的DigitalOcean 上设置强大的GPU 或多GPU。单击Paperspace 控制台左上角的“渐变/核心”按钮并切换到“核心”,启动新的H100 或多路A100/H100 机器。从那里,我们单击最右侧的创建机器按钮。
确保在创建新机器时选择正确的GPU 和模板,即ML-In-A-Box,它预装了我们将使用的大多数软件包。我们还应该选择一台具有足够大存储空间(大于250 GB)的机器,这样我们在训练模型后就不会遇到潜在的内存问题。
完成后,启动您的计算机,然后从浏览器中的桌面流或从本地计算机的SSH 访问您的计算机。
例如,我们选择在本文作者的脸部上进行训练。为了实现这一目标,我们使用高品质相机在不同角度和距离拍摄了约30 张自拍照。然后将这些图像裁剪为正方形,并重命名以适合命名所需的格式。然后,我们使用Florence-2 自动为每个图像添加标题,并将这些标题保存在与图像对应的文本文件中。
数据必须以如下格式存放在自己的目录中:
---|
您的图像目录
|
-------- img1.png
-------- img1.txt
------- img2.png
------- img2.txt
.图像和文本文件必须遵循相同的命名约定
为了实现这一切,我们建议调整以下代码片段来运行自动标记。在图像文件夹中运行以下代码片段(或GitHub 存储库中的label.py)。
!pip install -U oyaml 变压器einops 专辑python-dotenv
导入请求
进口火炬
从PIL 导入图像
从Transformer 导入AutoProcessor、AutoModelForCausalLM
导入操作系统
设备='cuda:0' 如果torch.cuda.is_available() else 'cpu'
torch_dtype=torch.float16 如果torch.cuda.is_available() else torch.float32
model_id='微软/Florence-2-large'
模型=AutoModelForCausalLM.from_pretrained(model_id, trust_remote_code=True, torch_dtype='auto').eval().cuda()
处理器=AutoProcessor.from_pretrained(model_id, trust_remote_code=True)
提示='MORE_DETAILED_CAPTION'
for i in os.listdir('您的目录名称'+'/'):
if i.split('.')[-1]=='txt':
继续
image=Image.open('您的目录名称'+'/'+i)
输入=处理器(文本=提示,图像=图像,return_tensors='pt').to(设备,torch_dtype)
generated_ids=model.generate(
input_ids=输入['input_ids'],
像素值=输入['像素值'],
最大新令牌=1024,
num_beams=3,
do_sample=假
)
generated_text=processor.batch_decode( generated_ids,skip_special_tokens=False)[0]
parsed_answer=handler.post_process_ Generation( generated_text, task='MORE_DETAILED_CAPTION', image_size=(image.width, image.height))
打印(parsed_answer)
with open('您的目录名称'+'/'+f'{i.split('.')[0]}.txt', 'w') as f:
f.write(parsed_answer['MORE_DETAILED_CAPTION'])
f.close()
一旦在图像文件夹上运行完成,带标题的文本文件将以与图像相对应的命名保存。从这里开始,我们应该准备好开始使用AI Toolkit 的一切!
要开始使用AI Toolkit,首先将以下代码粘贴到您的终端: 中设置环境
git 克隆https://github.com/ostris/ai-toolkit.git
cd ai工具包
git 子模块更新--init --recursive
python3 -m venv venv
源venv/bin/activate
pip3 install -r 要求.txt
pip 安装peft
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118这应该需要几分钟。
从这里开始,我们还有最后一步需要完成。通过使用以下终端命令登录,将只读令牌添加到HuggingFace 缓存:
Huggingface-cli 登录一旦设置完成,我们就可以开始训练循环了。
将这个项目变为现实
在图纸空间上运行
可以微调schnell 或开发模型,但我们建议训练开发模型。 dev 的使用许可更为有限,但与schnell 相比,它在快速理解、拼写和对象组合方面也强大得多。然而,由于其精炼,schnell 的训练速度应该要快得多。
run.py 采用yaml 配置文件来处理各种训练参数。对于此用例,我们将编辑train_lora_flux_24gb.yaml 文件。这是config: 的示例版本
---
job: 扩展名
配置:
# 这个名称将是文件夹和文件名
name: 你的洛拉名字
进程:
- 输入: 'sd_trainer'
# 保存训练课程/样本/权重的根文件夹
Training_folder: '输出'
# 取消注释以在终端中每N 步查看性能统计数据
# 性能日志_every: 1000
设备: cuda:0
# 如果指定了触发词,如果尚不存在,它将被添加到训练数据的标题中
# 或者,您可以在标题中添加[trigger],它将被替换为触发词
#trigger_word:'p3r5on'
网络:
type: '劳拉'
线性: 16
线性_alpha: 16
保存:
dtype: float16 # 保存精度
save_every: 250 # 每隔这么多步骤保存一次
max_step_saves_to_keep: 4 # 保留多少间歇保存
数据集:
# datasets 是图像文件夹。标题必须是与图像同名的txt文件
# 例如image2.jpg 和image2.txt。目前仅支持jpg、jpeg、png
# 图像将自动调整大小并存储为指定的分辨率
# 在Windows 上,用另一个反斜杠转义反斜杠,这样
# 'C:\\路径\\到\\图像\\文件夹'
-folder_path: 图像路径
标题_ext: 'txt'
Caption_dropout_rate: 0.05 # 将在5% 的时间内丢弃标题
shuffle_tokens: false # 随机播放标题顺序,以逗号分隔
cache_latents_to_disk: true # 保留此true 除非你知道自己在做什么
resolution: [1024] # Flux 享有多种分辨率
火车:
批量大小: 1
Steps: 2500 # 训练总步数500 - 4000 是一个不错的范围
梯度累积步骤: 1
train_unet: 真
train_text_encoder: false # 可能不适用于Flux
gradient_checkpointing: true # 需要打开,除非你有大量的vram
noise_scheduler: 'flowmatch' # 仅用于训练
优化器:'adamw8bit'
LR: 1E-4
# 取消注释以跳过预训练样本
#skip_first_sample: true
# 取消注释以完全禁用采样
#disable_sampling: true
# 取消注释以使用新的vell 曲线权重。实验性但可能会产生更好的结果
Linear_timesteps: 真
#ema 会让学习变得顺利,但也可能会减慢学习速度。建议继续离开。
ema_config:
use_ema: 真
ema_decay: 0.99
# 如果GPU 支持Flux,则可能需要这个,其他数据类型可能无法正常工作
dtype: BF16
型号:
# Huggingface 模型名称或路径
name_or_path: 'black-forest-labs/FLUX.1-dev'
is_flux: 正确
quantize: true #运行8位混合精度
# low_vram: true # 如果GPU 连接到显示器,请取消注释。它将使用较少的显存来量化,但速度较慢。
样本:
自该模型发布以来,我们还看到了用户工作流程的许多重要进步。其中特别包括发布第一个LoRA(低秩适应模型)和ControlNet 模型以改进指导。这些允许用户分别对文本引导和对象放置给予一定程度的指导。
在本文中,我们将研究使用AI Toolkit 中的自定义数据训练我们自己的LoRA 的首批方法之一。来自Jared Burkett 的此存储库为我们提供了快速连续快速微调FLUX schnell 或dev 的最佳新方法。请继续查看使用FLUX 训练您自己的LoRA 所需的所有步骤。
将这个项目变为现实
在图纸空间上运行
设置 H100
0:00/0:34
1×
如何在Paperspace 控制台上创建新机器
首先,我们建议在Paperspace 的DigitalOcean 上设置强大的GPU 或多GPU。单击Paperspace 控制台左上角的“渐变/核心”按钮并切换到“核心”,启动新的H100 或多路A100/H100 机器。从那里,我们单击最右侧的创建机器按钮。
确保在创建新机器时选择正确的GPU 和模板,即ML-In-A-Box,它预装了我们将使用的大多数软件包。我们还应该选择一台具有足够大存储空间(大于250 GB)的机器,这样我们在训练模型后就不会遇到潜在的内存问题。
完成后,启动您的计算机,然后从浏览器中的桌面流或从本地计算机的SSH 访问您的计算机。
数据准备
现在我们已完成所有设置,我们可以开始加载所有训练数据。要选择训练数据,请选择我们可以轻松获得的相机或图像中独特的主题。这可以是对象/主题/人的风格或特定类型。例如,我们选择在本文作者的脸部上进行训练。为了实现这一目标,我们使用高品质相机在不同角度和距离拍摄了约30 张自拍照。然后将这些图像裁剪为正方形,并重命名以适合命名所需的格式。然后,我们使用Florence-2 自动为每个图像添加标题,并将这些标题保存在与图像对应的文本文件中。
数据必须以如下格式存放在自己的目录中:
---|
您的图像目录
|
-------- img1.png
-------- img1.txt
------- img2.png
------- img2.txt
.图像和文本文件必须遵循相同的命名约定
为了实现这一切,我们建议调整以下代码片段来运行自动标记。在图像文件夹中运行以下代码片段(或GitHub 存储库中的label.py)。
!pip install -U oyaml 变压器einops 专辑python-dotenv
导入请求
进口火炬
从PIL 导入图像
从Transformer 导入AutoProcessor、AutoModelForCausalLM
导入操作系统
设备='cuda:0' 如果torch.cuda.is_available() else 'cpu'
torch_dtype=torch.float16 如果torch.cuda.is_available() else torch.float32
model_id='微软/Florence-2-large'
模型=AutoModelForCausalLM.from_pretrained(model_id, trust_remote_code=True, torch_dtype='auto').eval().cuda()
处理器=AutoProcessor.from_pretrained(model_id, trust_remote_code=True)
提示='MORE_DETAILED_CAPTION'
for i in os.listdir('您的目录名称'+'/'):
if i.split('.')[-1]=='txt':
继续
image=Image.open('您的目录名称'+'/'+i)
输入=处理器(文本=提示,图像=图像,return_tensors='pt').to(设备,torch_dtype)
generated_ids=model.generate(
input_ids=输入['input_ids'],
像素值=输入['像素值'],
最大新令牌=1024,
num_beams=3,
do_sample=假
)
generated_text=processor.batch_decode( generated_ids,skip_special_tokens=False)[0]
parsed_answer=handler.post_process_ Generation( generated_text, task='MORE_DETAILED_CAPTION', image_size=(image.width, image.height))
打印(parsed_answer)
with open('您的目录名称'+'/'+f'{i.split('.')[0]}.txt', 'w') as f:
f.write(parsed_answer['MORE_DETAILED_CAPTION'])
f.close()
一旦在图像文件夹上运行完成,带标题的文本文件将以与图像相对应的命名保存。从这里开始,我们应该准备好开始使用AI Toolkit 的一切!
设置训练循环
我们的这项工作基于Ostris 存储库、AI Toolkit,并希望为他们出色的工作而欢呼。要开始使用AI Toolkit,首先将以下代码粘贴到您的终端: 中设置环境
git 克隆https://github.com/ostris/ai-toolkit.git
cd ai工具包
git 子模块更新--init --recursive
python3 -m venv venv
源venv/bin/activate
pip3 install -r 要求.txt
pip 安装peft
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118这应该需要几分钟。
从这里开始,我们还有最后一步需要完成。通过使用以下终端命令登录,将只读令牌添加到HuggingFace 缓存:
Huggingface-cli 登录一旦设置完成,我们就可以开始训练循环了。
将这个项目变为现实
在图纸空间上运行
配置训练循环
AI Toolkit 提供了一个训练脚本run.py,用于处理训练FLUX.1 模型的所有复杂问题。可以微调schnell 或开发模型,但我们建议训练开发模型。 dev 的使用许可更为有限,但与schnell 相比,它在快速理解、拼写和对象组合方面也强大得多。然而,由于其精炼,schnell 的训练速度应该要快得多。
run.py 采用yaml 配置文件来处理各种训练参数。对于此用例,我们将编辑train_lora_flux_24gb.yaml 文件。这是config: 的示例版本
---
job: 扩展名
配置:
# 这个名称将是文件夹和文件名
name: 你的洛拉名字
进程:
- 输入: 'sd_trainer'
# 保存训练课程/样本/权重的根文件夹
Training_folder: '输出'
# 取消注释以在终端中每N 步查看性能统计数据
# 性能日志_every: 1000
设备: cuda:0
# 如果指定了触发词,如果尚不存在,它将被添加到训练数据的标题中
# 或者,您可以在标题中添加[trigger],它将被替换为触发词
#trigger_word:'p3r5on'
网络:
type: '劳拉'
线性: 16
线性_alpha: 16
保存:
dtype: float16 # 保存精度
save_every: 250 # 每隔这么多步骤保存一次
max_step_saves_to_keep: 4 # 保留多少间歇保存
数据集:
# datasets 是图像文件夹。标题必须是与图像同名的txt文件
# 例如image2.jpg 和image2.txt。目前仅支持jpg、jpeg、png
# 图像将自动调整大小并存储为指定的分辨率
# 在Windows 上,用另一个反斜杠转义反斜杠,这样
# 'C:\\路径\\到\\图像\\文件夹'
-folder_path: 图像路径
标题_ext: 'txt'
Caption_dropout_rate: 0.05 # 将在5% 的时间内丢弃标题
shuffle_tokens: false # 随机播放标题顺序,以逗号分隔
cache_latents_to_disk: true # 保留此true 除非你知道自己在做什么
resolution: [1024] # Flux 享有多种分辨率
火车:
批量大小: 1
Steps: 2500 # 训练总步数500 - 4000 是一个不错的范围
梯度累积步骤: 1
train_unet: 真
train_text_encoder: false # 可能不适用于Flux
gradient_checkpointing: true # 需要打开,除非你有大量的vram
noise_scheduler: 'flowmatch' # 仅用于训练
优化器:'adamw8bit'
LR: 1E-4
# 取消注释以跳过预训练样本
#skip_first_sample: true
# 取消注释以完全禁用采样
#disable_sampling: true
# 取消注释以使用新的vell 曲线权重。实验性但可能会产生更好的结果
Linear_timesteps: 真
#ema 会让学习变得顺利,但也可能会减慢学习速度。建议继续离开。
ema_config:
use_ema: 真
ema_decay: 0.99
# 如果GPU 支持Flux,则可能需要这个,其他数据类型可能无法正常工作
dtype: BF16
型号:
# Huggingface 模型名称或路径
name_or_path: 'black-forest-labs/FLUX.1-dev'
is_flux: 正确
quantize: true #运行8位混合精度
# low_vram: true # 如果GPU 连接到显示器,请取消注释。它将使用较少的显存来量化,但速度较慢。
样本: