本文档记录 FLUX.2-klein-base-4B 在华为昇腾 NPU(Ascend 910B)环境的快速部署与验证结果。
FLUX.2-klein-base-4B 是 Black Forest Labs 推出的 FLUX.2 系列轻量级文生图模型,采用 4B 参数 transformer 骨干网络,兼顾生成质量与推理效率。本验证基于 diffusers 框架在昇腾 NPU 上完成端到端推理适配,涵盖模型加载、文本编码、VAE 解码及图像生成全流程。
模型特点:
Qwen3ForCausalLM)相关获取地址:
参考文档:
| 组件 | 版本 |
|---|---|
diffusers | 0.38.0 |
transformers | 4.57.6 |
torch | 2.5.1 |
torch-npu | 2.9.0.post1+gitee7ba04 |
CANN | 8.5.1 |
1 逻辑卡(Ascend 910B4,32GB HBM)/opt/atomgit/modelspip install diffusers transformers accelerate safetensors
export ASCEND_RT_VISIBLE_DEVICES=0已验证通过的加载与推理方式:
import torch
import torch_npu
from diffusers import DiffusionPipeline
# 指定 NPU 设备
device = torch.device("npu:0")
# 加载 pipeline(Diffusers 格式)
pipe = DiffusionPipeline.from_pretrained(
"/opt/atomgit/models",
torch_dtype=torch.bfloat16,
trust_remote_code=False,
)
# 迁移至 NPU
pipe = pipe.to(device)
# 执行文生图推理
image = pipe(
prompt="A cute cat sitting on a sofa, high quality, photorealistic",
num_inference_steps=20,
guidance_scale=3.5,
height=512,
width=512,
max_sequence_length=512,
).images[0]
image.save("flux_output_npu.png")| 参数 | 说明 | 建议值 |
|---|---|---|
torch_dtype | 模型权重精度 | bfloat16 |
num_inference_steps | 去噪步数 | 20(质量与速度平衡) |
guidance_scale | 分类器自由引导强度 | 3.5 |
height / width | 输出图像分辨率 | 512 / 512 或 1024 / 1024 |
max_sequence_length | 文本编码最大长度 | 512 |
from diffusers import DiffusionPipeline
import torch
pipe = DiffusionPipeline.from_pretrained(
"/opt/atomgit/models",
torch_dtype=torch.bfloat16,
)
print(type(pipe).__name__) # 预期输出:Flux2KleinPipeline验证结果:
Flux2KleinPipeline1.5s使用上述推理脚本运行,验证结果:
PIL.Image.Image测试条件:单卡 Ascend 910B4,bfloat16 精度,512x512 分辨率。
| 指标 | 数值 | 说明 |
|---|---|---|
| 模型加载时间 | 1.0 s | 从磁盘加载权重 |
| 首次端到端(含 CPU→NPU 迁移) | 23.5 s | 20 steps,含设备迁移开销 |
| 纯推理时间(pipeline 已在 NPU) | 4.35 s | 20 steps,稳定运行 |
| 1024x1024 生成 | 14.6 s | 20 steps |
| 峰值 HBM 占用 | 14.9 GB | bfloat16 全精度加载 |
| 输出分辨率 | 512 x 512 | 支持 256~1024 |
注:当前为未启用任何图优化或算子融合的基线性能。首次运行因需将权重从 CPU 迁往 NPU,耗时较长;后续同进程连续推理约 4.35s/张。后续可通过
torch.compile(NPU 支持)或torch_npu亲和算子替换进一步提升吞吐。
本仓库提供完整的自验证脚本,可一键复现所有适配验证项。
# 进入仓库目录
cd flux-2-klein-base-4b
# 直接运行(输出到终端)
python3 flux_npu_validate.py
# 重定向保存完整日志
python3 flux_npu_validate.py > flux_validation_log.txt 2>&1验证完成后会生成:
flux_validation_log.txt — 完整终端输出日志flux_validation_report.json — 结构化 JSON 报告| 验证项 | 状态 | 关键指标 |
|---|---|---|
| Stage A — 架构加载 | PASS | 1.12s |
| Stage B — 真实权重推理 | PASS | 加载 1.04s,推理 23.54s |
| 算子兼容性扫描 | PASS | 356 模块,0 CUDA/Triton 硬编码 |
| 512x512 @ 20 steps | PASS | 4.34s |
| 1024x1024 @ 20 steps | PASS | 14.58s |
| 10 / 50 steps | PASS | 2.29s / 10.45s |
| guidance_scale 1.0 / 7.0 | PASS | 2.20s / 4.32s |
| 长 prompt / 中文 prompt | PASS | 均正常 |
| 稳定性测试(3 次连续) | PASS | 平均 4.35s,标准差 0.0 |
| 功能 | 状态 | 说明 |
|---|---|---|
| 文本编码(Qwen3ForCausalLM) | 支持 | 使用 transformers 原生实现,NPU 兼容 |
| Transformer 去噪(Flux2Transformer2DModel) | 支持 | diffusers 原生实现,无 CUDA 硬编码算子 |
| VAE 解码(AutoencoderKLFlux2) | 支持 | NPU 上运行正常 |
| 512x512 生成 | 验证通过 | 已实际生成并保存图像 |
| 1024x1024 生成 | 验证通过 | 已实际生成并保存图像 |
| 多轮连续生成 | 验证通过 | 3 次连续运行,耗时稳定 4.35s |
| 中文 prompt | 验证通过 | 文本编码器支持中文输入 |
| 长 prompt(512 tokens) | 验证通过 | 已验证超长文本编码 |
经扫描 Flux2Transformer2DModel 及 Flux2KleinPipeline 源码,模型核心算子均为 PyTorch 原生算子(nn.Linear、nn.LayerNorm、F.scaled_dot_product_attention 等),无 CUDA/Triton 硬编码内核。在昇腾 NPU 上通过 torch_npu 自动映射,无需额外算子适配。
flux-2-klein-base-4b/
├── README.md # 本适配文档
├── flux_npu_inference.py # NPU 推理示例脚本
├── flux_npu_validate.py # 自验证脚本(adapt-agent 10 步验证流程)
├── flux_validation_log.txt # 完整验证日志(shell 重定向生成)
└── flux_validation_report.json # 结构化验证报告Pipeline 参数顺序:Flux2KleinPipeline.__call__ 的第一个位置参数为 image,文本 prompt 需显式使用关键字参数 prompt= 传入,否则会被解析为 image 导致 ValueError。
内存优化:若需降低显存占用,可考虑:
pipe.enable_model_cpu_offload()(需确认 NPU 兼容性)num_inference_steps 至 10-15 步文本编码器依赖:本模型使用 Qwen3ForCausalLM 作为文本编码器,需确保 transformers >= 4.57.0,否则可能无法识别该模型类。
自定义 Pipeline 类:Flux2KleinPipeline 与 Flux2Transformer2DModel 属于 diffusers 0.38.0 引入的 FLUX 2 系列新类,旧版本 diffusers 无法直接加载,请务必升级。
性能优化方向:
torch.compile(NPU 后端)加速 transformer 前向torch_npu 提供的融合算子替换 nn.MultiheadAttentionACL Graph 捕获(若后续接入 vLLM-Ascend 图像生成服务化框架)