结构化稀疏与剪枝:2:4 稀疏模式为何能让 GPU 矩阵吞吐翻倍
更新时间:2026-09-25。配套的存储侧讨论见上一篇 稀疏矩阵存储格式——那里回答「零怎么存」,本篇回答「零怎么长出来、长成什么样硬件才买账」。深度学习模型一年比一年大,端侧和数据中心都盯着同一笔账:权重里有大量参数对输出贡献很小,把它们置零(剪枝,pruning)能不能换来更小的模型、更快的推理?答案出人意料地分裂:随便置零,压缩账很好看,GPU 却几乎不加速;按规则置零,压缩率打折,硬件反而直接给出近两倍吞吐。分裂的根源不在算法,而在 张量核心与矩阵加速 对输入形状的硬性要求。稀疏与 INT8/INT4 量化与校准 是工业界最常用的两板斧,经常叠加使用。
本文要回答的问题
- 剪枝为什么能压缩模型?非结构化稀疏(任意位置置零)压缩率最高,为什么在 GPU 上常常一点都不加速?
- 2:4 稀疏模式的具体约束是什么?为什么从 Ampere 架构开始,它能让矩阵乘拿到接近 2 倍的吞吐?
- 通道剪枝、块剪枝和 2:4 稀疏各自牺牲什么、换来什么?
- 训练时怎样「学」出一个满足结构约束的稀疏网络?mask、straight-through estimator 分别解决什么问题?
- 稀疏化掉多少精度,又靠什么手段把精度恢复回来?真实模型上的加速和精度数字大概是多少?
一、剪枝的基本账:从零的数量到零的位置
剪枝的出发点是一个被反复验证的观察:训练好的神经网络里,权重的绝对值分布严重不均,大量权重接近零,把它们直接置成 0,网络输出几乎不变。最简单的做法是幅值剪枝(magnitude pruning):给定稀疏率(sparsity,零元素占比),把绝对值最小的那部分权重置零。一个稀疏率 50% 的稠密层,参数和乘法数量理论上都减半。
但「理论上减半」要兑现成真实加速,需要两个条件同时成立:第一,零不参与运算,硬件真的跳过这些乘法;第二,跳过零之后,剩下的计算依然保持硬件喜欢的规整形状。第一个条件要求内核知道零在哪,第二个条件才是真正的分水岭。权重压缩只需要「零不占地方」,而加速需要「零的分布让调度器能够预先排好稠密的计算块」——这两件事对零的位置提出了完全不同的要求。
零的位置按规则程度可以排成一个谱系:零可以出现在任意位置(非结构化,unstructured);可以被约束在每连续 4 个元素一组的小组里(2:4 细粒度结构化);可以按整块出现(block sparse);最粗可以整条通道一起消失(通道/滤波器剪枝,channel/filter pruning)。规则性越强,可压缩的上限越低——毕竟你在强迫一部分本来不该为零的权重陪绑——但硬件能兑现的加速比例越高。结构化稀疏(structured sparsity)这个词,指的就是谱系中后段那些「零的位置满足预设模式」的剪枝方式。
二、非结构化稀疏:压缩冠军,加速困难户
先看谱系最左端。非结构化稀疏对零的位置没有任何约束,剪枝算法拥有完全的自由度:每个权重独立地按幅值去留。因此在给定精度损失下,它总能给出最高的稀疏率——现代大模型做到 80% 甚至 90% 以上的非结构化稀疏、任务指标基本不掉,是很常见的报告结果。配合 稀疏矩阵存储格式 里的 CSR/COO,模型文件确实可以压缩数倍。
问题出在计算侧。可以把一个 50% 非结构化稀疏的权重矩阵想象成一块随机挖洞的奶酪:每个 4×4 小块里零的位置都不同,没有任何一个子矩阵是整块稠密的。通用矩阵乘(GEMM)在 GPU 上的执行方式是把矩阵切成固定形状的 tile(比如 16×16),送进张量核心整块吞吐;随机挖洞意味着没有任何一个 tile 可以整块跳过,内核只能退化成稀疏内核——逐个读出非零元素、带上列索引、动态决定它和哪个激活相乘。这套动作有三重损耗:每个非零元都要额外读索引;warp 内不同线程面对的零位置不同,访存和分支发散;更致命的是张量核心完全用不上,而它贡献了现代 GPU 矩阵算力的绝大部分。
实际测量很说明问题。非结构化稀疏率即便达到 90%,在通用 GPU 上跑未经专门优化的稠密形状 GEMM,端到端加速常常只有 1.1~1.5 倍,稀疏率不到 70% 时甚至可能因为索引开销反而更慢;只有在专门的稀疏内核、特定形状和批大小下,才能拿到接近理论值的加速。在 CPU 上情况略好——VNNI、AVX-512 的稀疏配合以及推理引擎的块稀疏内核,可以在高稀疏率下兑现可观收益;专用 NPU 则常有为任意稀疏设计的零跳过电路。但在 GPU 训练和主流推理场景,「压缩了但没加速」是非结构化稀疏的常态。结论不是它没用——模型分发、显存容量、带宽受限场景它依然值钱——而是要区分清楚:你买的到底是容量还是吞吐。
三、2:4 结构化稀疏:为张量核心量身定做的模式
2:4 稀疏(也叫 2-of-4 或 fine-grained structured sparsity)把自由度收窄到一个极小的局部:把权重按连续 4 个元素分组,每组里恰好保留 2 个、剪掉 2 个,即每组 50% 稀疏率。注意约束是逐组独立的,组与组之间保留哪两个位置可以不同——下图对比了同一段权重在三种模式下的形态,深色为保留权重:
为什么这么小的约束会带来质变?关键在硬件实现。NVIDIA 从 Ampere 架构(A100、RTX 30 系列,2020 年)开始在张量核心的数据通路里加入了稀疏支持:权重矩阵先按 2:4 模式压缩存储——每组只存 2 个非零值,外加每元素 2 比特的位置索引(4 选 2 共 6 种组合,2 比特编码配合查表);矩阵乘执行时,硬件在一拍之内把 2 个压缩元素「展开」回 4 个位置与激活相乘。由于每组只有固定 2 个有效元素,同一条矩阵指令处理的有效权重组数翻倍,等效矩阵吞吐直接翻倍。官方给出的数字是结构化稀疏矩阵乘最高约 2 倍加速,且调用接口与稠密 GEMM 基本一致(cuSPARSELt 等库负责压缩和内核选择)。Hopper、Ada、Blackwell 各代延续并扩展了这一机制。
2:4 的精妙之处是折中拿捏得极准。50% 的稀疏率足以带来实打实的容量和带宽收益;约束只在 4 元素的极小窗口内生效,剪枝自由度仍然很大,权重可以在每个微小组内自由选择保留谁,精度损失远小于粗粒度模式;而 2 比特的索引极小,硬件展开电路简单到可以直接做进数据通路。它不是压缩率最高的方案,却是「硬件几乎不增加成本就能把加速兑现」的方案。限制也要清楚:稀疏只作用于权重(激活不稀疏),且主要覆盖矩阵乘的权重操作数;GEMM 形状需要满足一定的维度对齐;小批大小、算子以访存为主时端到端收益会缩水,整体推理加速实测通常在 1.3~1.8 倍之间,而不是内核峰值的 2 倍。
四、块稀疏与通道剪枝:更粗的规则,更通用的加速
2:4 向右,规则性继续加强。块稀疏(block sparsity)把权重矩阵切成 B×B(或 M×N 的矩形块),整块一起剪或一起留。它的好处在存储篇已经算过:块索引均摊极低,非零块内部完全稠密,可以直接调用稠密 GEMM 内核或张量核心指令,不需要专用硬件——任何 GPU、CPU、推理引擎都能加速,这是它比 2:4 更通用的地方。很多稀疏注意力、MoE 路由后的专家计算也采用块掩码。代价是剪枝粒度粗:一个块里只要有几个权重重要,整块都得保留,同等精度下稀疏率明显低于非结构化方案;块越大差距越大。
通道剪枝(channel pruning,对卷积滤波器也称 filter pruning)走到最粗粒度:直接删掉整个输出通道及其对应的卷积核,或者整个注意力头、整层神经元。它产出的网络在结构上就是一个更小的稠密网络——不需要任何稀疏内核、不需要索引、不依赖任何新一代硬件,删掉的通道对应更少的输出张量和中间激活,显存、带宽、计算全部等比例下降,是端侧部署最干净的方案。MobileNet 之后大量轻量化网络都可以看作「结构设计阶段的剪枝」。它的代价也最大:通道是高维耦合的结构,硬删 30% 通道往往带来数个百分点的明显精度下跌,必须配合微调恢复,且冗余度低的小模型(如检测、分割的骨干尾部)几乎没有剪枝空间。
把三种模式放到同一张决策表里:
| 维度 | 非结构化稀疏 | 2:4 结构化稀疏 | 通道/滤波器剪枝 |
|---|---|---|---|
| 零的约束 | 任意位置 | 每连续 4 个保留 2 个 | 整条通道/滤波器消失 |
| 可达到的稀疏率 | 最高,80%~95% 常见 | 固定 50% | 取决于通道冗余,常见 20%~50% 通道 |
| 理论压缩 | 最高 | 约 2 倍(含 2 比特索引) | 与剪枝比例等比,无索引 |
| GPU 实际加速 | 常仅 1.1~1.5 倍,需专用稀疏内核 | 矩阵乘近 2 倍,端到端约 1.3~1.8 倍,需 Ampere 及以后 | 任意硬件稠密加速,约 1.2~1.7 倍 |
| 精度损失 | 最小 | 小,多数模型 <1 个百分点 | 较大,需充分微调 |
| 硬件要求 | 稀疏内核或零跳过电路 | 支持 2:4 的张量核心 | 无特殊要求,输出就是小稠密网络 |
| 典型场景 | 模型压缩分发、带宽受限 | 数据中心训练/推理 | 端侧、边缘部署 |
五、怎样训练出稀疏网络:mask、幅值剪枝与 STE
给定结构约束,剩下的问题是怎么让网络在约束下学会任务。训练流程一般包含三个要素:掩码(mask)、剪枝准则、梯度估计。
掩码是一个与权重同形状的 0/1 矩阵,实际参与前向计算的是 W ⊙ M。被剪掉的位置权重数值可能还在,但乘上掩码后输出恒为零;反向传播时零位置也不接收有效梯度。训练真正更新的是「幸存权重」的数值。剪枝准则解决「谁死谁活」:最常用的仍是幅值——按结构单元(单个权重、2:4 分组里的 4 选 2、整个块或通道的范数)排序,去掉贡献最小的。2:4 模式下做法极其直接:每组 4 个权重按绝对值排序,保留前 2 名。也有基于一阶梯度、二阶梯度(Fisher 信息、Hessian 近似)或可学习门控分数的更贵准则,在冗余度低的模型上能多挤出一些精度。
训练节奏上有两条主流路线。一次性剪枝加微调(prune once and fine-tune):先正常训练稠密模型,按准则生成掩码,然后固定掩码继续训练,让幸存权重补偿被删掉的容量,这条路线简单稳定,是工程默认。渐进式剪枝(gradual pruning):在训练过程中分多次、从低稀疏率逐步提高到目标稀疏率,每次剪完都给网络一段适应期,NVIDIA 的 ASP(Automatic SParsity)工具在 2:4 上就采用这类流程,通常精度更高。还有从零稀疏训练(sparse training from scratch)和软权重增长(剪了再允许部分权重长回来的 RigL 一类动态掩码),研究性质更强。
这里有一个必须讲清的技术细节:掩码操作本身不可导。前向是二值选择 M∈{0,1},反向时按定义梯度为零,剪枝决策无法学习。straight-through estimator(STE,直通估计器)的处理是「前向按规则离散化、反向假装离散化不存在」:前向使用阈值化后的硬掩码,反向时让梯度原样穿过多数通过区间(常用 clip 到 [-1,1] 的近似),于是分数参数仍能收到梯度、被优化。当剪枝准则是固定的幅值排序时不一定需要显式 STE——直接对幸存权重做普通反向传播即可;但只要想让「保留概率/结构分数」本身可学习(可学习通道门控、基于分数的块选择),STE 或 Gumbel-Softmax 之类的梯度技巧就是必需品。
六、精度损失、恢复手段与真实数字
最后补齐精度账。先给一组有代表性的量级(不同模型、任务、复现条件差异不小,只看数量级):2:4 结构化稀疏对稠密基线的精度损失,在 ResNet-50 这一类成熟视觉模型的 ImageNet 上通常在 0.5~1.5 个百分点 top-1 以内,配合充分微调不少报告能压到 0.3 个点上下;BERT 这类中等规模语言模型,下游 GLUE 任务平均掉点也常在 1% 以内;大语言模型对 2:4 相对鲁棒,配合继续预训练式的少量恢复训练,困惑度和评测损失可以做到很小。非结构化稀疏在 80% 稀疏率下精度损失通常比 2:4 更小,但到 95% 以上也会明显跳水。通道剪枝 30%~50% 通道时,轻量网络掉 1~3 个点是常态,恢复难度最高。
精度恢复的手段基本是固定几板斧。第一是知识蒸馏(distillation):用未剪枝的稠密模型当老师,让稀疏学生同时拟合任务标签和老师的软输出/中间特征,这对通道剪枝尤其有效,常常能补回大半掉点。第二是学习率预热与较长的微调周期——剪枝初期损失会有一个突跳,需要足够的步数让幸存权重重新平衡,学习率宜小不宜大。第三是逐层或分块剪枝而非一刀全切,并配合每层敏感度分析:对剪枝敏感的层(第一层、最后分类头、注意力输出投影)保留更密,冗余高的层(中间 MLP、靠后的卷积)剪更狠,按层分配稀疏预算几乎总比全局一刀切好。第四是量化协同:2:4 与 INT8/INT8、权重 INT4 叠加使用时,校准数据和恢复训练要联合做,顺序通常是先剪枝恢复、再量化校准,避免两种扰动同时砸向模型;具体做法见 INT8/INT4 量化与校准。
落地时还要对端到端数字保持诚实:内核 2 倍不等于服务 2 倍。矩阵乘之外还有归一化、注意力中的 softmax、元素级算子、数据加载和调度,Amdahl 定律决定了上限;批大小小、序列短、模型已处于访存受限时,2:4 的实测收益可能只有 10%~30%。因此合理的工程顺序是:先用 profiler 确认 GEMM 占时间的大头,再用 ASP/cuSPARSELt 一类工具完成 2:4 剪枝与内核接入,最后以端到端延迟和任务精度双指标验收——稀疏率从来只是中间指标,不是目的。
这一篇在知识体系里的位置
- 存储配套:稀疏矩阵存储格式——COO/CSR/块稀疏怎么存零,以及 SpMV 的带宽账;
- 硬件基础:张量核心与矩阵加速——2:4 翻倍吞吐所依赖的矩阵指令单元;
- 协同优化:INT8/INT4 量化与校准——与剪枝叠加的另一板斧及联合校准顺序。
总结
剪枝的分水岭不是剪掉多少零,而是零的位置是否规则:非结构化稀疏自由度最高、压缩率可达 80%~95% 且精度损失最小,但随机挖洞使任何 tile 都无法整块跳过、张量核心用不上,GPU 实测往往只加速 1.1~1.5 倍;2:4 结构化稀疏要求每连续 4 个权重恰好保留 2 个,以固定 50% 稀疏率和极小的 2 比特位置索引,换来 Ampere 起张量核心数据通路的硬件展开、矩阵乘近 2 倍吞吐,端到端常见 1.3~1.8 倍而精度损失多在 1 个百分点内;块稀疏无需专用硬件即可走稠密内核,通道剪枝干脆产出更小的稠密网络、最适合端侧但掉点最多。训练上靠掩码固定结构、幅值或范数排序决定去留、STE 让结构分数可学习,再经一次性或渐进式剪枝加微调、蒸馏与分层敏感度分配恢复精度。规则性才是硬通货——压缩兑现的是容量,只有规则模式才能把稀疏兑现成吞吐。