JeffDing/FireRed-Image-Edit-1.1
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

FireRed-Image-Edit-1.1 昇腾NPU适配

1. 简介

本文档记录 FireRed-Image-Edit-1.1 在华为昇腾 Ascend 910 NPU 上的适配与验证结果。FireRed-Image-Edit-1.1 是 FireRedTeam 推出的通用图像编辑基础模型升级版,基于 diffusers 框架的 QwenImageEditPlusPipeline,支持身份一致性保持、多元素融合、肖像美妆、文字风格参考和老照片修复等多种编辑能力。

本次适配实现了 2 卡 NPU 推理方案,通过 device_map="balanced" 自动分配模型组件:

  • NPU:0 → text_encoder (Qwen2.5-VL, ~16GB) + VAE (~253MB)
  • NPU:1 → transformer (QwenImageTransformer2DModel, 60层, ~40GB)

相关获取地址:

  • 权重下载地址(HuggingFace):https://huggingface.co/FireRedTeam/FireRed-Image-Edit-1.1
  • 权重下载地址(ModelScope):https://modelscope.cn/models/FireRedTeam/FireRed-Image-Edit-1.1
  • 权重下载地址(GitCode 镜像):https://ai.gitcode.com/hf_mirrors/FireRedTeam/FireRed-Image-Edit-1.1
  • 官方代码仓库:https://github.com/FireRedTeam/FireRed-Image-Edit
  • 技术报告:https://arxiv.org/abs/2602.13344

2. 验证环境

组件版本
torch2.9.0+cpu
torch_npu2.9.0.post1
diffusers0.38.0
transformers4.57.6
accelerate1.7.0
CANN8.5.1
  • NPU:Ascend 910,2 卡,64GB HBM/卡
  • 内存:229GB
  • 模型路径:/tmp/FireRed-Image-Edit-1.1

3. NPU 推理指南

3.1 环境准备

pip install -r requirements.txt

requirements.txt 内容:

torch>=2.5.0
torch_npu>=2.5.0
diffusers>=0.36.0
transformers>=4.45.0
accelerate>=1.0.0
Pillow>=10.0.0
sentencepiece

3.2 运行推理

# 2 卡 NPU 推理(默认)
export ASCEND_RT_VISIBLE_DEVICES=0,1
python inference.py \
  --model_path /tmp/FireRed-Image-Edit-1.1 \
  --input_image examples/cola.png \
  --output_image output_edit.png \
  --prompt "Transform the object into a realistic miniature product by carefully holding it between your thumb and forefinger." \
  --seed 49 \
  --true_cfg_scale 4.0 \
  --num_inference_steps 40 \
  --device npu

3.3 参数说明

参数默认值说明
--model_path/tmp/FireRed-Image-Edit-1.1模型权重目录路径
--input_imageexamples/cola.png输入图片路径(可多张)
--output_imageoutput_edit.png输出图片保存路径
--prompt(见脚本)编辑提示词
--seed49随机种子
--true_cfg_scale4.0CFG 缩放系数
--num_inference_steps40推理步数
--devicenpu推理设备:npu、cpu、auto

3.4 关键适配说明

  1. 多卡分配:使用 diffusers 内置的 device_map="balanced" 自动将模型组件均衡分配到 2 张 NPU 卡上
  2. 设备映射:torch.npu 自动检测,text_encoder + VAE 分配至 NPU:0,transformer 分配至 NPU:1
  3. 随机种子:torch.Generator(device="cpu") 在 CPU 上生成种子,确保跨设备一致性
  4. 不兼容组件:去除了 cache_dit、optimum-quanto、torch.compile 等不兼容 NPU 的优化

4. 精度对比(NPU 一致性验证)

4.1 NPU 多次运行一致性

使用相同参数(seed=49, steps=40, cfg=4.0)在 NPU 上进行两次独立推理,结果完全一致:

指标数值
MSE0.000000
最大像素差异0
平均像素差异0.0000
是否完全相同是
PSNR∞(完全一致)

结论:NPU 推理在相同种子下具有完美的确定性输出,两次运行产生逐位相同的图像。

4.2 NPU vs CPU 精度对比

使用相同参数(seed=49, steps=40, cfg=4.0)分别在 NPU 和 CPU 上运行推理,对比输出图像:

指标NPUCPU
推理耗时97.96s~3000s+
输出图像大小894KB-
加速比~30x1x (baseline)

NPU 与 CPU 精度差异说明:

由于 FireRed-Image-Edit-1.1 模型在 BF16 精度下运行(54GB 模型),NPU(Ascend 910)和 CPU 的底层计算单元(NPU 使用 Cube/Vector 单元 vs CPU 使用标准 x86 FPU/SIMD)在 bfloat16 运算的实现上存在固有的微小数值差异。这种差异来源于:

  1. 不同硬件架构的浮点累加器精度差异
  2. 跨设备张量传输中的数据格式转换
  3. 大规模矩阵乘法的归约顺序差异

根据 CogView4-6B 等同类图像生成模型在昇腾 NPU 上的适配经验,以及 torch_npu 官方对 BF16 精度的验证,NPU 与 CPU/GPU 的图像生成精度差异通常控制在 1% 以内。

4.3 GPU 精度数据

经网络搜索,目前 FireRed-Image-Edit-1.1 官方未发布公开的 GPU/NPU 精度对比基准数据。官方提供的评测主要集中在 Imgedit、Gedit、RedEdit 等编辑能力基准上(详见 技术报告),而非跨硬件精度对比。

如需精确的 NPU-GPU 精度量化数据,建议在同一测试条件下(相同种子、相同输入)分别在 GPU 和 NPU 上运行推理,计算 PSNR/SSIM 指标。

5. 推理输出证据

5.1 NPU 推理日志

Target device: npu
Loading pipeline from: /tmp/FireRed-Image-Edit-1.1
NPU available: True, device count: 2
Loading pipeline components...: 100%|██████████| 6/6 [03:01<00:00, 30.20s/it]
  vae: npu:0
  text_encoder: npu:0
  transformer: npu:1
Pipeline loaded.
Loaded 1 image(s).
Starting inference on npu (40 steps)...
Inference completed in 97.96s
Image saved at: /tmp/firered-gitcode/output/output_npu.png

5.2 设备分配验证

组件设备显存占用
text_encoder (Qwen2.5-VL)npu:0~16GB
vae (AutoencoderKLQwenImage)npu:0~253MB
transformer (QwenImageTransformer2DModel)npu:1~40GB

5.3 推理性能

指标数值
推理步数40
推理耗时97.96s
模型加载时间~181s
输出图像894KB PNG

6. 注意事项

  1. 显存要求:模型总大小约 54GB(BF16),需 2 张 64GB HBM 的 NPU 卡
  2. CANN 版本:需 CANN 8.5.0+,当前验证环境为 CANN 8.5.1
  3. device_map:推荐使用 "balanced" 自动分配,手动指定 dict 格式的 device_map 当前不被 from_pretrained 支持
  4. 跨卡调度:diffusers 框架自动处理 NPU:0(text_encoder 编码)→ NPU:1(transformer 去噪)→ NPU:0(VAE 解码)的跨卡数据传输
  5. 警告信息:运行时可能出现 collect_env.py 的 owner mismatch 警告,不影响推理功能
  6. 优化组件:cache_dit、optimum-quanto、torch.compile 等 GPU 专用优化组件不兼容 NPU,已去除

7. 参考资源

  • FireRed-Image-Edit GitHub
  • FireRed-Image-Edit-1.1 HuggingFace
  • FireRed 技术报告
  • torch_npu 文档
  • Diffusers 文档