⾃动驾驶的算⼒(TOPS)谎⾔
当前,⾃动驾驶运算系统正在进⼊⼀场算⼒的竞赛中,特斯拉刚以⾃研的达到72TOPS算⼒、业内最强的FSD/HW3.0升级HW2.5不久,英伟达最新推出的芯⽚系统达到了2000TOPS的惊⼈算⼒。然⽽,⾃动驾驶⾸要确保的安全性和算⼒并没有直接关系,即便1000E(T的百万倍)OPS也达不到L4级别,这只是硬件⼚家的数字游戏⽽已,内⾏⼈从不当真。
这些所谓⾼算⼒实际针对乘积累加运算的⾼算⼒。乘积累加运算(英语:MultiplyAccumulate, MAC)。这种运算的操作,是将乘法的乘积结果和累加器 A 的值相加,再存⼊累加器:
若没有使⽤ MAC 指令,上述的程序需要⼆个指令,但 MAC 指令可以使⽤⼀个指令完成。⽽许多运算(例如卷积运算、点积运算、矩阵运算、数字滤波器运算、乃⾄多项式的求值运算,基本上全部的深度学习类型都可以对应)都可以分解为数个 MAC 指令,因此可以提⾼上述运算的效率。
之所以说⾃动驾驶的安全性和TOPS算⼒并没有直接关系基于三点。
⼀、这些所谓的⾼算⼒实际都只是乘积累加矩阵运算算⼒,只是对应深度学习算法的,只对应向量。深度学习是⼀种⾮确定性算法,⽽车辆安全需要确定性算法来保障。⼈⼯智能只是锦上添花,最终还是需要确定性算法把守安全底线。⽽确定性算法不靠乘积累加运算算⼒,它通常是标量运算,也就是更多依赖CPU的运算,那些所谓的⾼TOPS算⼒毫⽆意义。
⼆、深度学习视觉感知中⽬标分类与探测(detection)是⼀体的,⽆法分割。也就是说,如果⽆法将⽬标分类(classifer,也可以通俗地说是识别)就⽆法探测。换句话说,如果⽆法识别⽬标就认为⽬标不存在。车辆会认为前⽅⽆障碍物,会不减速直接撞上去。训练数据集⽆法完全覆盖真实世界的全部⽬标,能覆盖50%都已经是很神奇的了,更何况真实世界每时每刻都在产⽣着新的不规则⽬标。特斯拉多次事故都是如此,⽐如在中国两次在⾼速公路上追尾扫地车(第⼀次致⼈死亡),在美国多次追尾消防车。还有⽆法识别车辆侧⾯(⼤部分数据集都只采集车辆尾部图像没有车辆侧⾯图像)以及⽆法识别⽐较⼩的⽬标。TOPS算⼒⾼只是缩短能识别⽬标的识别时间,如果⽆法识别,还是毫⽆价值。
三,⾼TOPS都是运算单元(PE)的理论值,⽽⾮整个硬件系统的真实值。真实值更多取决于内部的SRAM、外部DRAM、指令集和模型优化程度。最糟糕的情况下,真实值是理论值的1/10算⼒甚⾄更低。
深度学习的不确定性
深度学习分为训练和推理两部分,训练就好⽐我们在学校的学习,但神经⽹络的训练和我们⼈类接受教育的过程之间存在相当⼤的不同。神经⽹络对我们⼈脑的⽣物学——神经元之间的所有互连——只有⼀点点拙劣的模仿。我们的⼤脑中的神经元可以连接到特定物理距离内任何其它神经元,⽽深度学习却不是这样——它分为很多不同的层(layer)、连接(connection)和数据传播(data propagation)的⽅向,因为多层,⼜有众多连接,所以称其为神经⽹络。
训练神经⽹络的时候,训练数据被输⼊到⽹络的第⼀层。然后所有的神经元,都会根据任务执⾏的情况,根据其正确或者错误的程度如何,分配⼀个权重参数(权重值)。在⼀个⽤于图像识别的⽹络中,第⼀层可能是⽤来寻图像的边。第⼆层可能是寻这些边所构成的形状——矩形或圆形。第三层可能是寻特定的特征——⽐如闪亮的眼睛或按钮式的⿐⼦。每⼀层都会将图像传递给下⼀层,直到最后⼀层;最后的输出由该⽹络所产⽣的所有这些权重总体决定。
经过初步(是初步,这个是隐藏的)训练后得到全部权重模型后,我们就开始考试它,⽐如注⼊神经⽹络⼏万张含有猫的图⽚(每张图⽚都需要在猫的地⽅标注猫,这个过程⼀般是⼿⼯标注,也有⾃动标注,但准确度肯定不如⼿⼯),然后拿⼀张图⽚让神经⽹络识别图⽚⾥的是不是猫。如果答对了,这个正确会反向传播到该权重层,给予奖励就是保留,如果答错了,这个错误会回传到⽹络各层,让⽹络再猜⼀下,给出⼀个不同的论断这个错误会反向地传播通过该⽹络的层,该⽹络也必须做出其它猜测,⽹络并不知道⾃⼰错在哪⾥,也⽆需知道。在每⼀次尝试中,它都必须考虑其它属性——在我们的例⼦中是「猫」的属性——并为每⼀层所检查的属性赋予更⾼或更低的权重。然后它再次做出猜测,⼀次⼜⼀次,⽆数次尝试……直到其得到正确的权重配置,从⽽在⼏乎所有的考试中都能得到正确的答案。
得到正确的权重配置,这是⼀个巨⼤的数据库,显然⽆法实际应⽤,特别是嵌⼊式应⽤,于是我们要对其修剪,让其瘦⾝。⾸先去掉神经⽹络中训练之后就不再激活的部件。这些部分已不再被需要,可以被「修剪」掉。其次是压缩,这和我们常⽤的图像和视频压缩类似,保留最重要的部分,如今模拟视频⼏
乎不存在,都是压缩视频的天下,但我们并未感觉到压缩视频与原始视频有区别。
深度学习的关键理论是线性代数和概率论,因为深度学习的根本思想就是把任何事物转化成⾼维空间的向量,强⼤⽆⽐的神经⽹络,说来就是⽆数的矩阵运算和简单的⾮线性变换的结合。在19世纪中期,矩阵理论就已经成熟。概率论在18世纪中期就有贝叶斯,在1900年俄罗斯的马尔科夫发表概率演算,概率论完全成熟。优化理论主要来⾃微积分,包括拉格朗⽇乘⼦法及其延伸的KKT,⽽拉格朗⽇是18世纪中叶的法国数学家。RNN则和⾮线性动⼒学关联甚密,其基础在20世纪初已经完备。⾄于GAN⽹络,则离不开19世纪末伟⼤的奥地利物理学家波尔兹曼。强化学习的理论基础是1906年俄罗斯数学家马尔科夫发表的弱⼤数定律(weak law of large numbers)和中⼼极限定理(central limit theorem),也就是马尔科夫链。
可以说深度学习所需要的理论基础在100年前已经基本齐全(概率和信息论略微不⾜,在20世纪60年代补齐),现在的深度学习只是从理论⾛向实⽤,这当中最关键的推⼿就是GPU的⾼TOPS算⼒,是英伟达的GPU造就了深度学习时代的到来,深度学习没有理论上的突破,只是应⽤上的扩展。经过压缩后,多个神经⽹络层被合为⼀个单⼀的计算。最后得到的这个就是推理Inference⽤模型或者说算法模型。
实际深度学习就是靠蛮⼒计算(当然也有1X1卷积、池化等操作降低参数量和维度)代替了精妙的科学。深度学习没有数学算法那般有智慧,它知其然,不知其所以然,它只是概率预测,它⽆法具备确定
性。所以在⽬前的深度学习⽅法中,参数的调节⽅法依然是⼀门“艺术”,⽽⾮“科学”。深度学习⽅法深刻地转变了⼈类⼏乎所有学科的研究⽅法。以前学者们所采⽤的观察现象,提炼规律,数学建模,模拟解析,实验检验,修正模型的研究套路被彻底颠覆,被数据科学的⽅法所取代:收集数据,训练⽹络,实验检验,加强训练。这也使得算⼒需求越来越⾼。机械定理证明验证了命题的真伪,但是⽆法明确地提出新的概念和⽅法,实质上背离了数学的真正⽬的。这是⼀种“相关性”⽽⾮“因果性”的科学。历史上,⼈类积累科学知识,在初期总是得到“经验公式”,但是最终还是寻求更为深刻本质的理解。例如从炼丹术到化学、量⼦⼒学的发展历程。
深度学习的理论基础已经不可能出现⼤的突破,因为⽬前⼈类的数学特别是⾮确定性数学已经⾛⽕⼊魔了,有⼀本书叫《数学:确定性的丧失》说得⾮常好。
书中的⼀个⽐喻:在莱茵河畔,⼀座美丽的城堡(暗指德国哥廷根⼤学,曾经在200年⾥是全球数学研究中⼼,数学的圣地,⾮线性动⼒学圣地。希特勒执政后全球数学圣地转移⾄美国的普林斯顿⼤学)已经矗⽴了许多个世纪。在城堡的地下室中⽣活着⼀蜘蛛,突然⼀阵⼤风吹散了它们⾟⾟苦苦编织的⼀张繁复的蛛⽹,于是它们慌乱地加以修补,因为它们认为,正是蛛⽹⽀撑着整个城堡。⼩⾄四元数、负数、复数、矩阵,⼤⾄微积分、⾮欧⼏何,经验算术及其延展代数背后隐藏着深深困扰数学家的逻辑问题。然⽽,数学家们是在贡献概念⽽不是从现实世界中抽象出思想,这些概念却被证明越来越实⽤,数学家们变得越来越肆⽆忌惮。通过应⽤经验来修正理论逻辑,数学逐步失去了其先验性,变得越来越像
哲学甚⾄⽞学。
宝马L3/L4智能驾驶软件架构
宝马L3/L4主系统计算路径,Fallback系统监督主系统,当得知主系统计算的路径会发⽣事故或碰撞时,Fallback系统会切换为主系统,主系统使⽤⼈⼯智能的⾮确定性算法,Fallback系统使⽤经典的确定性算法来保证安全。
真假TOPS
推理领域,算⼒理论值取决于运算精度、MAC的数量和运⾏频率。⼤概可以简化为这样⼦,INT8精度下的MAC数量在FP16精度下等于减少了⼀半。FP32再减少⼀半,依次类推。其计算相当简单,假设有512个MAC运算单元,运⾏频率为1GHz,INT8的数据结构和精度(⾃动驾驶推理领域常见精度),算⼒为512 x 2 x 1 Gigahertz = 1000 Billion Operations/Second = 1 TOPS(Tera-Operations/second)。如果是FP16精度那么就是0.5TOPS。例如英伟达的Tesla
V100有640个Tensor核,每核有64个MAC运算单元,运⾏频率⼤约1.480GHz,那么INT8下算⼒为
640*64*2*1.480Gigahertz=121TOPS。但是Tesla V100的训练就使⽤CUDA核,有5120个CUDA核,双精度(FP64)下算⼒是另⼀种算法了。这个⽉刚发布的A100,有432个三代Tensor核,每个核包含512
个MAC运算单元(等同于64个双精度MAC),运⾏频率为1.41Gigahertz,INT8下算⼒为432*512*2*1.41Gigahertz=624TOPS。特斯拉的FSD是9216个MAC运算单元,运⾏频率是2GHz,INT8算⼒为9216*2*2GHz=36.86TOPS。
真实值和理论值差异极⼤。决定算⼒真实值最主要因素是内存( SRAM和DRAM)带宽,还有实际运⾏频率(即供电电压或温度),还有算法的batch尺⼨。例如⾕歌第⼀代TPU,理论值为90TOPS算⼒,最差真实值只有1/9,也就是
10TOPS算⼒,因为第⼀代内存带宽仅34GB/s。⽽第⼆代TPU下⾎本使⽤了HBM内存,带宽提升到600GB/s(单⼀芯⽚,TPU V2板内存总带宽2400GB/s)。最新的英伟达的A100使⽤40GB的2代HBM,带宽提升到1600GB/s,⽐V100提升⼤约73%。特斯拉是128 bitLPDDR4-4266 ,那么内存的带宽就是:
2133MHz*2DDR*128bit/8/1000=68.256GB/s。⽐第⼀代TPU略好(这些都是理论上的最⼤峰值带宽)其性能最差真实
2133MHz*2DDR*128bit/8/1000=68.256GB/s。⽐第⼀代TPU略好(这些都是理论上的最⼤峰值带宽)其性能最差真实值估计是2/9。也就是⼤约8TOPS。16GB版本的Xavier内存峰值带宽是137GB/s。
为什么会这样?这就牵涉到MAC计算效率问题。如果你的算法或者说CNN卷积需要的算⼒是1TOPS,⽽运算平台的算⼒是4TOPS,那么利⽤效率只有25%,运算单元⼤部分时候都在等待数据传送,特别是batch尺⼨较⼩时候,这时候存储带宽不⾜会严重限制性能。但如果超出平台的运算能⼒,延迟会⼤幅度增加,存储瓶颈⼀样很要命。效率在90-95%情况下,存储瓶颈影响最⼩,但这并不意味着不影响了,影响依然存在。然⽽平台不会只运算⼀种算法,运算利⽤效率很难稳定在90-95%。这就是为何⼤部分⼈⼯智能算法公司都想定制或⾃制计算平台的主要原因,计算平台⼚家也需要推出与之配套的算法,软硬⼀体,实难分开。
⽐如业内⼤名⿍⿍的ResNet-50,其需要MAC⼤约为每秒70亿次运算,英伟达TeslaT4运⾏ResNet-50每秒可处理3920张224*224的图像,3920 images/second x 7 BillionOperations/image = 27,440 Billion Operations/second = 27.4 TrillionOperations/Second = 27.4 TOPS。⽽英伟达Tesla T4的理论算⼒是130TOPS。实际只有27.4TOPS。
也有些软件改善内存瓶颈的⽅法,⽐如修改指令集,让权重值快速加载,提⾼数据复⽤率,减少频繁读取,例如华为曾经⽤过的寒武纪的IP。但最简单有效的解决⽅法还是提⾼内存带宽。
提⾼内存带宽有三种⽅法,⼀是缩短运算单元与存储器之间的物理距离,⼆是使⽤⾼带宽内存即HBM,三加⼤内存容量。注意上⽂所说的内存带宽都是理论上的带宽,实际带宽跟物理距离关系极为密切,物理距离远会让内存实际带宽下降不少,但具体数值还未有详细资料。
第⼀种⽅法最有效。物理距离最近的⾃然把存储器与运算单元制作在⼀个die⾥(⼀⼀级缓存和⼆级缓存),线宽可能只有1-2微⽶,但是存储器所占晶圆⾯积很⼤,⼯艺与运算单元也有⽐较⼤的差异,这样做会⼤幅度提⾼成本,因此⼤部分⼚家的in-die内存容量都很⼩。退⼀步,把存储器与运算单元制作在⼀个package⾥,⽬前台积电的CoWos⼯艺⼤约可以做到55微⽶( Micro-bump)。这是⽬前所有主流⼚家的选择,毕竟计算是针对数据中⼼的芯⽚也要优先考虑价格。最差的就是特斯拉和⾕歌第⼀代TPU使⽤PCB板上的内存( BGA),这样线宽⼤约1100-1500微⽶。缩短距离不仅能提⾼存储带宽,同时还能降低内存功耗。特斯拉全自动驾驶
HBM最早由AMD和SK Hynix提出,但是三星⼏乎垄断HBM市场,⽬前已经发展到HBM2代,HBM2可以做到最⾼12颗TSV堆叠3.6TB/s的带宽,传统DRAM最顶级的GDDR6是768GB/s。HBM的缺点是太贵,针对消费类市场的产品没⼈敢⽤,也缺乏应⽤场景,只有数据中⼼才⽤。除此之外还有⼀个缺点,⽤HBM就意味着必须⽤台积电的CoWos⼯艺,这样才能尽量缩短与运算单元的物理距离,最⼤限度发挥HBM的性能。英特尔的EMIB⼯艺可以抗衡台积电的CoWos⼯艺,但英特尔不做代⼯。因此全球⾼性能AI芯⽚⽆⼀例外都在台积电⽣产,市场占有率100%。
再来说运⾏频率。在设计集成电路时,仿真或EDA会给出常见的三种状态分析。
WCS (Worst Case Slow) : slow process, high temperature, lowestvoltage
TYP (typical) : typical process, nominal temperature, nominalvoltage
BCF (Best Case Fast ) : fast process, lowest temperature, highvoltage
假设⼀个AI芯⽚,运⾏频率2GHz,⼀般温度25°,电压0.8V,算⼒为2TOPS。在WCS下,温度为125度,电压
0.72V,此时频率会降低到1GHz,算⼒就会降为1TOPS。
那么每⽡TOPS有没意义呢?抱歉,也没多⼤意义的。⾸先是因为算⼒值本⾝就有很多种可能,⼚家肯定只选数值最⼤的那个给你看。其次这只是运算单元芯⽚本⾝的功耗与算⼒⽐,没有考虑DRAM。在深度学习计算中,数据频繁存取,极端情况下,功耗可能不低于运算单元。
结论
不必纠结于数字游戏,深度学习只是锦上添花,确定性算法把守安全底线才是最重要的。当然业界风⽓使然,数字游戏还会继续,还会更加热闹,但业内⼈⼠都⼼知肚明,完全⽆⼈驾驶落地还是遥遥⽆期。