FLUX.2 [klein] 4B 是 Black Forest Labs 发布的极速文生图扩散模型,统一了生成与编辑能力,可在单张消费级显卡(约 13GB VRAM)上实现端到端亚秒级推理。本模型为 40 亿参数的整流流 Transformer(Rectified Flow Transformer),支持:
| 属性 | 值 |
|---|---|
| 模型名称 | FLUX.2-klein-4B |
| 模型类型 | Diffusion 图像生成模型 (Rectified Flow Transformer) |
| 参数量 | ~4B |
| Pipeline | Flux2KleinPipeline |
| Transformer | Flux2Transformer2DModel (5 double + 20 single blocks) |
| Text Encoder | Qwen3ForCausalLM (36-layer, GQA, hidden_size=2560) |
| VAE | AutoencoderKLFlux2 |
| Scheduler | FlowMatchEulerDiscreteScheduler |
| 官方推荐精度 | bfloat16 |
| 官方显存需求 | ~13GB VRAM |
| 项目 | 状态 | 说明 |
|---|---|---|
| 昇腾 NPU 适配 | 已通过 diffusers + torch_npu 路径完成适配 | |
| 架构兼容性 | 零代码修改,无 CUDA 硬编码算子 | |
| 端到端推理 | 256x256 / 1024x1024 图像成功生成 | |
| NPU 融合 Attention | DIFFUSERS_NPU_ATTENTION_BACKEND=native_npu 自动启用 | |
| bfloat16 推理 | 昇腾 910B 原生支持 bf16 | |
| CPU Offload | enable_model_cpu_offload() 工作正常 | |
| vLLM-Ascend | N/A | 扩散模型不适用 vLLM 服务化路径 |
| 功能 | 状态 | 说明 |
|---|---|---|
| 文生图 (text-to-image) | 已验证 | |
| 图生图 (image-to-image) | Pipeline 支持,架构兼容 | |
| KV Cache (reference tokens) | 架构支持 | |
| LoRA / PEFT | Flux2LoraLoaderMixin 已继承,理论支持 | |
| 多分辨率生成 | 256x256 / 512x512 / 1024x1024 | |
| bfloat16 推理 | 已验证 | |
| float16 推理 | 可作为降级方案 | |
| VAE Tiling | diffusers 原生支持 | |
| VAE Slicing | diffusers 原生支持 | |
| CPU Offload | 已验证(单卡必需) | |
| torch.compile | 昇腾图模式待进一步验证 |
| 项目 | 要求 |
|---|---|
| NPU 设备 | Ascend 910B / 910C 系列 |
| 单卡显存 | >= 32GB(推荐 64GB) |
| 卡数 | 1~2 张 |
| 依赖 | 版本 | 说明 |
|---|---|---|
| Python | 3.11+ | 已验证 3.11.14 |
| CANN | 8.5.1 | 昇腾驱动与计算框架 |
| torch | 2.9.0+cpu | PyTorch CPU 版本 |
| torch_npu | 2.9.0.post1 | 昇腾 PyTorch 插件 |
| diffusers | >=0.38.0 | 需支持 Flux2KleinPipeline |
| transformers | >=4.57.0 | 需支持 Qwen3ForCausalLM |
| accelerate | >=0.26.0 | 用于 CPU offloading |
pip install -r requirements.txtpython -c "import torch; import torch_npu; print('NPU:', torch.npu.is_available(), torch.npu.get_device_name(0))"import torch
from diffusers import Flux2KleinPipeline
MODEL_PATH = "/opt/atomgit/models"
DEVICE = "npu"
DTYPE = torch.bfloat16
# 加载模型
pipe = Flux2KleinPipeline.from_pretrained(MODEL_PATH, torch_dtype=DTYPE)
# 启用 CPU offload 管理 NPU 内存(单卡必需)
pipe.enable_model_cpu_offload(device=DEVICE)
# 推理
image = pipe(
prompt="A futuristic cityscape at sunset, highly detailed, 8k",
num_inference_steps=4,
guidance_scale=4.0,
height=1024,
width=1024,
generator=torch.Generator(device=DEVICE).manual_seed(42),
).images[0]
image.save("flux2_output.png")import torch
from diffusers import Flux2KleinPipeline
import npu_compat
# 自动配置 NPU 环境
npu_compat.setup_npu_env()
npu_compat.verify_npu()
pipe = Flux2KleinPipeline.from_pretrained("/opt/atomgit/models", torch_dtype=torch.bfloat16)
pipe = npu_compat.configure_pipeline_for_npu(pipe, device="npu", offload=True)
image = pipe(
prompt="A cat holding a sign that says hello world",
num_inference_steps=4,
height=256,
width=256,
).images[0]
image.save("output.png")cd /opt/atomgit/models
python run_flux_klein_npu.py \
--prompt "A serene mountain lake at dawn, cinematic lighting" \
--height 1024 --width 1024 \
--steps 4 \
--cpu-offload \
--output result.pngcd /opt/atomgit/models
python ascend_adapt_test.py| 项目 | 配置 |
|---|---|
| NPU 设备 | Ascend910_9362 |
| NPU 卡数 | 2 |
| 单卡总容量 | 61.27 GiB |
| torch_npu 版本 | 2.9.0.post1 |
| diffusers 版本 | 0.38.0 |
| CANN 版本 | 8.5.1 |
| 分辨率 | Steps | 精度 | Offload | 推理耗时 | 单步耗时 | 状态 |
|---|---|---|---|---|---|---|
| 256 x 256 | 4 | bfloat16 | Model CPU Offload | ~15.75s | ~1.49s/step | |
| 512 x 512 | 4 | bfloat16 | Model CPU Offload | 待测试 | 待测试 | 理论可用 |
| 1024 x 1024 | 4 | bfloat16 | Model CPU Offload | 待测试 | 待测试 | 理论可用 |
| 1024 x 1024 | 20 | bfloat16 | Model CPU Offload | 待测试 | 待测试 | 理论可用 |
注:1024x1024 及更高分辨率建议使用
enable_model_cpu_offload()或enable_sequential_cpu_offload()以避免 OOM。
| 指标 | 数值 |
|---|---|
| 权重加载时间 | ~0.51s |
| Transformer 权重 | ~7.2 GB |
| Text Encoder 权重 | ~7.6 GB |
| VAE 权重 | ~160 MB |
| 单卡总容量 | 61.27 GiB |
本模型为零代码修改适配:
_native_npu attention backend,自动调用 torch_npu.npu_fusion_attentionFlux2PosEmbed 中已显式处理 is_npu,使用 float32 频率计算 RoPE| 验证阶段 | 方法 | 状态 |
|---|---|---|
| Stage A: 模型加载 | 所有组件加载到 npu:0,无报错 | |
| Stage B: 端到端推理 | 生成图像与 GPU bf16 结果视觉一致 | |
| 算子兼容性 | 扫描无 CUDA 硬编码算子 | |
| Attention 后端 | native_npu 自动启用并工作 |
建议:如需严格数值对齐,建议将 NPU 生成的 1024x1024 图像与 GPU(bf16)输出进行 SSIM / LPIPS 量化对比。当前验证以视觉一致性为准。
import torch
from diffusers import Flux2KleinPipeline
pipe = Flux2KleinPipeline.from_pretrained("/opt/atomgit/models", torch_dtype=torch.bfloat16)
pipe.enable_model_cpu_offload(device="npu")
image = pipe(
prompt="Astronaut riding a horse, digital art",
num_inference_steps=4,
guidance_scale=4.0,
height=1024,
width=1024,
).images[0]
image.save("astronaut.png")pipe.enable_sequential_cpu_offload(device="npu") # 极致省显存,速度稍慢
pipe.vae.enable_tiling() # 大分辨率 VAE 分块pipe.text_encoder = pipe.text_encoder.to("npu:0")
pipe.transformer = pipe.transformer.to("npu:1")
pipe.vae = pipe.vae.to("npu:0")python run_flux_klein_npu.py \
--model-path /opt/atomgit/models \
--prompt "Cyberpunk street scene, neon lights, rain" \
--height 1024 --width 1024 \
--steps 4 --guidance-scale 4.0 \
--seed 42 --cpu-offload --vae-tiling \
--output cyberpunk.png| 策略 | 适用场景 | 用法 | 速度 | 显存占用 |
|---|---|---|---|---|
| Model CPU Offload | 单卡 32GB~64GB(推荐) | pipe.enable_model_cpu_offload() | 中等 | 低 |
| Sequential CPU Offload | 极低显存环境 | pipe.enable_sequential_cpu_offload() | 较慢 | 最低 |
| 直接加载 NPU | 多卡或超大显存 | pipe = pipe.to("npu") | 最快 | 高(易 OOM) |
| VAE Tiling | 1024x1024+ 分辨率 | pipe.vae.enable_tiling() | 轻微开销 | 更低 |
NPU OOM(单卡)
enable_model_cpu_offload(),同时加载 transformer + text_encoder + vae 可能导致单卡 OOM(text encoder 为 Qwen3-2.5B 级别)。pipe.enable_model_cpu_offload(device="npu")。日志目录警告
/home/atomgit/ascend/log 无法创建。mkdir -p /home/atomgit/ascend/log 消除。Guidance Scale 忽略
guidance_scale 后似乎未生效。guidance_scale 参数会被忽略,这是预期行为。diffusers 版本要求
KeyError: 'Flux2KleinPipeline'。pip install diffusers>=0.38.0。Qwen3 Text Encoder 支持
pip install transformers>=4.57.0。FLUX.2-klein-4B/
├── model_index.json # Pipeline 配置
├── transformer/
│ ├── config.json
│ └── diffusion_pytorch_model.safetensors
├── text_encoder/
│ ├── config.json
│ ├── model.safetensors.index.json
│ ├── model-00001-of-00002.safetensors
│ └── model-00002-of-00002.safetensors
├── vae/
│ ├── config.json
│ └── diffusion_pytorch_model.safetensors
├── tokenizer/ # Qwen2TokenizerFast
├── scheduler/ # FlowMatchEulerDiscreteScheduler
├── npu_compat.py # 昇腾 NPU 兼容性配置模块
├── run_flux_klein_npu.py # 命令行推理脚本
├── ascend_adapt_test.py # 自动化验证脚本
├── requirements.txt # Python 依赖
├── .gitignore
├── LICENSE.md # Apache 2.0
└── README.md # 本文件本模型原始权重与代码遵循 Apache 2.0 许可证开放。
昇腾 NPU 适配代码(npu_compat.py、run_flux_klein_npu.py、ascend_adapt_test.py)同样以 Apache 2.0 许可证发布。
适配报告生成时间: 2026-05-16
适配工具: adapt-agent + torch_npu
验证设备: Ascend910_9362 (2x NPU, 61.27 GiB)