本仓库提供 FLUX.2-klein-4B Object Remove LoRA 模型在华为昇腾 Ascend910 NPU 上的适配与推理方案。该 LoRA 用于从图像中移除高亮对象并自然填充移除区域。
| 组件 | 版本 |
|---|---|
| Python | 3.11+ |
| PyTorch | >= 2.0.0 |
| torch_npu | >= 2.9.0 |
| Diffusers | >= 0.38.0 |
| Ascend NPU | Ascend910 |
与背景移除模型类似,使用 Flux2KleinPipeline + LoRA 加载方式。由于 ModelScope 上的原始 diffusers 格式 LoRA 文件不完整,本仓库使用从 ComfyUI 格式转换的 LoRA 文件,进行 diffusion_model. 到 base_model.model. 的前缀映射。
python3 inference.py --device npu:0 --steps 20 --seed 42 --height 512 --width 512
python3 compare_cpu_npu.py --steps 4 --seed 42 --height 128 --width 128| 指标 | 值 |
|---|---|
| 推理耗时 | 3.92 秒 |
| 设备 | Ascend910 |
| 指标 | CPU | NPU | 加速比 |
|---|---|---|---|
| 推理耗时 | 495.56 秒 | 0.78 秒 | 638x |
测试条件:128x128 输入,4步推理,seed=42,相同初始潜变量
| 指标 | 值 |
|---|---|
| MAE(0-255) | 0.0959 |
| 最大绝对误差 | 2.0000 |
| 相对误差 | 0.5997% |
| RMSE | 0.3116 |
| PSNR | 58.26 dB |
| SSIM | 0.998564 |
| 像素一致率(<1%) | 90.46% |
结论:NPU 与 CPU 推理结果误差为 0.5997%,小于 1%。
import torch, torch_npu
from diffusers import Flux2KleinPipeline
from PIL import Image
pipe = Flux2KleinPipeline.from_pretrained(
"black-forest-labs/FLUX.2-klein-4B", torch_dtype=torch.bfloat16
)
pipe.load_lora_weights("flux-object-remove-lora-diffusers.safetensors")
pipe = pipe.to("npu:0")
input_img = Image.open("input.jpg").convert("RGB").resize((512, 512))
generator = torch.Generator(device="cpu").manual_seed(42)
with torch.no_grad():
output = pipe(
image=input_img,
prompt="Remove the highlighted object from the scene",
height=512, width=512,
num_inference_steps=20,
guidance_scale=3.5,
generator=generator,
)
output.images[0].save("output.png")