首页 / 资讯中心 / 文章详情

NPU推理加速的秘密:sd1.5-controlnet-canny-amdnpu的BF16与BFP8量化技术深度剖析

NPU推理加速的秘密:sd1.5-controlnet-canny-amdnpu的BF16与BFP8量化技术深度剖析 ★ FEATURED ARTICLE
【免费下载链接】sd1.5-controlnet-canny-amdnpu项目地址https://ai.gitcode.com/hf_mirrors/amd/sd1.5-controlnet-canny-amdnpu点击查看免费下载Stable Diffusion 1.5 ControlNet (Canny) 是一个顺着边缘线画画的 AI 绘图流水线而 sd1.5-controlnet-canny-amdnpu 是 AMD 官方为 Ryzen AI 优化的模型仓库让这套图像生成模型在 AI PC 上实现NPU推理加速。本文深度剖析其两大核心量化技术BF16与BFP8的原理并用仓库里的真实证据文件带你读懂加速过程。 为什么 Stable Diffusion 需要 NPU 加速Stable Diffusion 的 UNet 要反复做几十次去噪迭代每一步都是大量卷积和矩阵乘——对算力与带宽的需求远超普通 CPU 能轻松承担的范围硬件跑 SD 1.5 的典型体验CPU慢且持续高负载、噪音大GPU快但耗电高轻薄本无独显NPU (Ryzen AI)专为 AI 推理设计低功耗、高能效边画边办公不卡顿sd1.5-controlnet-canny-amdnpu的做法是把 ControlNet、UNet、VAE 解码器三大核心部件导出为ONNX格式并针对 NPU 的算子能力做结构重写NHWC 数据布局 融合算子让 NPU 能直接高效执行。ControlNet v1.1 (Canny) 的作用则是用 Canny 边缘图约束生成图像的结构让出图忠实于参考图的轮廓。 仓库中 controlnet/config.json、unet/config.json、vae_decoder/config.json 分别描述了三者的网络结构如 UNet 的block_out_channels为[320, 640, 1280, 1280]。 仓库结构速览谁上了 NPU谁留在 CPU├─ controlnet/ # ControlNet 主干NPU 优化含 dd/ 加速目录 ├─ unet/ # 扩散主干 UNetNPU 优化含 dd/ 加速目录 ├─ vae_decoder/ # VAE 解码器潜空间→像素NPU 优化 ├─ text_encoder/ # 文本编码器safetensors 权重CPU/GPU 共享 ├─ tokenizer/ # 分词器与词表vocab.json、merges.txt ├─ scheduler/ # 扩散采样调度器配置 ├─ feature_extractor/ # Canny 特征预处理器配置 └─ safety_checker/ # 安全审查模块配置关键区分controlnet、unet、vae_decoder 是加速主角它们的dd/子目录存放 NPU 加速所需的动态调度文件其余组件在 GPU 与 NPU 流水线间共享仅用于补全详见 README.md 中的说明。 第一站BF16 —— NPU 加速的入场券BF16Brain Float 16是 16 位浮点格式动态范围与 FP32 相当但数据量减半。NPU 的张量单元普遍原生支持 BF16是精度与速度之间最平衡的选择。在 controlnet/dd/onnx_report.txt 中可以看到真实的张量流向大量CastAvx算子把 FP32 张量转为 BF16例如CastAvx | [2,128,128,96] - FLOAT | [2,128,128,96] - BFLOAT16同时注意NhwcConv这种算子命名——权重被重排为NHWC 布局通道维放在最后这是 AMD 卷积硬件偏好的内存排布方式。在 unet/dd/cache/NhwcConv_0-conv_inConv_meta.json 中可以看到首层卷积NhwcConv_0-/conv_in/Conv被实现为 NPU 原生算子SDConv权重名为NhwcConv_0_weight_NHWC。进入 NPU 融合区域的输入输出清一色是BFLOAT16包括[2,77,768]这个形状——正是文本编码器输出的 77 个 token、每维 768 的交叉注意力条件向量。⚡ 第二站BFP8 —— 让权重再瘦一半如果只做 BF16加速已经不错但要榨干 NPU还需要更小的数据。BFP8bfloat88 位浮点是 AMD 为 NPU 定制的 8 位浮点格式相比 BF16权重与中间激活体积再减半片上缓存利用率更高NPU 硬件对 BFP8 的卷积/矩阵乘有专门的高吞吐执行路径激活数据的输入/输出仍以 BF16 进出仅在计算核心内部降为 BFP8精度损失被藏在融合区域内。这套机制在报告里体现为一组_bfp后缀算子和两个翻译官算子作用SDCastBf2BfpBF16 → BFP8进入 NPU 计算区前的降精度SDConv_bfp/SDGemm_bfp/SDMHA_bfp在 BFP8 精度下执行卷积 / 矩阵乘 / 多头注意力SDLayerNorm_bfp/SDGroupNorm_bfp/SDAdd_bfp/SDSilu_bfp归一化、残差、激活等配套低精度算子SDCastBfp2BfBFP8 → BF16计算完成后的升精度还原也就是说数据以 BF16 进入内部以 BFP8 计算再以 BF16 离开——这正是BF16 与 BFP8 混合量化的含义。 解读加速小票offload 比率 81.79% 意味着什么controlnet/dd/onnx_report.txt 末尾是一张非常有说服力的统计表指标数值解读Not offloaded sum67留在 CPU 侧的算子数多为 Cast、Transpose、Mul 等轻量算子Offloaded sum11 个DynamicDispatch节点整体被卸载到 NPUOffloaded sum (dd fusion)301该节点内部融合的 NPU 算子总数Offload Ratio (dd fusion)81.79%融合区域内 NPU 承接的算子占比 一个DynamicDispatch节点吞掉301 个内部算子说明编译器把 Conv、GEMM、LayerNorm、MHA、Silu、Add 等串联成了一个 NPU 专属的大算子大幅减少 CPU/NPU 之间的往返拷贝——这正是量化技术之外同样关键的算子融合加速手段。 dd/ 目录里的神秘文件都是什么每个加速部件下都有一个dd/目录dd Dynamic Dispatch例如 unet/dd/文件含义replaced.onnx被替换后的精简 ONNX 模型壳重活交给 dd 文件dd_metastate_*.ctrlpkt/.fconst/.state/.super动态调度的元状态包控制包、常量、状态、超级状态由 Git LFS 托管cache/*_meta.json融合算子的完整定义算子类型、形状、步长、填充等文件名本身就是技术指纹例如 controlnet 中的 dd_metastate_SD15_Unet_NhwcConv_5_out-controlnet_cond_embeddingblocks.3Conv_output_0.out14_6_SDCastBf2Bfp.ctrlpkt末尾的SDCastBf2Bfp正对应上文讲的 BF16→BFP8 转换入口vae_decoder/dd/ 中的post_quant_convConv则标识了 VAE 解码器的最后一层量化卷积。 新手上手指南跑通 SD 1.5 NPU 推理准备硬件与驱动一台搭载 AMD Ryzen AIXDNA NPU的 AI PC并安装对应的 NPU 推理栈获取模型文件从本仓库下载全部目录text_encoder 约几 GB注意磁盘空间组装流水线推理框架按tokenizer → text_encoder → (unet controlnet) → scheduler → vae_decoder的顺序加载各模块喂入 Canny 边缘图先用 Canny 算子从参考图提取边缘配置见 feature_extractor/preprocessor_config.json再与文本提示一起送入 ControlNet观察 NPU 利用率去噪阶段应主要由 NPU 承担CPU 占用明显下降。更多使用细节可参考 README.md 的 Intended Use 部分及许可证 LICENSECreativeML OpenRAIL-M。❓ 常见疑问FAQQ1BFP8 会不会让出图质量变差混合量化的设计就是尽量藏损失只有计算核心内部用 8 位精度输入输出仍是 BF16且整个计算被融合在 NPU 内一次完成误差累积路径被压缩。Q2text_encoder 为什么没有 dd/ 目录文本编码器CLIP只在开头执行一次、计算量占比小放在 CPU 上即可无需为它做 NPU 加速结构见 text_encoder/config.json。Q3这套模型能在普通独显 GPU 上跑吗_bfp系列算子是 NPU 专属自定义算子GPU 上没有对应实现因此本仓库专供 AMD NPU 流水线使用。✅ 小结sd1.5-controlnet-canny-amdnpu用三步走让 Stable Diffusion 1.5 ControlNet (Canny) 在 AI PC 上飞起来NHWC 布局重写—— 对齐 NPU 卷积硬件的内存偏好BF16 为主、BFP8 为辅的混合量化—— 数据量减半再减半NPU 原生低精度算力全开DynamicDispatch 算子融合—— 301 个算子打包成一次 NPU 调用offload 比率高达 81.79%。读懂了这份仓库你也就读懂了大模型如何在端侧低功耗硬件上高效推理的完整答案。赞分享【免费下载链接】sd1.5-controlnet-canny-amdnpu项目地址https://ai.gitcode.com/hf_mirrors/amd/sd1.5-controlnet-canny-amdnpu点击查看免费下载相关推荐在 AMD NPU 上画出你的第一张线稿图sd1.5-controlnet-canny-amdnpu 实战手把手教程在 AMD NPU 上画出你的第一张线稿图sd1.5 controlnet canny amdnpu 实战手把手教程 想在 AMD NPU 上用 Contro从潜空间到最终图像深入理解sd1.5-controlnet-canny-amdnpu中VAE解码器的关键作用从潜空间到最终图像深入理解sd1.5 controlnet canny amdnpu中VAE解码器的关键作用 sd1.5 controlnet canny aLightdash 可视化配置收敛从四套词汇表走向统一的列寻址 Viz 栈Lightdash 可视化配置收敛从四套词汇表走向统一的列寻址 Viz 栈 本文档是 Lightdash docs/composer viz plan/ 系列上一篇告别信息焦虑vue-vben-admin消息中心全方位使用指南下一篇7天从零打造个人博客用Python Bootcamp技能轻松实现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站