Context

用户在 Windows + WSL2 环境下搭建 FLUX.2 Klein 9B 流程,用于风格 LoRA 训练和图像生成。

硬件环境:

  • GPU: NVIDIA RTX 5070 Ti (16GB VRAM, Blackwell sm_120)
  • 内存: 48GB
  • 存储: C 盘 >500GB 剩余
  • 系统: Windows + WSL2 Ubuntu 22.04

用户画像:

  • 训练目标: 风格 LoRA
  • 用途: 训练和生图各一半
  • Linux 经验: 基础(会用命令行,查教程能走)

一、关键发现

FLUX.2 Klein 的文本编码器是 Qwen3 8B,不是 T5/CLIP-L

这和 FLUX.1 完全不同,所以不能用 FLUX.1 的模型文件。


二、文件下载清单

训练用模型(FluxGym)

文件 来源 大小
FLUX.2-klein-base-9b-fp8.safetensors HuggingFace / ModelScope ~8.8GB
qwen_3_8b_fp8mixed.safetensors 同上(模型自带) ~7.2GB
flux2-vae.safetensors 同上(模型自带) ~335MB

下载地址:

生图用模型(ComfyUI 分片格式)

文件 大小 放置路径
flux2-klein-9B-transformer-NVFP4.safetensors ~4.8GB models/diffusion_models/
qwen_3_8b_fp8mixed.safetensors ~7.2GB models/text_encoders/
flux2-vae.safetensors ~335MB models/vae/

下载地址: https://huggingface.co/Comfy-Org/flux2-klein-9B/tree/main/split_files


三、安装步骤(按顺序执行)

Phase 1: Windows 端(30 分钟)

1.1 更新 NVIDIA 驱动

1
2
3
下载地址: https://www.nvidia.cn/geforce/drivers/
最低版本: >= 550.90(Blackwell 基础支持)
推荐版本: 595.76+(RTX 50 系列热修复,修复电压问题)

验证:打开 CMD,运行 nvidia-smi,确认看到 RTX 5070 Ti

1.2 启用 WSL2

1
2
# PowerShell 管理员模式
wsl --install -d Ubuntu-24.04

安装完成后重启,设置 Ubuntu 用户名密码。

1.3 验证 WSL2 能识别 GPU

1
2
# 在 WSL2 里运行
nvidia-smi

应该看到和 Windows 一样的输出。


Phase 2: WSL2 系统环境(20 分钟)

2.1 安装系统依赖

1
2
3
sudo apt update && sudo apt upgrade -y
sudo apt install -y python3-venv python3-pip git git-lfs
git lfs install

2.2 创建 Python 虚拟环境

1
2
3
cd ~
python3 -m venv flux-env
source ~/flux-env/bin/activate

2.3 安装 PyTorch(关键!必须 cu128)

1
2
3
4
5
6
# RTX 5070 Ti = Blackwell,需要 CUDA 12.8
# 稳定版(推荐)
pip install torch==2.7.0 torchvision==0.22.0 torchaudio==2.7.0 --index-url https://download.pytorch.org/whl/cu128

# 如稳定版不支持,用 nightly
pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu128

2.4 验证 CUDA

1
python3 -c "import torch; print(torch.cuda.get_device_capability()); print(torch.cuda.get_device_name(0))"

期望输出:

1
2
(12, 0)
NVIDIA GeForce RTX 5070 Ti

Phase 3: 下载模型(1-3 小时)

3.1 安装 hf CLI

1
2
3
4
# huggingface-cli 已弃用,新版命令是 hf
pip install -U huggingface_hub
# 验证
hf --version

3.2 创建模型目录

1
2
3
mkdir -p ~/models/{diffusion_models,text_encoders,vae,lora}
mkdir -p ~/datasets
mkdir -p ~/outputs

3.3 下载训练模型(ModelScope 国内更快)

1
2
3
4
5
6
7
8
# 安装 modelscope
pip install modelscope

# 下载 FLUX.2-klein-base-9B
python3 << 'EOF'
from modelscope import snapshot_download
snapshot_download('black-forest-labs/FLUX.2-klein-base-9B', local_dir='~/models/klein-9b-base')
EOF

