L
Lumiire/dreamshaper-7
模型介绍
文件和版本
Pull Requests
讨论
分析

Lykon/dreamshaper-7 — 昇腾 NPU 部署指南

1. 简介

DreamShaper-7 是 Lykon 在 Stable Diffusion 1.5 基线上精调的开源文生图模型,主打高细节与风格化表现,在艺术插画、概念设计等场景表现突出。本仓库以 Hugging Face 的 Lykon/dreamshaper-7(diffusers StableDiffusionPipeline 格式)为对象,完成了从权重获取、昇腾算子兼容性评估、NPU 推理路径验证到 HTTP 服务化封装的全流程适配。

模型整体由四部分构成:UNet2DConditionModel(去噪主干)、AutoencoderKL(VAE 潜空间编解码)、CLIPTextModel(文本编码)、CLIPTokenizer(分词),调度器为 DEISMultistepScheduler。以下关键规格全部来自对本地权重文件的实测读取。

模型关键规格

项目值
模型 IDLykon/dreamshaper-7
架构StableDiffusionPipeline(SD 1.5)
许可证CreativeML OpenRAIL-M
UNet 参数量859.52M(686 个张量)
VAE 参数量83.65M(248 个张量)
TextEncoder 参数量123.06M(196 个张量)
UNet 通道结构block=[320,640,1280,1280],cross_attn_dim=768,head_dim=8,layers/block=2
VAE scaling_factor0.18215
调度器DEISMultistepScheduler(1000 步训练,epsilon 预测)
权重精度fp16(unet 1.72GB / vae 167MB / text_encoder 246MB)

2. 验证环境

2.1 硬件环境

项目配置
NPU 型号Ascend 910(Ascend910_9362,aarch64)
NPU 数量2 片(本次使用 npu:0)
单卡 HBM64GB
推理进程 HBM 占用3444MB
推理时 AICore 利用率98% ~ 100%

说明:机器上同时运行着其他任务的模型服务,NPU 为共享资源。本次适配的推理进程在 npu:0 上独立占显 3.4GB,与其他进程互不干扰。

2.2 软件环境

项目版本
操作系统Ubuntu 22.04.5(内核 5.10.0,aarch64)
Python3.11.14
PyTorch2.9.0
torch_npu2.9.0.post1
CANN8.5.1
diffusers0.31.0
transformers4.57.6
vllm-ascend0.18.0(已安装,本模型不经过其 LLM 链路)
FastAPI / Uvicorn0.123.10 / 0.46.0

2.3 权重来源与完整性

项目说明
首选源GitCode 镜像(hf_mirrors/Lykon/dreamshaper-7)
结果hub.gitcode.com 连接超时,git 协议被服务端重定向至首页
次选源ModelScope(Lykon/dreamshaper-7)
结果record not found,模型未收录
实际采用Hugging Face(hf-mirror.com 镜像)
完整性22 个文件全部下载,fp16 权重逐张量读取校验通过

3. 服务启动

仓库内 inference.py 自包含加载、前向、服务化逻辑,支持 CLI 单次生成与 FastAPI 服务两种模式。默认端口 8360(避开环境中 8000/8001 等其他服务占用)。

3.1 安装依赖

pip install -r requirements.txt

3.2 启动服务化推理

export MODEL_PATH=/opt/atomgit/dreamshaper-7-work/model   # 可选
export DEVICE=npu:0                                       # 可选,默认 npu:0
python3 inference.py serve 8360

启动日志(实测):

[INFO] Model loaded in 2.29s
INFO:     Uvicorn running on http://0.0.0.0:8360

3.3 服务接口

方法路径说明
GET/health服务与模型加载状态
GET/v1/models模型元信息(OpenAI 风格)
POST/v1/generate文生图(JSON 传 prompt,返回 base64 PNG)

3.4 命令行单次生成

python3 inference.py run --prompt "a red sports car on a coastal highway" \
    --steps 25 --seed 42 --output out.png

