Kohya_ss Flux 训练指南:Flux.1 LoRA 一次配齐,从零到出图
【免费下载链接】kohya_ss项目地址: https://gitcode.com/GitHub_Trending/ko/kohya_ss
第一次打开 Kohya_ss 的 Flux.1 LoRA 训练面板,所有格子都是空的——四个模型路径、一堆没听过的开关。别慌,整件事其实就三段:把文件放对位置、把预设里该动的参数动掉、盯住前 10 分钟。这篇文章带你完整走一遍,跑完你会得到一个能直接插进生成工作流的 LoRA 文件。
开训前一次性配齐四个模型文件
GUI 的 "Flux.1" 面板(对应源码 kohya_gui/class_flux1.py)需要你喂四个文件。别一个个手写参数,直接在预设区载入 presets/lora/flux1D - adamw8bit fp8.json——它天生就是为 fp8 省显存准备的那套。四个字段在预设里都印着 "put the full path to ... here",套用时你唯一要做的,是把它们替换成磁盘上的真实路径:
| 文件 | 放哪里 | 为什么 |
|---|---|---|
| t5xxl fp16 版 T5-XXL | 预设 t5xxl 字段(T5-XXL Path) | 主力语义编码器;⚠️ 必须用 fp16 版本,fp8 版会挂 |
| clip_l.safetensors | 预设 clip_l 字段(CLIP-L Path) | 辅助文本编码器;Base Model Type 选 chroma(schnell 系)时这一项可以整个不用 |
| ae.sft | 预设 ae 字段(VAE Path) | 负责 latent 解码和样图采样,缺它出不了图 |
| flux1-dev.safetensors | pretrained_model_name_or_path | 主模型本体,所有权重都从它出发 |
Base Model Type 下拉里 flux 和 chroma 二选一:用 flux1-dev 就保持 flux;chroma 是给 schnell 系模型用的,不需要 CLIP-L,guidance_scale 还会自动归零。
只动这几个参数
预设里真正要理解的只有两组:LoRA_type = Flux1、optimizer = AdamW8bit、mixed_precision = bf16、fp8_base = true、learning_rate = 0.0003、network_dim = 16、network_alpha = 16、max_train_steps = 1000、train_batch_size = 1。
- batch 为什么焊死在 1:Flux.1 的双块(double blocks,Transformer 里的主要算子层)又宽又深,batch 1 是显存装得下、收敛又成立的那个交点。
- AdamW8bit 为什么省显存:优化器状态(一阶/二阶矩)改用 8 位存储,比普通 AdamW 的显存占用直接砍掉一截,这也是 "Flux LoRA 显存" 话题里最值钱的一刀。
其余参数收进这张表,照抄即可:
| 参数 | 取值 | 一句话解释 |
|---|---|---|
| discrete_flow_shift | 3 | 离散流偏移,调度器默认 3.0 |
| timestep_sampling | sigmoid | 预设值;GUI 另有 sigma / uniform / flux_shift 可选 |
| model_prediction_type | raw | 预设值 |
| guidance_scale | 1 | 预设值,GUI 默认是 3.5,别被默认值带偏 |
| flux1_cache_text_encoder_outputs | true | 文本编码结果缓存住,不用每个 epoch 重算 |
| flux1_cache_text_encoder_outputs_to_disk | true | 缓存落盘,中断重跑时白捡时间 |
| gradient_checkpointing | true | 用重计算时间换显存空间 |
| train_blocks | all | 显存吃紧时改 double / single,只训部分块 |
| max_grad_norm | 1 | 梯度裁剪,专治 loss 尖峰 |
数据与桶:10–50 张图加同名标注
数据集不用多:目标人物(或目标风格)的图 10–50 张,每张旁边放一个同名的 .txt 标注文件。预设里 caption_extension 已写好 .txt,train_data_dir 填你的图片文件夹就齐活了。仓库里就有现成范例:


test/img 下每张图配一个 .txt(内容就一句描述,比如 "a painting of a steam punk skull with a gas mask, by darius kawasaki"),这就是 Flux.1 LoRA 训练数据的最小单元。
分辨率的事全交给桶(bucket)机制:预设里 enable_bucket = true、max_resolution = 512,512、bucket_reso_steps = 64、bucket_no_upscale = true——图按宽高比缩进对应的桶,小图绝不上采样。别手痒把 max_resolution 往上调,分辨率上去一档,显存占用近乎翻倍,前面的省显存配置全白做。
启动后的前 10 分钟
启动四步:选基础模型 → 加载数据集 → 把 output_dir 和 output_name 填成你自己的 → 点 Start。然后只盯三处:
- Checkpoint 落盘:save_every_n_steps = 50,每 50 步写一个 safetensors(save_precision = bf16)。1000 步下来有 20 个快照,最终效果不满意,回头挑中间最好的一步就行。
- loss 曲线:从初始值逐渐往下走是正常剧本;前几步抖动不用怕,但整体趋势不能往上爬。
- 样图:预设的 sample_prompts 是 "saruman posing under a stormy lightning sky, photorealistic --w 832 --h 1216 --s 20 --l 4 --d 42",euler 采样器生成。样图风格应逐步向目标人物靠拢——loss 在降 + 样图在变像,两条都成立才说明方向对了。
翻车快查
⚠️ 九成翻车落在这三种里:
- 症状:OOM,报显存不足→ 原因:double blocks 太大,优化器状态又占一截 → 一个动作:train_blocks 从 all 改成 double 或 single;还不够,再开 CPU Offload Checkpointing(实验性功能)。fp8_base + bf16 已经是保守方案,减块 + batch 1 能救绝大多数情况。
- 症状:启动即模型加载失败→ 原因:路径没给全,或 T5-XXL 拿成了 fp8 版 → 一个动作:逐个核对四个路径是不是完整绝对路径,把 T5-XXL 换成 fp16 版。
- 症状:loss 不降或来回震荡→ 原因:0.0003 的学习率对当前数据太猛 → 一个动作:learning_rate 降到 0.0001,确认 max_grad_norm = 1 真的生效;仍不稳就把 min_snr_gamma、loss_type 还原成预设值。
出图验收:LoRA 装回工作流才算数
训练结束 ≠ 训好了。把 output_dir 里那个 safetensors 丢进 ComfyUI 的 models/loras 目录,用 Flux 加载 LoRA 的节点挂进你现有的出图工作流,然后做三个动作:
- 固定 prompt 和 seed,权重从 0.8 左右起,出 3–5 张:目标人物的特征要能稳定出现,且脸、身体不崩。
- 权重降到 0.5:只留风格或特征残留、无关内容不被污染,说明 LoRA 是"可插拔"的,没有把底模拖坏。
- 换一张完全不相干的 prompt试:画面不该被目标人物绑架;如果加载后出图毫无变化,则是权重没生效,先查节点连接。
中间那 20 个 checkpoint 就是你的调节旋钮——哪个步骤出的图最稳就用哪个,不必迷信最后一步。
开训前 5 条检查清单
- flux1-dev、ae.sft、clip_l.safetensors、T5-XXL(fp16 版)四个文件就位,填的是完整绝对路径
- AdamW8bit 预设已加载,LoRA_type = Flux1
- fp8_base、gradient_checkpointing、文本编码器缓存(含落盘)已打开
- 数据集 10–50 张图、每张配同名 .txt;train_data_dir 已填
- output_dir、output_name 已改成自己的,样图 prompt 就位,TensorBoard 已打开
【免费下载链接】kohya_ss项目地址: https://gitcode.com/GitHub_Trending/ko/kohya_ss
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考