或用 hf(HuggingFace 新版 CLI):

1
hf download black-forest-labs/FLUX.2-klein-base-9B --local-dir ~/models/klein-9b-base

3.4 下载 ComfyUI 分片模型(生图用)

1
2
3
hf download Comfy-Org/flux2-klein-9B split_files/flux2-klein-9B-transformer-NVFP4.safetensors --local-dir ~/models --local-dir-use-symlinks False
hf download Comfy-Org/flux2-klein-9B split_files/qwen_3_8b_fp8mixed.safetensors --local-dir ~/models --local-dir-use-symlinks False
hf download Comfy-Org/flux2-klein-9B split_files/flux2-vae.safetensors --local-dir ~/models --local-dir-use-symlinks False

Phase 4: 安装 ComfyUI(生图用,20 分钟)

4.1 克隆 ComfyUI

1
2
3
4
cd ~
git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI
pip install -r requirements.txt

4.2 安装 ComfyUI Manager(扩展管理器)

1
2
cd ~/ComfyUI/custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Manager.git

4.3 安装推荐节点

1
2
git clone https://github.com/rgthree/rgthree-comfy.git
git clone https://github.com/yolain/ComfyUI-Easy-Use.git

4.4 链接模型文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# ComfyUI 模型目录
cd ~/ComfyUI/models

# 链接 diffusion model
ln -s ~/models/flux2-klein-9B-transformer-NVFP4.safetensors diffusion_models/

# 链接 text encoder
ln -s ~/models/qwen_3_8b_fp8mixed.safetensors text_encoders/

# 链接 VAE
ln -s ~/models/flux2-vae.safetensors vae/

# 创建 lora 目录链接
ln -s ~/outputs/lora lora/

4.5 启动 ComfyUI

1
2
cd ~/ComfyUI
python main.py --listen

浏览器打开 http://localhost:8188


Phase 5: 安装训练工具

5.0 工具选择

工具 显存 易用性 说明
FluxGym 12GB ★★★ 可视化 专为 FLUX 优化,自动打标,本文档主推
DiffSynth-Studio 12GB ★★★ 一键流程 阿里出品,国内下载快,备选方案
Kohya sd-scripts 16-24GB ★★ 功能全,但配置复杂
AI Toolkit (ostris) 24GB ★★ 需要 24GB 显存,5070 Ti 不推荐

5070 Ti (16GB) 推荐:FluxGym(下文)或 DiffSynth-Studio(备选)


5.1 方案 A:FluxGym(推荐)

克隆 FluxGym

1
2
3
cd ~
git clone https://github.com/cocktailpeanut/fluxgym.git
cd fluxgym

5.2 安装依赖

1
pip install -r requirements.txt

5.3 克隆 sd-scripts(后端训练脚本)

1
2
3
4
5
cd ~/fluxgym
# 必须用 sd3 分支,主分支不支持 FLUX.2
git clone -b sd3 https://github.com/kohya-ss/sd-scripts.git
cd sd-scripts
pip install -r requirements.txt

5.4 配置 Klein 9B 模型

编辑 ~/fluxgym/models.yaml,添加:

1
2
3
4
5
6
7
8
flux2-klein-9b:
name: FLUX.2 Klein 9B
type: flux2
base: ~/models/klein-9b-base/flux2-klein-base-9b-fp8.safetensors
clip_l: ~/models/klein-9b-base/qwen_3_8b_fp8mixed.safetensors # Klein 用 Qwen3 替代 CLIP-L
t5: ~/models/klein-9b-base/qwen_3_8b_fp8mixed.safetensors
vae: ~/models/klein-9b-base/flux2-vae.safetensors
default: true

5.5 启动 FluxGym

1
2
cd ~/fluxgym
python app.py

浏览器打开 http://localhost:7860


5.2 方案 B:DiffSynth-Studio(备选)

阿里出品的一体化训练平台,优势是国内下载快。

1
2
3
4
cd ~
git clone https://github.com/modelscope/DiffSynth-Studio.git
cd DiffSynth-Studio
pip install -r requirements.txt

