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

LongCat-Image-Edit-Turbo NPU 适配报告

模型信息

项目值
模型LongCat-Image-Edit-Turbo
来源meituan-longcat/LongCat-Image-Edit-Turbo(ModelScope)
任务图像到图像编辑
流水线LongCatImageEditPipeline(diffusers)
基础模型基于 Diffusers 的蒸馏编辑模型
网络前向传播次数8(针对低延迟优化)

环境

组件版本
硬件Ascend910_9362
NPU 数量2
CANN8.5.1
Python3.11.14
torch2.9.0+cpu
torch_npu2.9.0.post1
diffusers从源码安装(git+https://github.com/huggingface/diffusers)
transformers>= 4.45.0

文件

文件描述
inference.py带命令行参数的 NPU 推理脚本
evaluate_perf.py性能基准测试脚本
evaluate_accuracy.py精度验证脚本
output_npu.pngNPU 推理的示例输出
perf_results.txt性能基准测试结果
accuracy_outputs/精度评估输出和指标

使用方法

基本 NPU 推理

python inference.py \
  --model_path /path/to/model \
  --image_path /path/to/image.png \
  --prompt "将猫变成狗" \
  --output_path output.png \
  --dtype bfloat16 \
  --device npu

性能基准测试

python evaluate_perf.py \
  --dtype bfloat16 \
  --warmup_iters 3 \
  --bench_iters 10

准确性验证

python evaluate_accuracy.py

性能结果

配置: NPU bfloat16,8 推理步数,seed=43

指标数值
模型加载时间~14.1秒
平均延迟6.232秒
最小延迟6.229秒
最大延迟6.235秒
P50 延迟6.233秒
P90 延迟6.235秒
标准差0.002秒
吞吐量0.16 张/秒

注:吞吐量通过单图生成(num_images_per_prompt=1)测量。

精度结果

测试 1:确定性(bfloat16,相同种子)

指标数值
MSE(均方误差)0.000000
MAE(平均绝对误差)0.000000
PSNR(峰值信噪比)inf dB
相对误差0.0000%
状态通过

解读: 使用相同种子的两次连续 NPU bfloat16 运行产生像素级完全相同的输出。NPU 推理具有完全的确定性和可重复性。

测试 2:跨精度(float16 与 bfloat16)

指标数值
MSE(均方误差)14550.84
MAE(平均绝对误差)102.35
PSNR(峰值信噪比)6.50 dB
相对误差40.14%
状态失败

解读: float16 推理会产生无效/损坏的输出(图像后处理期间出现 invalid value encountered in cast 警告)。这表明在此模型架构中(可能由于 Qwen2.5-VL 语言模型组件),float16 存在数值不稳定性。bfloat16 是 NPU 部署的推荐数据类型。

基准说明

由于内存需求过高(估计 >64 GB RAM)且运行时间不切实际,CPU float32 基准未予执行。NPU 自一致性(确定性)和跨精度检查是此硬件配置下切实可行的精度验证方法。

主要发现

  1. NPU bfloat16 推理功能完备且具有确定性。 模型在 Ascend910_9362 上成功运行,输出结果一致且可重现。
  2. 不推荐使用 float16。 模型在 float16 下表现出数值不稳定性,会生成损坏的图像。所有生产部署应使用 bfloat16。
  3. 延迟稳定。 P90 延迟与平均值相差在 0.05% 以内,表明性能稳定,无显著的尾部延迟。
  4. 8 步 Turbo 模式按预期工作。 蒸馏后的流水线在单个 NPU 上每张图像的推理时间约为 6.2 秒。

建议

  • 在昇腾NPU上运行此模型时,请始终使用torch.bfloat16。
  • 为确保结果可复现,请设置generator=torch.Generator(device="npu").manual_seed(seed)。
  • 对于文本渲染任务,请按照官方模型文档的要求,将目标文本用引号括起来。
  • 如果在NPU内存有限的设备上运行,可考虑启用模型CPU卸载功能(pipe.enable_model_cpu_offload())。