4. Smoke 验证

以下为服务化推理的实测记录(512×512,25 步,guidance 7.5,负向提示词统一为 "blurry, low quality" 类)。

4.1 健康检查

curl -s http://127.0.0.1:8360/health
{"status":"ok","model":"Lykon/dreamshaper-7","arch":"StableDiffusionPipeline (SD 1.5)","device":"npu:0","dtype":"torch.float16","scheduler":"DEISMultistepScheduler","loaded":true}

4.2 生成请求样例

curl -s http://127.0.0.1:8360/v1/generate -H 'Content-Type: application/json' \
  -d '{"prompt":"a majestic mountain landscape at sunset, highly detailed","num_inference_steps":25,"seed":42}'

4.3 输出样例汇总

#提示词seed服务端耗时
1a majestic mountain landscape at sunset, highly detailed, cinematic lighting421274.64ms
2a futuristic cyberpunk city street at night, neon lights reflecting on wet pavement123926.53ms
3a cute corgi puppy wearing sunglasses, portrait, sharp focus777925.08ms
4a red sports car driving on a coastal highway, golden hour999924.97ms

每次请求均返回 200,输出 512×512 PNG(358~478KB),图像内容与提示词语义吻合。

5. 性能参考

数据来自本次任务实测(Ascend 910 单卡,npu:0,512×512,25 步)。

阶段耗时
模型加载(含权重上卡)2.27~2.29s
首次生成请求(冷启动含预热)1274.64ms
稳态单请求生成约 925ms
连续 6 请求平均925.4ms(12.5 req/30s)
推理进程 HBM 占用3444MB
推理瞬间 AICore 利用率98% ~ 100%

说明:SD1.5 UNet 在昇腾上的前向算力充足,单步约 37ms(25 步合计约 0.9s),瓶颈集中在去噪迭代次数本身;调低 num_inference_steps(如 20 步)可进一步压缩至约 0.75s/张。

6. 精度测评

将同一 prompt、同一 seed 在昇腾 NPU(fp16)与 CPU(fp32)上分别推理,比较输出图像。

指标结果
对比设置256×256,10 步,seed=42,guidance=7.5
NPU fp16 生成耗时0.74s
CPU fp32 生成耗时83.26s
像素平均绝对差(MAE)0.18(0-255 尺度)
均方误差(MSE)0.30
均方根误差(RMS)0.55
像素最大绝对差15.00

结论:fp16 精度下 NPU 与 CPU fp32 参考输出逐像素接近(平均绝对差 0.18/255,约 0.07%),扩散迭代链没有出现误差累积放大,证明昇腾上 fp16 算子路径与标准 fp32 语义高度一致。对比图像见 assets/precision_npu.png 与 assets/precision_cpu.png。

7. 注意事项

  • 架构定位:DreamShaper-7 是文本到图像扩散模型(非 LLM/VLM),vLLM 引擎的 /v1/chat/completions 链路不适用;本仓库以 diffusers + torch_npu 提供服务化推理,接口见 3.3。
  • 算子路径:经 profiler 逐算子盘点,UNet 前向全部由 aten::* / aclnn* / npu::* 原生算子构成,无 CUDA/Triton 依赖,昇腾可开箱运行。
  • 端口冲突:环境中 8000/8001/8002/8050/8320 等可能被其他任务占用,启动前先确认端口空闲,必要时改用其他端口。
  • 共享资源:NPU 多任务共享,部署前用 npu-smi info 核对芯片显存占用,勿 kill 他人进程。
  • safety_checker:本适配默认关闭安全检测组件(safety_checker=None),如需合规内容过滤可自行启用。
  • fp16 权重:仓库推理默认加载 variant="fp16" 权重;若仅下载了 fp32 权重,去掉 variant 参数即可。
  • seed 复现:同 seed 在 NPU 上可稳定复现相同图像;跨设备(NPU/CPU)因浮点累加差异输出会略有不同。