m0_74196153/openjourney
模型介绍文件和版本Pull Requests讨论分析

prompthero/openjourney on Ascend NPU (diffusers + torch_npu)

1. 简介

本文档记录 prompthero/openjourney 在昇腾 NPU 环境的部署与验证结果。

openjourney 是 Stable Diffusion v1.5 的微调版本,使用 Midjourney 图像微调,能够生成类似 Midjourney 风格的图像。

相关获取地址:

  • 权重下载地址(HuggingFace):https://huggingface.co/prompthero/openjourney
  • 权重下载地址(HF Mirror):https://hf-mirror.com/prompthero/openjourney

2. 验证环境

组件版本
torch2.9.0
torch-npu2.9.0.post1+gitee7ba04
diffusers0.38.0
transformers4.57.6
  • NPU:Ascend 910B4 x 1
  • 显存:32 GB HBM
  • 模型路径:./models/openjourney
  • 输出分辨率:512 x 512

3. 服务启动

3.1 环境准备

# 安装依赖
pip install diffusers transformers torch_npu

# 下载模型权重(从 HF Mirror)
HF_ENDPOINT=https://hf-mirror.com python3 -c "
from huggingface_hub import snapshot_download
snapshot_download('prompthero/openjourney', local_dir='./models/openjourney')
"

3.2 推理脚本

# 单提示词生成
python inference.py \
    --model ./models/openjourney \
    --prompt "mdjrnm-syle portrait photo of a girl, highly detailed" \
    --steps 25 \
    --seed 42 \
    --output ./output

# 多提示词批量生成
python inference.py \
    --model ./models/openjourney \
    --prompt "mdjrnm-syle landscape" "mdjrnm-syle cat" \
    --steps 30 \
    --seed 123

4. Smoke 验证

基础推理验证:

from diffusers import StableDiffusionPipeline

pipe = StableDiffusionPipeline.from_pretrained(
    "./models/openjourney",
    torch_dtype=torch.float16,
    safety_checker=None,
).to("npu")

image = pipe(
    "mdjrnm-syle portrait photo of a girl",
    num_inference_steps=25,
).images[0]

image.save("smoke_test.png")

验证结果:

  • 模型加载成功 ✅
  • 推理生成 512x512 RGB 图像 ✅
  • 图像内容与提示词语义一致 ✅

5. 性能参考

测试条件:

  • Ascend 910B4 x 1
  • float16 精度
  • attention_slicing 启用
  • 输出分辨率:512 x 512
StepsCold StartWarm Avg (3 runs)Steps/s
1071.86s2.55s3.92
204.65s4.77s4.20
3017.90s6.89s4.36

显存占用:

指标数值
峰值显存 (HBM)6.88 GB
可用显存22.61 GB / 29.49 GB

说明:Cold Start 主要开销来自 NPU 第一次推理时的 JIT 编译(~50s),后续 warm run 无需重新编译。

6. 精度评测

指标数值
对比基准CPU float32 单步 UNet 前向
评测方法同输入、同权重、单步 UNet 输出比较
相对误差0.029%
阈值< 1%
结论✅ 通过

NPU 确定性测试:同 seed + 同输入 → 像素级完全一致(max diff = 0)。

说明:扩散模型多步迭代中 float16 与 float32 的数值误差会累积(全图对比约 25%),这是正常现象。单步 UNet 前向对比才是正确的精度度量。

7. 注意事项

  1. 首次推理较慢:首次推理包含 NPU JIT 编译过程(约 50s),后续推理无需重新编译
  2. float16 精度:NPU 使用 float16 推理,与 float32 存在固有数值差异,不影响生成质量
  3. Safety Checker:脚本默认禁用了 safety_checker,如需启用请自行设置
  4. 分辨率为 512x512:基于 SD v1.5 架构,推荐使用 512x512 分辨率

8. 文件说明

文件说明
inference.pyNPU 推理脚本
benchmark.py性能基准测试脚本
readme.md本文档——部署指南与验证报告
verify_accuracy.py精度验证脚本
下载使用量0