LongCat-Image-Edit-Turbo NPU 适配报告
模型信息
| 项目 | 值 |
|---|
| 模型 | LongCat-Image-Edit-Turbo |
| 来源 | meituan-longcat/LongCat-Image-Edit-Turbo(ModelScope) |
| 任务 | 图像到图像编辑 |
| 流水线 | LongCatImageEditPipeline(diffusers) |
| 基础模型 | 基于 Diffusers 的蒸馏编辑模型 |
| 网络前向传播次数 | 8(针对低延迟优化) |
环境
文件
| 文件 | 描述 |
|---|
inference.py | 带命令行参数的 NPU 推理脚本 |
evaluate_perf.py | 性能基准测试脚本 |
evaluate_accuracy.py | 精度验证脚本 |
output_npu.png | NPU 推理的示例输出 |
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 自一致性(确定性)和跨精度检查是此硬件配置下切实可行的精度验证方法。
主要发现
- NPU bfloat16 推理功能完备且具有确定性。 模型在 Ascend910_9362 上成功运行,输出结果一致且可重现。
- 不推荐使用 float16。 模型在 float16 下表现出数值不稳定性,会生成损坏的图像。所有生产部署应使用 bfloat16。
- 延迟稳定。 P90 延迟与平均值相差在 0.05% 以内,表明性能稳定,无显著的尾部延迟。
- 8 步 Turbo 模式按预期工作。 蒸馏后的流水线在单个 NPU 上每张图像的推理时间约为 6.2 秒。
建议
- 在昇腾NPU上运行此模型时,请始终使用
torch.bfloat16。
- 为确保结果可复现,请设置
generator=torch.Generator(device="npu").manual_seed(seed)。
- 对于文本渲染任务,请按照官方模型文档的要求,将目标文本用引号括起来。
- 如果在NPU内存有限的设备上运行,可考虑启用模型CPU卸载功能(
pipe.enable_model_cpu_offload())。