当前位置:首页 > 中国芯 > 端侧AI
[导读]导读: 2:4 结构化稀疏的卖点是权重减半、算力翻倍。把这条放到端侧 NPU 上算一遍,两件事都不成立:权重并没有减半,因为每组要带索引;算力也不是瓶颈,因为 8 TOPS 配 25.6 GB/s 的机器,拐点在 312 次运算每字节,模型里没有一层够得着。稀疏在这里省的是带宽,能兑现的上限是 1.6 倍。

2:4 结构化稀疏的卖点是权重减半、算力翻倍。把这条放到端侧 NPU 上算一遍,两件事都不成立:权重并没有减半,因为每组要带索引;算力也不是瓶颈,因为 8 TOPS 配 25.6 GB/s 的机器,拐点在 312 次运算每字节,模型里没有一层够得着。稀疏在这里省的是带宽,能兑现的上限是 1.6 倍。

拐点在 312 次运算每字节

端侧 NPU 的算力和内存带宽是两个独立的天花板,性能落在哪一边,看的是算术强度,也就是每读一个字节能完成多少次运算。屋顶模型的拐点等于峰值算力除以峰值带宽:8 TOPS 除以 25.6 GB/s,312 次运算每字节。

LPDDR5 在 6400 Mbps、32 位位宽下的理论带宽就是 25.6 GB/s,实际有效值通常在七成上下。算力这边,8 TOPS 是 int8 的标称峰值,卷积阵列吃满才拿得到。拐点位置会随实测值浮动,量级在 300 到 450 之间。

模型的算术强度算出来低得多。3×3 深度卷积,256 个通道、56×56 特征图,乘加次数是 9×256×56×56,约 720 万,对应的访存是输入输出两张特征图加不到 3 KB 的权重,折算下来约 9 次运算每字节。1×1 逐点卷积在同样尺寸下乘加次数升到 2 亿次量级,访存主要是两张特征图,算术强度约 245。

两个数都远低于 312。这意味着端侧 NPU 跑常见视觉骨干时,每一层都在带宽屋顶下面,算力阵列有一半以上时间在等数据。

实际带宽还要再打个折。LPDDR5 的 25.6 GB/s 是理论峰值,多核争抢、刷新开销、跨时钟域同步都会吃掉一部分,端侧设备上量到的有效带宽常在 60% 到 75% 之间,取 18 GB/s 时拐点升到 444 次运算每字节。拐点越高,落在带宽屋顶下面的层就越多,稀疏的价值越大,这是端侧与云端一个少见的同向结论。

图 1 8 TOPS 与 25.6 GB/s 构成的屋顶模型,拐点在 312 次运算每字节,深度卷积与逐点卷积都落在斜线一侧(依据原文第 3 节绘制)

稀疏省的是带宽,不是算力

既然瓶颈在带宽,稀疏的收益就按带宽算。2:4 结构把每四个权重压到两个非零值,读进来的字节少了,等数据的时间短了,这是端侧唯一能兑现的部分。

算力那一半收益拿不到。稀疏矩阵乘法在理论上把乘加次数减半,但阵列本来就在等数据,乘加次数减半只是让等的时间更长。硬件上做的稀疏加速,实际效果是把有效算力从 8 TOPS 抬到 16 TOPS,拐点从 312 移到 625,模型离拐点更远了,带宽约束一点没变。

这条推论有个直接含义:端侧稀疏设计的目标是压缩率,不是稀疏率。把 2:4 换成 1:4,非零值再少一半,压缩率能从 1.6 倍提到 2.4 倍,但如果硬件只支持 2:4,多出来的稀疏度换不到任何东西。

压缩比是 1.6 倍不是 2 倍

2:4 的存储格式不是只存两个值。每四个权重一组,组内要记两个非零值的位置,4 个位置里选 2 个,需要 2 比特编码一次,两个索引共 4 比特。int8 权重下,四个权重原始占 32 比特,稀疏后是两个 8 比特值加 4 比特索引,20 比特。压缩比 32/20,1.6 倍。

图 2 同一份权重在四种存储方式下的比特开销,索引的 4 比特在低位宽下占比抬升,压缩比从 1.6 倍掉到 1.33 倍(依据原文第 4 节绘制)

索引开销是固定的 4 比特,与权重的位宽无关,这一点在量化之后变得要命。权重压到 4 比特,四个权重原始占 16 比特,稀疏后是两个 4 比特值加 4 比特索引,12 比特,压缩比 16/12,1.33 倍。索引占总开销的三分之一,稀疏的边际收益被量化吃掉了。