训练代码示例:

1
2
3
4
5
6
7
8
9
10
11
from diffsynth.models.sd_lora import LoRATrainer

trainer = LoRATrainer(
model_name="black-forest-labs/FLUX.2-klein-base-9B",
train_data_dir="~/datasets/your_style",
output_dir="~/outputs/lora",
rank=16,
learning_rate=1.5e-4,
num_train_epochs=5
)
trainer.train()

DiffSynth-Studio 优势:

  • 国内 ModelScope 镜像,下载无需翻墙
  • 12GB 显存即可训练
  • 训练完成后可直接在平台内测试生成效果

四、训练配置(16GB VRAM 优化)

FluxGym UI 设置

参数 推荐值 说明
LoRA Rank 16 风格学习够用
LoRA Alpha 32 通常 = 2 × rank
Learning Rate 1.5e-4 风格 LoRA 推荐
Steps 1500-3000 20-50 张图
Batch Size 1 16GB 显存限制
Optimizer AdamW 8bit 省显存
Mixed Precision bf16 RTX 5070 Ti 支持
Gradient Checkpointing ON 必开,省显存
Resolution 512 训练分辨率,显存够可用 1024

数据集准备

  1. 收集 20-50 张目标风格图片
  2. 统一分辨率(建议 512×512 或 1024×1024)
  3. 放入 ~/datasets/<你的风格名>/
  4. FluxGym 会自动生成描述,或手动准备 caption 文件

数据打标(Tagging)

打标的作用

训练时每张图需要一段文字描述(caption/tag),告诉模型”这张图里有什么”。
模型从描述中学习图像内容,风格(画笔、色调、质感)会作为残差被一起学进去

不同 LoRA 类型对打标的要求

LoRA 类型 打标重要性 原因
角色 LoRA 需要触发词绑定角色名,如 shiroha, 1girl
风格 LoRA 标签描述内容,风格自动学
概念 LoRA 需要触发词绑定概念名

FluxGym 自动打标流程

FluxGym 内置自动打标,无需手动操作:

  1. 将原始图片放入 ~/datasets/<你的风格名>/
  2. FluxGym 启动训练时,自动调用 JoyTagBLIP-2 生成描述
  3. 生成的 .txt 文件与图片同名,保存在同一目录
1
2
3
4
5
6
dataset/
├── image001.jpg
├── image001.txt # 自动生成的描述
├── image002.jpg
├── image002.txt
└── ...

自动生成的描述示例:

1
a woman with long hair, standing in a forest, soft lighting, detailed background, anime style, 1girl, white dress, sunlight through trees

手动干预打标

FluxGym 的自动打标不是强制的,逻辑是:

1
2
如果 图片同名.txt 存在 → 用已有的(你的手动版本)
如果 图片同名.txt 不存在 → 自动生成

所以干预方式有三种:

方式 操作 适用场景
全自动 什么都不做 数据量大、对标签质量要求不高
全手动 自己写所有 txt 数据量小、标签要求精确
半自动 先自动生成,再批量修正 推荐:效率和质量兼顾

手动打标工具

工具 特点 链接
WD Tagger Danbooru 风格标签,最常用 SmilingWolf/wd-v1-4-tagger
BooruDatasetTagManager 批量编辑 tag,可视化界面 GitHub: deepghs/BooruDatasetTagManager
JoyTag 新模型,标签质量更高 fancyfeast/joytag

WD Tagger 安装与使用

1
2
3
4
5
6
# 安装
pip install onnxruntime

# 下载模型(选一个)
# wd-vit-tagger-v3 最推荐,标签质量高
git clone https://huggingface.co/SmilingWolf/wd-vit-tagger-v3

使用脚本 tag_images.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import os
import glob
from PIL import Image
import onnxruntime as ort
import numpy as np

# 配置
MODEL_PATH = "wd-vit-tagger-v3/model.onnx"
INPUT_DIR = "~/datasets/your_style"
THRESHOLD = 0.35 # 置信度阈值

# 加载标签列表
with open("wd-vit-tagger-v3/selected_tags.csv", "r") as f:
tags = [line.split(",")[1] for line in f.readlines()[1:]]

