DreamShaper-7 是 Lykon 在 Stable Diffusion 1.5 基线上精调的开源文生图模型,主打高细节与风格化表现,在艺术插画、概念设计等场景表现突出。本仓库以 Hugging Face 的 Lykon/dreamshaper-7(diffusers StableDiffusionPipeline 格式)为对象,完成了从权重获取、昇腾算子兼容性评估、NPU 推理路径验证到 HTTP 服务化封装的全流程适配。
模型整体由四部分构成:UNet2DConditionModel(去噪主干)、AutoencoderKL(VAE 潜空间编解码)、CLIPTextModel(文本编码)、CLIPTokenizer(分词),调度器为 DEISMultistepScheduler。以下关键规格全部来自对本地权重文件的实测读取。
| 项目 | 值 |
|---|---|
| 模型 ID | Lykon/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_factor | 0.18215 |
| 调度器 | DEISMultistepScheduler(1000 步训练,epsilon 预测) |
| 权重精度 | fp16(unet 1.72GB / vae 167MB / text_encoder 246MB) |
| 项目 | 配置 |
|---|---|
| NPU 型号 | Ascend 910(Ascend910_9362,aarch64) |
| NPU 数量 | 2 片(本次使用 npu:0) |
| 单卡 HBM | 64GB |
| 推理进程 HBM 占用 | 3444MB |
| 推理时 AICore 利用率 | 98% ~ 100% |
说明:机器上同时运行着其他任务的模型服务,NPU 为共享资源。本次适配的推理进程在 npu:0 上独立占显 3.4GB,与其他进程互不干扰。
| 项目 | 版本 |
|---|---|
| 操作系统 | Ubuntu 22.04.5(内核 5.10.0,aarch64) |
| Python | 3.11.14 |
| PyTorch | 2.9.0 |
| torch_npu | 2.9.0.post1 |
| CANN | 8.5.1 |
| diffusers | 0.31.0 |
| transformers | 4.57.6 |
| vllm-ascend | 0.18.0(已安装,本模型不经过其 LLM 链路) |
| FastAPI / Uvicorn | 0.123.10 / 0.46.0 |
| 项目 | 说明 |
|---|---|
| 首选源 | GitCode 镜像(hf_mirrors/Lykon/dreamshaper-7) |
| 结果 | hub.gitcode.com 连接超时,git 协议被服务端重定向至首页 |
| 次选源 | ModelScope(Lykon/dreamshaper-7) |
| 结果 | record not found,模型未收录 |
| 实际采用 | Hugging Face(hf-mirror.com 镜像) |
| 完整性 | 22 个文件全部下载,fp16 权重逐张量读取校验通过 |
仓库内 inference.py 自包含加载、前向、服务化逻辑,支持 CLI 单次生成与 FastAPI 服务两种模式。默认端口 8360(避开环境中 8000/8001 等其他服务占用)。
pip install -r requirements.txtexport 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| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /health | 服务与模型加载状态 |
| GET | /v1/models | 模型元信息(OpenAI 风格) |
| POST | /v1/generate | 文生图(JSON 传 prompt,返回 base64 PNG) |
python3 inference.py run --prompt "a red sports car on a coastal highway" \
--steps 25 --seed 42 --output out.png以下为服务化推理的实测记录(512×512,25 步,guidance 7.5,负向提示词统一为 "blurry, low quality" 类)。
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}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}'| # | 提示词 | seed | 服务端耗时 |
|---|---|---|---|
| 1 | a majestic mountain landscape at sunset, highly detailed, cinematic lighting | 42 | 1274.64ms |
| 2 | a futuristic cyberpunk city street at night, neon lights reflecting on wet pavement | 123 | 926.53ms |
| 3 | a cute corgi puppy wearing sunglasses, portrait, sharp focus | 777 | 925.08ms |
| 4 | a red sports car driving on a coastal highway, golden hour | 999 | 924.97ms |
每次请求均返回 200,输出 512×512 PNG(358~478KB),图像内容与提示词语义吻合。
数据来自本次任务实测(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/张。
将同一 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。
/v1/chat/completions 链路不适用;本仓库以 diffusers + torch_npu 提供服务化推理,接口见 3.3。aten::* / aclnn* / npu::* 原生算子构成,无 CUDA/Triton 依赖,昇腾可开箱运行。npu-smi info 核对芯片显存占用,勿 kill 他人进程。variant="fp16" 权重;若仅下载了 fp32 权重,去掉 variant 参数即可。