【免费下载链接】stable-diffusion-1.5-amdnpu项目地址https://ai.gitcode.com/hf_mirrors/amd/stable-diffusion-1.5-amdnpu点击查看免费下载stable-diffusion-1.5-amdnpu是 AMD 官方发布的、面向AMD NPU的 Stable Diffusion 1.5 文生图模型仓库。它通过ONNX 导出DynamicDispatch 算子融合将 UNet 去噪主干的97.94%计算卸载Offload到 NPU 执行让 RyzenAI 平台也能高效跑图文生成。这篇文章带你逐层拆解这份NPU 专属 UNet是怎么炼成的。一、为什么需要NPU专属的UNetStable Diffusion 由几个核心部件组成各自算力需求差异巨大部件作用在 NPU 管线中的位置Tokenizer Text Encoder把文字提示词变成语义向量CPU 执行text_encoder/model.safetensorsUNet去噪主干占整体 90% 的耗时NPU 执行ONNX 优化版VAE Decoder把潜空间还原成 512×512 图像NPU 执行ONNX 优化版Scheduler控制噪声步长PNDM 调度CPU 配置scheduler/scheduler_config.json普通导出的 ONNX 模型包含成百上千个细粒度算子Conv、MatMul、Relu……NPU 编译器很难把它们高效融合。AMD 的做法是把 UNet 和 VAE Decoder整体打包成一个DynamicDispatch超级算子由 NPU 内部自行完成算子融合CPU 侧只剩轻量胶水。这一设计在 README.md 中被明确说明UNet 和 VAE Decoder 是optimized and structured to run on AMD NPUs而其他组件text encoder、tokenizer、scheduler与 GPU 管线共享。二、仓库结构速览每个文件夹对应管线的一个零件️仓库结构刻意镜像了扩散管线的部件划分├─ scheduler/ # 采样调度器配置PNDMScheduler ├─ text_encoder/ # CLIP ViT-L/14 文本编码器safetensors ├─ tokenizer/ # 分词器词表vocab.json / merges.txt ├─ unet/ # ⭐ NPU 优化版 UNetONNX 运行时状态 └─ vae_decoder/ # ⭐ NPU 优化版 VAE 解码器ONNX 运行时状态打开 unet/config.json 可以看到经典 SD1.5 UNet 配置UNet2DConditionModel输入/输出 4 通道潜变量交叉注意力维度 768正好对应 CLIP 的隐藏层宽度sample_size: 64即 64×64 的潜空间。三、ONNX 导出关键NHWC 布局 BF16 低精度观察 unet/dd/onnx_report.txt 中的张量形状能直接读出导出时的两个关键决策1. NHWC 数据布局。UNet 输入写作[2,64,64,4]——通道在最后N,H,W,C而非深度学习常见的 NCHW。这正是 NPU 硬件友好的布局dd目录中NhwcConv命名的元状态文件如dd_metastate_SD15_Unet_NhwcConv_0-conv_inConv.state也印证了卷积按 NHWC 重排。2. BF16BFLOAT16计算精度。报告中大量输入/输出标注为BFLOAT16CPU 侧仅做CastAvx完成 FLOAT ↔ BFLOAT16 的边界转换。BF16 让 NPU 的矩阵运算吞吐翻倍且无需维护缩放因子非常适合扩散模型这种容忍小误差的推理场景。3. 批量 batch2 的固定形状。UNet 三个输入分别是潜变量 [2, 64, 64, 4] 噪声潜表示 文本嵌入 [2, 77, 768] 77 个 token × 768 维CLIP 输出 时间步 [2, 320] t 的嵌入投影VAE 解码器则从[1,64,64,4]还原出[1,512,512,3]的 RGB 图像见 vae_decoder/dd/onnx_report.txt。固定形状省去了动态 shape 的运行时开销是端侧推理的标准优化手段。四、核心揭秘97.94% 算子卸载是如何做到的打开 unet/dd/onnx_report.txt报告分为上下两半1留在 CPU 的部分仅 13 个胶水算子Not offloaded sum 13 Cast / CastAvx / Concat / Cos / Expand / Mul / Reshape / Sin / Transpose这些正是时间步嵌入timestep embedding的前处理对 t 做正弦/余弦编码、拼接、缩放以及输入输出的数据搬运。它们计算量极小都是向量级操作留在 CPU 上反而更高效。2卸载到 NPU 的部分618 个算子融合成 1 个 DynamicDispatchOffloaded sum 1 ONNX 图中只剩 1 个 DynamicDispatch 节点 Offloaded sum (dd fusion) 618 NPU 内部实际融合了 618 个算子 Offload Ratio (dd fusion) 97.94%这 618 个算子涵盖了 UNet 的全部核心运算报告列出的 NPU 侧算子类型包括算子族含义在 UNet 中的角色SDConv/SDConv_bfp卷积残差块、下/上采样主力SDMHA_bfp/SDFlatMHA多头注意力自注意力 交叉注意力SDGemm/SDGemm_bfp矩阵乘注意力投影、时间步 MLPSDGroupNorm_bfp/SDLayerNorm_bfp归一化每个卷积块前置SDSiluSiLU 激活门控线性单元GLUSDResize_bfp上/下采样空间尺寸变换SDAdd_bfp/SDMul_bfp/SDConcat_bfp逐元素运算残差连接、时间步融合SDCastBf2Bfp/SDCastBfp2Bf精度转换图边界处的格式对齐关键洞察97.94% 这个数字统计的是算子融合视角——ONNX 图里 619 个算子618 个被吸入 NPU 的DynamicDispatchCPU/NPU 之间的数据搬运次数从 600 次骤降到3 进 1 出这才是 NPU 真正跑满的秘诀。3dd/目录里的运行时文件是干什么的unet/dd/ 下还有一组配套文件replaced.onnx被DynamicDispatch替换后的精简 ONNX 图.state/.super/.ctrlpkt/.fconstNPU 编译缓存与元状态避免每次推理重新编译.gitattributes已为.ctrlpkt、.fconst、.state、.super等配置了 Git LFS 大文件存储cache/*.json融合后的算子元数据供运行时校验加载。五、VAE 解码器同样被优化95.7% 卸载✅vae_decoder/dd/onnx_report.txt 显示了同款配方Offloaded sum (dd fusion) 89 Offload Ratio (dd fusion) 95.7% Offloaded Op Types: SDConv / SDAdd / SDResize / SDGemm / SDMHA_VAE / SDGroupNormVAE 只含 89 个算子结构比 UNet 简单得多CPU 侧仅留 4 个算子两次输入输出Transpose和数据转换CastAvx——注意SDMHA_VAE说明该 VAE 解码器还启用了注意力机制SD1.5 配套的 VAE 2.x 风格解码器同样被 NPU 接管。六、CPU NPU 协作的完整推理管线把前面所有信息串起来一次文生图是这样流转的文字提示词 │ tokenizerCPU[tokenizer/vocab.json](https://link.gitcode.com/i/8ab47db3afb3407f06e76f7a93a231e5) ▼ Token 序列 │ CLIP Text EncoderCPU[text_encoder/](https://link.gitcode.com/i/adc876346e5d1d6a46fab96e2b85b4ef) ▼ 文本嵌入 [2,77,768] ──────────────┐ ▼ 时间步 t 噪声潜变量 ──► DynamicDispatchNPU618 算子× N 步 │ ▼ 去噪后潜变量 [2,64,64,4] │ VAE DecoderNPU89 算子 ▼ 成品图像 [2,512,512,3]调度器配置scheduler/scheduler_config.json使用 PNDMScheduler1000 个训练步对应num_train_timesteps推理时按指定步数采样。七、总结这套方案的三个可借鉴经验按硬件布局导模型NHWC BF16 固定形状让导出时就贴合 NPU 硬件特性而非事后修补粗粒度融合优于细粒度映射与其让编译器逐个算子找硬件实现不如把整个网络包进DynamicDispatch由 NPU 运行时做深度融合618 算子 → 1 个节点把脏活留给 CPU正弦编码、转置、精度转换这类轻量向量运算留在 CPUNPU 只干卷积和注意力这种重活卸载率97.94%自然就上来了。如果你想在自己的 RyzenAI 设备上体验这套 NPU 加速管线可以拉取仓库git clone https://gitcode.com/hf_mirrors/amd/stable-diffusion-1.5-amdnpu并阅读 README.md 中指向的 AMD 官方示例工程sd-sandbox快速跑通第一条 NPU 生图链路。赞分享【免费下载链接】stable-diffusion-1.5-amdnpu项目地址https://ai.gitcode.com/hf_mirrors/amd/stable-diffusion-1.5-amdnpu点击查看免费下载相关推荐NPU加速的核心dreamshaper-xl-lightning-amdnpu的UNet ONNX导出与98.13%卸载率优化详解NPU加速的核心dreamshaper xl lightning amdnpu的UNet ONNX导出与98.13%卸载率优化详解 如果你想让 Stablestable-diffusion-1.5-amdnpu项目概览一文读懂AMD NPU专属的Stable Diffusion 1.5优化模型仓库stable diffusion 1.5 amdnpu项目概览一文读懂AMD NPU专属的Stable Diffusion 1.5优化模型仓库 stablesd-turbo-amdnpu 如何实现 98% 算子 NPU 卸载DynamicDispatch 与 metastate 文件完整解码sd turbo amdnpu 如何实现 98% 算子 NPU 卸载DynamicDispatch 与 metastate 文件完整解码 本文带你快速读懂 s创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考