当前位置: 首页 > news >正文

金山郑州阳网站建设东莞 骏域网站建设

金山郑州阳网站建设,东莞 骏域网站建设,wordpress付费阅读chajian,北京 网站开发随着ChatGPT和Stable Diffusion的发布#xff0c;最近一两年#xff0c;生成式AI已经火爆全球#xff0c;已然成为移动互联网后一个重要的“风口”。就图片/视频生成领域来说#xff0c;Stable Diffusion模型发挥着极其重要的作用。由于Stable Diffusion模型参数量是10亿参… 随着ChatGPT和Stable Diffusion的发布最近一两年生成式AI已经火爆全球已然成为移动互联网后一个重要的“风口”。就图片/视频生成领域来说Stable Diffusion模型发挥着极其重要的作用。由于Stable Diffusion模型参数量是10亿参数的大模型通常业界都是运行部署在显卡上。 但是随着量化、剪枝等模型压缩技术的进步以及手机等终端设备的算力、带宽、内存持续增大。使得大模型在终端设备部署也成为的可能。大模型在终端部署可以有效保护用户隐私而且终端设备日常广泛使用、用户可以随时随地生成想要的内容。 MNN-Diffusion使用 本文是深度学习推理引擎MNN团队做的Stable Diffusion端侧部署应用代码开源用户可以自行DIY各种好玩的Stable Diffusion应用。 MNN开源地址 https://github.com/alibaba/MNN/tree/master 欢迎大家试用使用教程如下 https://mnn-docs.readthedocs.io/en/latest/transformers/diffusion.html 下面是在个人手机/电脑上生成的图片 技术要点 业界加速Stable Diffusion部署通常有两个方向一是算法层面的优化包括优化网络结构、减少计算量或者降低推理迭代步数二是工程部署优化通过量化/算子高效实现等方式提高硬件计算效率、提高访存效率。MNN作为推理引擎主要聚焦在工程部署优化上下面分享下MNN Diffusion GPU在性能/内存方面做了优化工作。 ▐  Self-Attention优化 Transformer结构中Self-Attention是一个基础结构也是性能耗时的关键。如下结构是一个典型的Attention结构 一个共有节点分别经过三个Linear层得到Query/Key/ValueQuery/Key经过形状变换进行BatchMatMul操作再进行Scale取Softmax操作该结果和Value经过形状变换做BatchMatMul之后把结果进行形状变换得到最终的输出。可以看到上述总共有19个算子包括12个形状变化算子7个计算型算子。 大量的形状变化会带来很多的访存耗时对于GPU高算力的硬件来说访存耗时往往容易成为热点。因此将上述结构融合成2个算子第一个是将三个Linear层权重融合在一起只做一个Linear这样形成更大的矩阵乘尺寸更容易打满GPU算力带来性能收益第二个算子是将Attention算子融合成一个算子Fused-MultiHead-Attention融合之后在该新算子内部仅需5个Kernel就可以实现整个Attention功能。消除了大量额外的形状变换算子降低了访存压力同时可以更容易基于Attention算子特性做进一步优化工作。 ▐  GroupNorm/SplitGeLU融合 在Stable Diffusion中有一个通用的结构ResnetBlock其中包含了BroadCast Binary GroupNorm SiLU结构在onnx模型图结构中包含了如下13个算子 可以看到GroupNorm采用InstanceNorm形变算子实现gamma/beta被单独拆解为mul/add算子细碎的算子会增加全局内存的访存次数、以及Kernel launch的压力。因此将上述通用结构合并成一个GroupNorm算子该算子把前面的BroadCast Binary和后续的SiLU激活函数融合在一起。高效的只需一个Kernel就可以实现上述计算需求。 同样的图融合原理在Transformer激活函数中Stable Diffusion Feed-Forward模块中采用GEGLU结构对应onnx图结构如下。将该8个onnx图算子融合为通用的SplitGeLU算子。 ▐  conv-winograd算法实现 在Stable Diffusion中有大量3x3卷积在深度学习中Winograd算法已经大量应用在加速3x3卷积实现。 Winograd F(m, r)算法其中m代表一个计算tile的大小r对应filter的尺寸dmr-1 代表对应input tile大小。 下表是3x3 Winograd不同tile对应计算量的节省比例和中间内存占用的增大比例。 mrd计算量前后比例input中间内存weight中间内存2349 : 4 2.25x4x1.78x4364 : 1 4x2.25x4x63881 : 16 5.06x1.78x7.11x 目前我们使用的是F(2, 3) Winograd控制内存增大量同时带来一倍的性能提升效果。 ▐  高性能Gemm/BatchGemm 上述分析可以看出Attention/卷积3x3核心计算量在BatchGemm上Linear层实际上就是Gemm运算。实际上Stable Diffusion中核心的计算量或者说耗时的热点归根溯源都集中在Gemm/BatchGemm上。如何高效实现矩阵乘法 成为最核心的关键。 矩阵乘在各个维度上的分块策略可以有效提升数据的复用度和数据cache命中率合理的分块可以为矩阵乘法带来大幅度的性能提升。 上图展示了矩阵乘在各个维度上面的分块变量包括在并发M/N维度单次数据访存向量化位宽、每个线程存取矩阵的尺寸、每个工作组存取矩阵的尺寸以及如果使用local memory缓存的话每个线程/工作组的缓存量。 这些参量都决定了数据访存的效率、并发量的大小、计算访存比的大小。不同的设备有不同的寄存器资源、共享内存资源、访存带宽、计算核心数这些参量都决定着矩阵乘法的性能效率。 对于特定的矩阵乘的尺寸M/N/K针对特定设备采取Auto-Tuning的获取最佳的运行参数(OPWM/OPWN/OPTM/OPTN/VEC_M/VEC_N等)Tuning候选集数量是M的N次方(N是参数的个数、M是每个参数候选集个数。如果暴力循环每个参数候选集由于候选集数量巨大、并且大尺寸矩阵乘本身单次运行耗时较大必然会导致要花费大量时间去Tuning完所有候选集。因此根据经验和实际试跑选出部分高频参数候选集进行Tuning在控制好Tuning时间的同时也可以带来极大的性能收益。 ▐  Gemm Strassen探索 由于矩阵乘法是Stable Diffusion耗时的核心因此进行了矩阵乘快速算法的研究探索。Strassen算法是利用矩阵拆解通过引入矩阵加减法来减少矩阵乘法次数的方式。最简单的方法将M/N/K维度各对拆1/2的方法朴素的矩阵拆解如下 Strassen算法通过15次子矩阵加减法来减少一次子矩阵乘法。矩阵拆解如下 当N足够大时矩阵加减法耗时会远低于矩阵乘法耗时带来12.5%的计算量降低。当N较小时受限于15次 子矩阵加减的 耗时以及拆解子矩阵乘法算力打不满等损耗原因将引起负优化。具体某个形状的矩阵乘法适不适合使用Strassen算法 对于矩阵A形状为[M, K] 矩阵B形状为[N, K]输出矩阵C形状为[M, N]。15次子矩阵加减数据访存量为(3*M*K 3*N*K 3.5*M*N) * sizeof(DataType) Bytes。1次子矩阵乘法数据计算量为1/8 * M*N*K * 2 1/4 * M*N*K FLOPS。我们默认矩阵加减是带宽瓶颈矩阵乘法是算力瓶颈。假设设备的内存带宽为X GB/s算力是Y GFLOPS。 子矩阵加减耗时6*M*K 6*N*K 3.5*M*N*sizeof(DataType) / X (ns) 子矩阵乘节省耗时(1/4 * M * N * K) / Y (ns) 当节省的耗时大于损耗耗时即可有性能收益。根据上述公式计算访存比越低的设备Strassen算法越容易有收益。对于手机设备来说1024x1024x1024的子矩阵通常可以获得约10%的性能收益。 ▐  内存占用优化 在Attention优化中Q/K做BatchMatMul得到中间数据QK时张量维度为[Batch HeadNum, SeqLen, SeqLen]。对于Stable Diffusion来说会遇到Batch2HeadNum16SeqLen4096。对于float16的数据类型单个张量的存储就需要1GB的内存大小这对于内存资源紧缺的端侧设备是不可接受的。 因此将Attention操作进行分块处理类似Paged Attention的思路将整个Attention分成SeqNum次执行这样每次仅需原先1/SeqNum中间内存大小可以非常有效的控制内存的大小。 性能测评 MNN Stable Diffusion应用生成512x512图片在骁龙8Gen3上使用GPU float16精度达到2s/iter (20次迭代手机上40s可以生成完一幅图)在Apple Mac M3上GPU float32精度达到1.1s/iter (20次迭代Mac上22s可以生成完一幅图)。MNN CPU/GPU性能均较大幅度快于如下Stable Diffusion开源框架例如 stable-diffusion.cpphttps://github.com/leejet/stable-diffusion.cpp/issues/15Android OnnxRuntime Stable Diffusion应用https://github.com/ZTMIDGO/Android-Stable-diffusion-ONNX 后续研究 后续在性能优化和内存优化上面仍然有空间可以挖掘。 性能优化方面 Conv Winograd采用更大的分块获取更高的计算量降低收益。矩阵乘尝试Image存储内存访问模式提高访存效率。Attention进一步采用Flash Attention等思路优化。 内存占用优化方面 采用低比特权重(int8/int4量化)。在线转换动态内存可复用Conv Winograd权重尝试采用在线转换。Attention 采用Flash Attention优化节省中间内存使用。 参考资料 https://blog.csdn.net/xian0710830114/article/details/129194419https://github.com/NVIDIA/TensorRT/tree/release/8.6/demo/Diffusionhttps://arxiv.org/abs/0707.2347https://courses.cs.cornell.edu/cs6810/2023fa/Matrix.pdfhttps://github.com/CNugteren/CLBlast/tree/masterhttps://arxiv.org/pdf/1703.06503https://github.com/leejet/stable-diffusion.cpp/https://github.com/ZTMIDGO/Android-Stable-diffusion-ONNX 团队介绍 我们是大淘宝技术Meta Team负责面向消费场景的3D/XR基础技术建设和创新应用探索通过技术和应用创新找到以手机及XR 新设备为载体的消费购物3D/XR新体验。团队在端智能、商品三维重建、3D引擎、XR引擎等方面有深厚的技术积累。团队在OSDI、MLSys、CVPR、ICCV、NeurIPS、TPAMI等顶级学术会议和期刊上发表多篇论文。 ¤ 拓展阅读 ¤ 3DXR技术 | 终端技术 | 音视频技术 服务端技术 | 技术质量 | 数据算法
http://www.hkea.cn/news/14290751/

