1、介绍
Fluxgym训练非常方便,只需要更改一个配置文件内容即可。训练时也不需要提前进行图片裁剪、打标等前置工作。
本文章是介绍在16G以下显存下训练Flux模型的方法。
2、部署项目
(1)下载Fluxgym 和 kohya-ss/sd-scripts
git clone https://github.com/cocktailpeanut/fluxgym
cd fluxgym
git clone -b sd3 https://github.com/kohya-ss/sd-scripts
完成之后的文件夹结构应该如下所示:
/fluxgym
app.py
requirements.txt
sd-scripts/
(2)创建虚拟环境fluxgym
使用conda创建,
conda create -n fluxgym python=3.10
conda activate fluxgym
(3)安装python依赖项
进入sd-scripts文件夹,安装依赖项
cd sd-scripts
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
完成之后返回根文件夹(fluxgym),修改requirements.txt文件,将huggingface.co改为hf-mirror.com:
然后安装依赖项:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
(4)安装pytorch Nightly
pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu121
3、启动项目
指定server_name 和 server_port,启动服务。
cd fluxgym
export GRADIO_SERVER_NAME=0.0.0.0
export GRADIO_SERVER_PORT=16080
python app.py
启动成功的日志如下:
打开页面后显示如下:
4、训练模型
(1)模型选择
fluxgym默认支持flux-dev / flux-schnell / bdsqlsz/flux1-dev2pro-single 三种flux模型。
该信息在models.yaml文件里。
不过文件中指定的model全都是大于20G的,在16G显存中无法训练。
我们可以使用flux1-dev-fp8.safetensors模型,链接如下:
F.1-dev/fp8/NF4/GGUF-所需模型文件包-Other-墨幽-LiblibAI
(2)下载模型
该文件比较大,假如公司网络限速的话,可以直接获取下载地址,在linux服务器上下载。
Chrome浏览器上获取下载源地址的方法:
首先点击那14G文件进行下载
然后在浏览器上输入chrome://net-export/,单击开始记录日志,隔个5秒钟左右关闭记录,查看日志,找到liblibai-online.liblib.cloud的链接地址。
最后在linux服务器上直接通过wget命令进行下载。
注意这个是zip包,不是模型文件!!!下载之后需要通过unzip命令解压缩后才能使用。
下载中的日志:
然后在linux上通过wget命令下载该文件。
通过tail -f wget-log.4可以下载进度:
下载完毕后,通过mv命令修改为zip后缀的文件。
然后通过unzip命令解压文件。
然后把里面的文件放到fluxgym对应的目录之下:
mv flux1-dev-fp8.safetensors xx/fluxgym/models/unet
mv clip_l.safetensors xx/fluxgym/models/clip
mv t5xxl_fp8_e4m3fn.safetensors xx/fluxgym/models/clip
mv ae.sft xx/fluxgym/models/vae
修改app.py文件:
将文件中所有的t5xxl_fp16.safetensors替换为t5xxl_fp8_e4m3fn.safetensors。
(3)修改models.yaml文件
在末尾添加如下内容:
flux1-dev-fp8:
repo: .
base: .
license: other
license_name: flux1-dev-fp8-license
file: flux1-dev-fp8.safetensors
然后重新启动项目。
(4)启动训练
1)基本设置
- The name of your LoRA:设置Lora的名称
- Trigger word/sentence:lora的触发词,结尾处需要增加一个英文的逗号
- Base model:基模,选择较小的那个模型
- VRAM:选择12G
上传图片,然后再点击"Add AI captions with Florence-2",生成图片对应的提示词。首次生成时会自动下载模型,模型大概1.5G。
- Max Train Expochs:最多的训练轮次,假如提前收敛则会提前结束。
- Expected training steps:自动计算出来的训练步数
- Sample Image Prompts:提示词样例,不影响训练结果
- Sample Image Every N Steps:不要修改该值
- Resize dataset images:训练模型结果对应的分辨率。
注意(使用阶段的剧透):即使Resize dataset images设置为512*512,但是如果空潜空间图像设置为1024*1024,那么最终生成的还是1024*1024的图像。
2)高级选项
点击Advanced options打开高级选项:
- save_every_n_epochs:每N次保存一次模型,总轮次不多的话填1
- console_log_file:日志文件位置,比如:"/data/work/xiehao/fluxgym/log2/2253",记得加双引号。
- console_log_simple:打勾
- fp8_base_unet:打勾,因为我们使用的是fp8的模型
3)训练过程
29张图片,以上参数,会占用10G的显存。
29张图片,768分辨率,会占用12G的显存。
运行中观察Volatile GPU-Util的值,需要大于0,一般是99%或100%。
如果是0,说明停止训练了。
训练完整日志如下:
[2025-01-27 21:26:51] [INFO] Running bash "/data/work/xiehao/fluxgym/outputs/girl-flux/train.sh"
[2025-01-27 21:27:00] [INFO] 2025-01-27 21:27:00 INFO highvram is enabled / highvramが有効です train_util.py:4199
[2025-01-27 21:27:00] [INFO] WARNING cache_latents_to_disk is enabled, so cache_latents is also enabled / cache_latents_to_diskが有効なため、cache_latentsを有効にします train_util.py:4216
[2025-01-27 21:27:00] [INFO] /data/work/anaconda3/envs/fluxgym/lib/python3.10/site-packages/transformers/tokenization_utils_base.py:1601: FutureWarning: `clean_up_tokenization_spaces` was not set. It will be set to `True` by default. This behavior will be depracted in transformers v4.45, and will be then set to `False` by default. For more details check this issue: https://github.com/huggingface/transformers/issues/31884
[2025-01-27 21:27:00] [INFO] warnings.warn(
[2025-01-27 21:27:01] [INFO] You are using the default legacy behaviour of the <class 'transformers.models.t5.tokenization_t5.T5Tokenizer'>. This is expected, and simply means that the `legacy`