4 比特量化加 2:4 稀疏的组合,账面上是 32 比 12,2.67 倍;实际比的是同精度下的基准,16 比 12,1.33 倍。两个优化叠加时不能把各自的倍数相乘,这个错误在选型表里很常见。

实测卡在对齐和分布上

1.33 倍是理论上限,实测通常落在 1.3 倍附近,差距来自两处。

一处是访存粒度。LPDDR 的一次突发传输是 32 字节,稀疏块如果跨在突发边界上,硬件要么补零要么拆成两次读,有效压缩率打折。把稀疏块按 32 字节对齐,压缩率能从 1.33 掉到 1.2 附近,不对齐时更差。

另一处是稀疏度在层间的分布。剪枝算法给出的全局稀疏度是均值,个别层可能只剪掉两成,这些层成为关键路径,整体延迟由最慢的层决定。整个模型按 1.33 倍算出来的时间,被几层稀疏度不足的层拖回去,实测 1.3 倍已经是分布比较均匀的情况。

发表在 arXiv 上的那项工作把这件事做成了可视化模型。它把网络精度、稀疏度和理论加速比放进同一个平面,用解析模型预测稀疏网络的性能,不需要先实现和基准测试优化过的算子;作者给出的前提是,当对应的稠密与稀疏算子都做过充分优化时,理论加速比等于实测加速比。论文用多个视觉架构在不同稀疏模式和稀疏度上做了验证,两个案例分别面向算法侧和硬件侧:前者用来预测尚未实现的分块稀疏模式的性能,后者用来评估新稀疏模式和稀疏数据格式对硬件的影响。

这个前提值得留意。它把差距归到了算子实现上,而不是稀疏本身。端侧的现实是算子库由芯片厂商提供,稀疏算子往往只支持 2:4 这一种模式,且只在特定层类型上生效,模型结构一改,收益就掉。

端侧模型的实际尺寸

算到这里会有一个疑问:模型小到几百兆字节,压缩 1.3 倍省下的时间真的看得出来吗。

一个 3 亿参数的 int8 模型,权重 300 MB,端侧 LPDDR5 的 25.6 GB/s 读一遍要 11.7 毫秒。这个量级远大于算力时间:同样的模型每 token 约 6 亿次乘加,8 TOPS 下算 0.15 毫秒。解码阶段一次只出一个 token,权重必须整份读进来,时间几乎全花在带宽上,压缩 1.3 倍就是省 2.7 毫秒。

这个差距解释了为什么端侧大模型的优化重心在权重格式和访存路径,而不是乘加阵列。也解释了为什么 4 比特量化能带来接近 2 倍的实测提升:权重字节数减半,带宽账直接翻倍,不需要硬件支持任何稀疏模式。稀疏排在量化之后,收益小一个量级,工具链也远不如量化成熟。

稀疏该做在哪一层

把上面的账合起来,端侧稀疏的收益等于权重字节数的压缩率,与算力无关。这条判断给出一个明确的优先级:先压权重,再谈稀疏;先量化,再谈稀疏;两者叠加时,算总比特数,不算倍数乘积。

所有权重同等重要的假设也不成立。端侧模型的权重分布里,注意力层和嵌入层的敏感度差别很大,4 比特量化在这些层上的精度损失不能用同一套校准参数解决。稀疏提供了另一个维度:对精度敏感度低的层用更激进的稀疏度,敏感的层保留稠密。硬件支持不均匀稀疏度时,这条路能走;不支持时,模型结构必须迁就硬件的模式。

一句话:端侧的稀疏省的是带宽,上限由权重字节数的压缩比定,索引的 4 个比特决定了这个上限在低位宽下只有 1.33 倍。

内容来源:arXiv 预印本(开放获取)

原文标题:The Sparsity Roofline: Understanding the Hardware Limits of Sparse Neural Networks

作者:Cameron Shinn, Collin McCarthy, Saurav Muralidharan, Muhammad Osama, John D. Owens

DOI:10.48550/arXiv.2310.00496(arXiv:2310.00496v2,2023)

配图说明:图 1、图 2 均为自行绘制,为原理示意,非原文原图复制。

改动声明:本文为对开放获取文献的技术编译与解读,标题、行文与配图为原创。

来源:21ic电子网

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