# 加载模型
session = ort.InferenceSession(MODEL_PATH)

for img_path in glob.glob(f"{INPUT_DIR}/*.[jp][pn]g"):
img = Image.open(img_path).convert("RGB").resize((448, 448))
img_np = np.array(img)[None, ...].transpose(0, 3, 1, 2).astype(np.float32) / 255

probs = session.run(None, {"input": img_np})[0][0]
selected = [tags[i] for i, p in enumerate(probs) if p > THRESHOLD]

txt_path = os.path.splitext(img_path)[0] + ".txt"
with open(txt_path, "w", encoding="utf-8") as f:
f.write(", ".join(selected))

print(f"{os.path.basename(img_path)}: {len(selected)} tags")

运行:

1
python tag_images.py

后续处理流程

1
2
3
4
5
6
7
8
9
10
11
12
13
cd ~/datasets/your_style

# 1. 批量清理不需要的标签
sed -i 's/, watermark//g' *.txt
sed -i 's/, signature//g' *.txt
sed -i 's/, caption//g' *.txt
sed -i 's/, text//g' *.txt

# 2. 在所有标签开头添加触发词
sed -i 's/^/mystyle, /' *.txt

# 3. 检查结果
head -n 3 *.txt

FluxGym txt 格式要求

要求 说明
文件名 与图片同名,扩展名 .txt(如 image001.jpgimage001.txt
编码 UTF-8
格式 单行,逗号分隔(如 mystyle, 1girl, red dress, outdoor
触发词位置 必须在开头
Token 限制 最多 225 tokens,超出会被截断

支持两种格式:

1
2
3
4
5
# Danbooru 标签(推荐)
mystyle, 1girl, long hair, red dress, outdoor, soft lighting

# 自然语言(也可)
mystyle photo of a girl with long red hair standing outdoors

触发词(Trigger Word)— 关键干预点

触发词是风格 LoRA 最重要的控制开关。

有触发词 无触发词
mystyle, a cat → 用该画风画猫 a cat → 也带这个画风
a cat(不带触发词)→ 正常画风 无法关闭风格,所有图都被污染

正确做法:

1
2
3
4
# 每个 caption 开头加触发词
mystyle, 1girl, forest, soft lighting, detailed background
mystyle, cityscape, night, neon lights, cyberpunk
mystyle, still life, flowers, vase, soft shadows

生图时:

1
2
3
4
5
# 想用这个风格
mystyle, a girl reading book in library

# 不想用这个风格(不加触发词)
a girl reading book in library

常见清理的标签

WD Tagger 会输出一些训练不需要的标签:

标签 建议处理 原因
watermark 删除 不想让模型学水印
signature 删除 同上
text 删除 画面中的文字通常不需要
caption 删除 字幕/对白框
lowres 可选删除 取决于你的训练图片质量
bad anatomy 可选删除 如果原画作有解剖问题

数据量与过拟合风险

数据量 过拟合风险 训练步数建议 说明
< 20张 500-1000 容易记住具体内容,需严格控制步数
20-50张 1500-3000 标准配置,需监控生成效果
100-300张 2000-4000 数据充足,泛化性好
500张+ 很低 3000-5000 数据丰富,学到的是抽象风格

过拟合表现:

  • 生成的图像和训练集中某张图几乎一样
  • 风格过于强烈,LoRA 强度调到 0.3 都很明显
  • 缺乏灵活性,无法和其他风格融合

缓解方法:

  • 数据量充足时,降低 repeats per image(设为 1)
  • 数据量充足时,可适当降低 learning rate(1e-4)
  • 定期检查生成效果,发现过拟合及时停止

大数据量训练配置示例(500张+)

参数 推荐值 原因
Steps 3000-5000 数据多,可以多跑几轮
Repeats 1 数据充足不需要重复
Batch Size 1 显存限制
LoRA Rank 16-32 风格复杂可稍高
Learning Rate 1e-4 数据多可稍低,更稳定

五、生图工作流

模型文件放置

文件类型 文件名 放置路径
Diffusion Model flux2-klein-9B-transformer-NVFP4.safetensors models/diffusion_models/
Text Encoder qwen_3_8b_fp8mixed.safetensors models/text_encoders/
VAE flux2-vae.safetensors models/vae/
LoRA 你的 LoRA 文件 models/loras/

ComfyUI 节点配置

必需节点

节点 作用 关键配置
UNETLoader 加载扩散模型 weight_dtype: fp8_e4m3fn(16GB 显存推荐)
CLIPLoader 加载 Qwen3 文本编码器 单个 CLIPLoader(非 DualCLIPLoader)
VAELoader 加载 VAE 选择 flux2-vae.safetensors
CLIPTextEncode 编码 prompt 正向 prompt + 可选负向 prompt
EmptyLatentImage 生成空白潜空间 设置分辨率(如 1024×1024)
KSampler 采样生成 见下表
VAEDecode 潜空间转图像
SaveImage 保存图像

KSampler 参数(16GB 显存优化)

参数 推荐值 说明
Steps 20-30 Klein 9B 建议值
CFG 4-6 5.0 推荐
Sampler dpmpp_2meuler
Scheduler normalsgm_uniform
Denoise 1.0(文生图) 图生图用 0.7-0.8

LoRA 加载

节点:LoraLoader

连接顺序:

1
2
3
UNETLoader ──► LoraLoader ──► KSampler

CLIPLoader ─────►┘
参数 推荐值 说明
lora_name 选择你的 LoRA models/loras/ 选择
strength_model 0.7-1.0 模型影响力
strength_clip 1.0 文本编码器影响力

FLUX.2 Klein vs FLUX.1 的关键区别

项目 FLUX.1 FLUX.2 Klein
文本编码器 T5 XXL + CLIP-L(DualCLIPLoader) Qwen3 8B(单个 CLIPLoader)
语言支持 英语为主 原生支持中文
模型文件 t5xxl_fp16.safetensors + clip_l.safetensors qwen_3_8b_fp8mixed.safetensors

节点连接图

1
2
3
4
5
6
7
8
9
10
11
UNETLoader ───────────────────────────────────────────┐

CLIPLoader ─┬─► LoraLoader ─┬─► CLIPTextEncode (+) ──┼─► KSampler ─► VAEDecode ─► SaveImage
│ │ │ ▲
│ └─► CLIPTextEncode (-) ──┤ │
│ │
└───────────────────────────────────────────┘

VAELoader ──────────────────────────────────────────────┘

EmptyLatentImage ───────────────────────────────────────┘

16GB 显存优化配置

配置项 说明
模型格式 NVFP4 flux2-klein-9B-transformer-NVFP4.safetensors
Text Encoder FP8 qwen_3_8b_fp8mixed.safetensors
Weight Dtype fp8_e4m3fn UNETLoader 设置
分辨率 1024×1024 显存够可用更高
显存占用 ~13-14GB 留 2-3GB 给推理缓存

内置工作流模板

ComfyUI 内置了 FLUX.2 Klein 工作流,加载方式:

1
ComfyUI → Load → Default Workflows → Flux2

可选模板:

  • image_flux2_klein_text_to_image.json — 文生图
  • image_flux2_klein_image_edit_9b_base.json — 图生图
  • image_flux2_klein_image_edit_9b_distilled.json — 蒸馏版图生图

训练监控

FluxGym UI 内置监控项:

监控项 说明
Loss 曲线 观察是否收敛、是否过拟合(先降后升)
Checkpoint 保存 每 N 步保存一次,方便回滚
生成预览 训练过程中用 LoRA 生成样本,直观判断效果
显存占用 是否 OOM、是否有泄漏

建议配置:

  • 每 500 步保存一次 checkpoint
  • 每 200 步生成预览图
  • 发现过拟合(Loss 上升或生成质量下降)立即停止

六、磁盘空间预估

项目 大小
训练模型(FP8) ~16GB
生图模型(NVFP4) ~12GB
ComfyUI + FluxGym ~2GB
Python 环境 ~3GB
训练数据 + LoRA 输出 ~5GB
总计 ~40GB

C 盘 500GB+ 剩余完全够用。


七、常见问题

Q: nvidia-smi 在 WSL2 里看不到 GPU?

A: 确保 Windows 驱动 >= 595.76,WSL2 不需要单独装驱动。

Q: PyTorch 报错 CUDA not available?

A: 必须用 cu128 版本,RTX 5070 Ti 是 Blackwell 架构。

Q: 训练时 CUDA OOM?

A: 降低 batch_size 到 1,启用 gradient checkpointing,用 FP8 模型。

Q: 生图很慢?

A: 确保用 NVFP4 量化模型,T5/Qwen 可以卸载到 CPU。


八、验证清单

  • Windows NVIDIA 驱动 >= 550.90(推荐 595.76+)
  • WSL2 nvidia-smi 能看到 5070 Ti
  • PyTorch CUDA capability = (12, 0)
  • 模型文件下载完整(检查文件大小)
  • ComfyUI 启动成功,http://localhost:8188 可访问
  • FluxGym 启动成功,http://localhost:7860 可访问
  • ComfyUI 能加载 Klein 9B 模型生图
  • FluxGym 能看到 Klein 9B 选项

九、快速启动脚本

创建 ~/start-flux.sh

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
source ~/flux-env/bin/activate

# 同时启动 ComfyUI 和 FluxGym
tmux new-session -d -s flux 'cd ~/ComfyUI && python main.py --listen'
tmux new-window -t flux -n gym 'cd ~/fluxgym && python app.py'

echo "ComfyUI: http://localhost:8188"
echo "FluxGym: http://localhost:7860"
echo "Attach: tmux attach -t flux"

使用:

1
2
chmod +x ~/start-flux.sh
./start-flux.sh

十、文档更新记录

2026-05-11 核实修正

原内容 修正后 原因 来源
NVIDIA 驱动 >= 595.76 >= 550.90(推荐 595.76+) 595.76 是热修复版,非最低要求;550.90 才是 Blackwell 基础支持 NVIDIA R550 Driver
Ubuntu 22.04 Ubuntu 24.04 RTX 50 系列在 24.04 内核支持更好,原生 CUDA 12.8 支持,10 年 LTS Ubuntu 22.04 vs 24.04 深度学习对比
PyTorch nightly cu128 稳定版 2.7.0 cu128(nightly 备选) PyTorch 2.7.0 稳定版已支持 CUDA 12.8,生产环境推荐稳定版 PyTorch 2.7.0 cu128 安装
git clone sd-scripts git clone -b sd3 sd-scripts kohya sd-scripts 主分支不支持 FLUX.2,必须用 sd3 分支 kohya-ss FLUX 训练
clip_l: null clip_l: qwen_3_8b_fp8mixed.safetensors FLUX.2 Klein 用 Qwen3 8B 替代 CLIP-L,设为 null 会导致模型加载失败 FluxGym models.yaml 格式
huggingface-cli hf huggingface_hub v1.0 后 huggingface-cli 已弃用,统一使用 hf 命令 Hugging Face v1.0 发布

验证通过项

  • RTX 5070 Ti 计算能力 = (12, 0) / sm_120(Blackwell 架构)
  • FluxGym 仓库活跃,支持 FLUX.2 系列
  • Comfy-Org/flux2-klein-9B split_files 路径正确,包含 NVFP4 量化文件
  • rgthree-comfy、ComfyUI-Easy-Use 节点持续维护
  • 训练配置(AdamW 8bit、bf16、gradient checkpointing)正确
  • ModelScope 存在 black-forest-labs/FLUX.2-klein-base-9B 模型

2026-05-11 补充训练工具对比

新增内容 说明 来源
新增工具选择对比表(5.0 节) FluxGym / DiffSynth-Studio / Kohya / AI Toolkit 四工具对比,含显存和易用性 FluxGym vs AI Toolkit 对比
新增 DiffSynth-Studio 备选方案(5.2 节) 阿里出品,12GB 显存可用,国内下载快 DiffSynth-Studio GitHub
标注 AI Toolkit 需 24GB 显存 5070 Ti 16GB 无法运行 AI Toolkit AI Toolkit 训练实测