第一章:矩阵乘法单元概述
1.1 深度学习中的矩阵运算
做深度学习加速器这么多年,我越来越觉得——矩阵乘法就是整个神经网络的心脏。你想想看,无论是卷积、全连接,还是注意力机制,底层全在干同一件事:矩阵乘矩阵,或者矩阵乘向量。
举个例子,一个典型的卷积层,输入是特征图,权重是卷积核。展开以后呢?其实就是矩阵乘法。全连接层更直接,输入向量乘权重矩阵。Transformer里的自注意力,Q乘K,再乘V,本质上还是矩阵乘法。
我在项目中遇到过这样一个场景:某次做MobileNet的加速,发现卷积层占了90%的计算量。但仔细一分析,这些卷积全都可以转化成矩阵乘法。说白了,你把加速器做好了矩阵乘法,就等于做好了90%的加速工作。
常见的矩阵运算类型包括:
- 通用矩阵乘法(GEMM):C = A × B,最基础也最核心
- 批量矩阵乘法(Batched GEMM):一次处理多个小矩阵,Transformer里很常见
- 稀疏矩阵乘法:剪枝后的模型,大量权重是0,需要特殊处理
- 混合精度矩阵乘法:INT8乘INT8,或者FP16乘FP16,甚至混合精度
核心观点:深度学习加速器本质上就是一个专门做矩阵乘法的机器。其他操作(激活、池化、归一化)都是辅助,矩阵乘法才是主角。
1.2 加速器架构概览
嗯,这里我要先讲清楚一个概念。加速器不是CPU,也不是GPU,它是专门为矩阵运算设计的硬件。我习惯把加速器架构分成三个层次:
第一层:计算引擎。这就是矩阵乘法单元本身,通常由多个乘累加器(MAC)阵列组成。我记得最早做设计时,一个16×16的MAC阵列就觉得很大了。现在呢?256×256都不稀奇。
第二层:存储层次。加速器最怕什么?怕数据喂不饱计算单元。所以存储设计很关键。一般有三级:片外DRAM、片上SRAM(也叫全局缓冲区)、寄存器文件。每一级的速度和容量都要平衡好。
第三层:控制与数据流。数据怎么搬?计算怎么调度?这决定了加速器的效率。常见的架构有:
| 架构类型 | 特点 | 典型代表 |
|---|---|---|
| 脉动阵列 | 数据像流水一样在阵列中流动,控制简单 | Google TPU |
| 空间阵列 | 每个PE独立控制,灵活性高 | NVDLA |
| SIMD阵列 | 单指令多数据,适合规则运算 | 很多NPU |
我曾经踩过一个坑:选型时觉得脉动阵列控制简单,就一股脑上了。结果发现数据复用模式跟模型不匹配,效率只有理论值的40%。后来改成混合架构才解决问题。所以架构选择一定要看你的目标模型。
1.3 矩阵乘法单元的地位与挑战
矩阵乘法单元(Matrix Multiply Unit,简称MMU)是整个加速器的核心。你可以把它想象成发动机,其他模块都是围绕它服务的。
为什么这么说?
- 面积占比最大:通常MMU占芯片面积的50%-70%。我做过一个7nm的芯片,MMU占了60%的面积,剩下的才是缓存、控制、接口。
- 功耗大头:矩阵乘法是计算密集型的,功耗占比同样很高。我记得有一次做功耗分析,MMU的功耗占了总功耗的75%。
- 性能瓶颈:整个系统的吞吐量,最终取决于MMU能跑多快。数据搬运再快,MMU算不过来也是白搭。
个人经验:设计MMU时,我建议先做性能建模。用Python或者SystemC搭一个cycle-accurate的模型,跑一下目标网络,看看瓶颈在哪。别一上来就写RTL,那样改起来太痛苦了。
但MMU的设计挑战也很大。我总结了几点:
挑战一:数据复用。矩阵乘法涉及三个数据流:输入A、输入B、输出C。怎么让数据在阵列中高效复用,减少片外访问?这需要精心设计数据流。我曾经见过一个设计,计算效率很高,但数据搬运太频繁,最终性能反而不如一个慢一点但数据复用好的设计。
挑战二:精度与位宽。深度学习模型越来越倾向于低精度计算。INT8、INT4甚至二值化。但低精度意味着更小的动态范围,容易溢出或精度丢失。怎么在硬件上支持多种精度?怎么保证精度不损失?这些都是难题。
挑战三:稀疏性利用。剪枝后的模型,权重矩阵里有很多0。如果还按稠密矩阵算,浪费计算资源。但稀疏矩阵的硬件支持很复杂,需要设计专门的索引和跳过逻辑。我有个同事做过稀疏加速器,性能提升很可观,但面积也翻了一倍。
避坑指南:我曾经在项目里盲目追求高并行度,把MMU设计成512×512的阵列。结果发现很多小模型根本用不满,反而因为布线太长导致时序收敛困难。后来我学乖了,采用可配置的阵列大小,小模型用部分阵列,大模型用全部。灵活多了。
最后说一句,矩阵乘法单元的设计,本质上是在面积、功耗、性能、精度之间做权衡。没有完美的设计,只有最适合你目标场景的设计。做这行十几年了,我最大的体会就是:先搞清楚你的模型要什么,再动手设计硬件。
下一章,我会详细讲矩阵乘法单元的内部微架构设计,包括MAC阵列的组织方式、数据流的选择、以及如何做性能评估。到时候我会拿一个实际的项目案例来拆解,保证干货满满。