相关文章:

  • 广州市门户网站建设品牌设计制作服务合同
  • 做影视网站用什么网盘最好家电电商平台排名
  • 手机怎么做微信公众号七台河网站seo
  • 单本小说网站源码淘宝api wordpress
  • 丹徒网站wordpress修改网站菜单位置
  • 在市场部做网站多少工资网页app制作入门教程
  • 注册网站是什么意思购物网站哪里建最好
  • 高职高专图书馆网站建设wordpress编辑器未知错误5.2
  • 中小企业网站建设与管理课件百度云百度竞价渠道户
  • 查品牌的软件有什么百度seo优化方案
  • 在线模版下载网站灰色行业推广渠道
  • 网站开发知识培训网站建设与规划试卷
  • 合理规划网站简洁的企业网站源码
  • 德州哪里有学做网站的owl WordPress
  • 网站显示建设中页面四川住房城乡和城乡建设厅网站
  • 下载类网站开发条件邢台视频优化
  • 帮网站做推广赚钱中国的网站域名
  • 域名注册多少钱网页优化包括
  • 电子商务网站建设实践报告wordpress 附件预览
  • 网站地图对seo的影响wordpress中文官网上
  • iis怎么做网站微信开发公司怎么样
  • 简述创建一个网站的过程反向代理
  • 站酷网页温岭专业自适应网站建设
  • 中山网站优化wordpress编辑器代码
  • 昆明网站开发培训百度收录wordpress
  • 重庆点优建设网站公司吗合肥做一个网站要多少钱
  • 餐饮加盟网站建设方案扁平化wordpress主题
  • 如何将自己做的网站发布到网上做网站用啥软件
  • 广州模板建站多少钱成都网站建设 今网科技
  • 网站建设制作设计营销 中山网站排名快速提升