前言

本系列是我在做人工智能高性能推理的工作中一些经验、思考和感悟,主要针对的范畴是深度神经网络的高性能推理,多以 CPU Arm 环境为例,但在 x86、 GPU 环境下一般也同样适用。

正文

在做高性能推理的过程中,经常会遇到的问题莫过于“天花板”这个概念了。与很多其他类型的开发不同,高性能的开发经常会遇到“天花板”,即某个方向的工作带来的效果是有尽头的。

CPU 的单核性能,在给定具体的执行型号后,是存在最大值的,有人把这个值称为 SOL Speed Of Light。因为当频率、SIMD lane、cacheline 大小、操作数大小、指令吞吐等指标全都固定的时候,所有的 CPU 时间全都用来计算、系统没有任何 overhead 下所能达到的计算性能,就像光速一样,可望而不可及,更不可能超过它。

CPU 的多核性能无非就是数倍于单核性能,减去一些同步资源的 overhead 而已,也是同理。

存储系统也有显著的天花板,在实际的计算场景中,现在我们遇到的更多是 memory bound,即受限于存储性能,或称更快的达到存储性能的天花板,而不是优先到达计算的天花板。存储系统的天花板来自很多因素,既有主存储的 bus 读写速度的上限(要计算那么多数据,至少要读出来,有时候读的时间都比算的时间长),也有多级缓存的换入换出的上限(如果在最高效的换入逻辑下没有相匹配的计算吞吐,那么本质上也还是在等待存储 miss 的时间)。

在《理解阿姆达尔定律》一篇中,我也提到了另一个类型的天花板:任务流程的天花板。如果一个完整的任务的链条太长,那么就算我们能够如愿把某个环节优化到极致,最终也不能保证任务一定能满足要求。例如我们关注帧率,整个任务从摄像头采集开始,涉及图像空间转换、AI 计算、多个 GPU 特效渲染,最终上屏可能还要加上 HDR 等等画质优化,那么在目标帧率下,在这个链条中的每个环节都有着耗时要求的天花板。

面对这些天花板,在开展高性能推理的工作时,我常常会涌现出两种对立的情绪,一方面特别专注、像打鸡血一样去抠一些细节,力图能够往 SOL 百尺竿头更进一步;另一方面,也会对推理在整体任务中的角色感到沮丧,推理工程师能做的其实只是尽力发挥并达到预期内的性能,但是,算法的、特效的工程师们想要做到的很多东西,在整体任务的限制下本就达不到,我们推理的真正提升,最终会发现其实是来自于摩尔定律、来自于硬件架构变更、来自于存储部件的规模化和成本降低,来自于芯片行业上下游的架构演进。但是,即便成功演进了有了更好的运行环境,我们仍然面临着非常严酷的存量兼容的代码维护。

这里又是一个新的天花板。成功迭代的新技术能够带来提升,但是新技术的市场占有率是很低的,因此去追逐新技术,带来的提升也有显著的天花板,甚至在庞大的存量部署下,如泥牛入海,看不到成果。

明确地看着天花板,然后一次又一次地跳向他,一次又一次地越过昨天的自己,这就是推理工程师的道路。

By Mr. 橘

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注