1. 从三个“神秘数字”说起:为什么算法工程师必须懂它们?
如果你和我一样,在AI模型部署这条路上摸爬滚打过几年,肯定遇到过这种场景:辛辛苦苦训练出一个准确率爆表的模型,兴冲冲地准备把它塞进手机或者摄像头里,结果一上线,画面卡成PPT,或者设备烫得能煎鸡蛋。这时候,老板、产品经理、硬件工程师的目光齐刷刷地看向你,仿佛在问:“你这模型,是不是有点‘胖’?”
问题的根源,往往不在于算法本身不优秀,而在于我们对模型的“体质”了解不够。这个“体质”,就是由三个核心指标来衡量的:FLOPs、MACs和Params。很多人觉得这些是论文里才需要写的理论数字,离实际工作很远。但根据我这些年的实战经验,恰恰相反,它们是连接算法理论与硬件现实的生命线。不懂它们,模型优化和部署就像蒙着眼睛走钢丝。
让我用大白话解释一下这三个家伙到底是什么:
- FLOPs:你可以把它想象成模型的“总运动量”。它统计的是模型做一次前向推理(比如识别一张图片)需要完成多少次浮点数运算(加、减、乘、除等)。这个数字越大,说明模型越“累”,理论上需要更强的“心脏”(计算芯片)才能跑得动。
- MACs:这是FLOPs的一个“好兄弟”,特指“乘加运算”的次数。在深度学习的计算里,最核心、最耗时的操作往往就是“乘完再加”(比如卷积、全连接层)。所以,1次MACs大约等于2次FLOPs。很多硬件(特别是为AI设计的芯片)会直接以每秒能完成多少MACs(即TOPS,万亿次操作/秒)来标称自己的算力。理解MACs,就是直接在和硬件对话。
- Params:这个最好理解,就是模型的“体重”。它指的是模型所有需要学习的参数总数,也就是权重和偏置的数量。参数量直接决定了模型文件的大小,以及运行时需要占用多少内存(RAM)。一个“体重”过大的模型,在内存有限的设备上根本加载不起来。
所以,当你拿到一个模型,看到它的FLOPs是10G(100亿次运算),MACs是5G,Params是50M(5000万个参数)时,你脑子里应该立刻能勾勒出一个大致的画像:这是一个计算量中等偏大、参数量也不小的模型,可能适合服务器,但直接丢给手机芯片会很吃力。
接下来的内容,我会带你把这几个数字从纸面理论,一路玩转到实际硬件上。我们会一起用工具算、动手估、上真机测,看看理论计算量和实际推理速度之间到底有多大差距,以及如何利用这些知识,给你的模型“减肥增肌”,为它挑选最合适的“跑鞋”(硬件平台)。
2. 理论计算:亲手拆解模型的计算与内存账单
光知道定义不行,我们得会算。这部分我们抛开那些复杂的公式,用最直观的方式,给模型做个“财务审计”,看看它的计算(FLOPs/MACs)和内存(Params)开销都花在了哪里。
2.1 核心层级的计算量拆解:以卷积和全连接为例
我们拿最常用的卷积层和全连接层开刀。别怕,计算其实很简单。
卷积层:想象一下,一个卷积核就像个小刷子,在输入特征图上滑动。每次滑动到一个位置,就做一次“局部点乘再求和”的操作。
- FLOPs计算:对于一个卷积层,其FLOPs ≈
输出特征图高 * 输出特征图宽 * 卷积核高 * 卷积核宽 * 输入通道数 * 输出通道数 * 2。为什么要乘以2?因为一次“乘加”算作两次浮点操作(一次乘,一次加)。 - MACs计算:更直接,MACs ≈
输出特征图高 * 输出特征图宽 * 卷积核高 * 卷积核宽 * 输入通道数 * 输出通道数。看,正好是FLOPs的一半,印证了1 MAC ~ 2 FLOPs的关系。 - 举个例子:输入是
224x224x3的图片,用3x3卷积核,输出224x224x64个特征图。那么这一层的MACs大约是224*22

63

被折叠的 条评论
为什么被折叠?



