芯片的算力到底有什么用?算力是怎么评估的?
传统的CPU和GPU算力单位是GFLOPS,相信大家都还是比较熟悉。但这只是传统CPU和GPU的算力单位,而现在情况有了一些变化。很多准备买新能源车的朋友,发现现在新势力造车厂商宣传的性能指标不仅仅是只有马力、0到100KPH加速时间,续航里程这样常规数据,也发现现在车机算力有多少TOPS也是各家车企宣传攀比的新重点。
为了能够满足自动驾驶/辅助驾驶的性能需求,在传统SoC的基础上,各家车企也都给自己的车辆加上了NPU(Neural Processing Unit 神经网络处理器),而TOPS就衡量神经网络性能算力的关键指标。
可能会有同学有疑问,现在这些神经网络处理器衡量算力的指标TOPS同衡量CPU/GPU的GFLOPS之间有什么差别呢?
传统GPU衡量性能的指标是FLOPS,FLoating-point Operations Per Second,每秒浮点操作次数。
而车机衡量的指标是OPS,Operations Per Second,每秒操作次数。
传统的GPU运算主要是FP32,32位精度的浮点运算,因此是FLoating-point(浮点);
而车机的深度学习处理器主要跑的是INT,4位或者8位的整数运算,因此就没FLoating-point(浮点)。
浮点操作数现在GPU的性能级别是Giga FLOPS,10的9次方,而整数操作更简单,性能级别更高,是Tera OPS,10的12次方,INT的性能级别要比FP高上3个数量级,所以现在衡量深度学习处理器的性能指标是TOPS。
FP32是32位的二进制数,除开第一位(蓝色)是标明正负,除开后23位尾数(黄色),还有8位指数位(绿色)来提升数值范围和精度。传统以图像渲染为目标任务的GPU就是主要针对FP32来设计,流处理器的结构就十分复杂。
上面的图表我有写明具体转换算法,有兴趣的话,大家可以用下面链接的浮点转换器试试,就可以有更为深刻的理解:
但深度学习主要用到的是整型的INT8,甚至是更低精度范围的INT4。INT8除开第一位正负标识,后面的7位就说只能区分2的7次方即128个整数,再加上正负,也就-128到127一共256个数据(如果不算正负,那是0-255,也是256个数据)。但也就是这样的数据范围和精度,对于大多深度学习神经网络而言也是基本够用的。
传统GPU流处理器占大头的FP32部分是针对图像任务设计(Maxwell以前GPU和A100/H100这样的专业卡还有更高精度的FP64),对于大多深度学习任务而言就是多余的,仅仅只用的上少数的INT32。因此用传统GPU跑还不如用更多更小的纯INT计算单元来跑深度学习,这样来的性能更好,效率更高,成本更低,这也就是前面那些车企都不约而同选择专用神经网络处理器的原因。
传统处理器单线程性能每年大概就提升10%,而现在机器学习性能则是指数级的提升,可见发展趋势之迅猛。
除开自动驾驶,深度学习在手机拍照方面先行者Google也有很多探索,Google在2017年的Pixel 2就加入了Pixel Visual Core,PVC严格的说只能算是特殊领域专属架构(Domain-Specific Architecture)的ISP,但还不能算是NPU(Neural Processing Unit 神经网络处理器),直到2019年的Pixel 4搭载的Pixel Neural Core才能算是真正的神经网络处理器。
深度学习在拍摄最为典型应用就是HDR图像处理。HDR+用多帧合成对对高亮和暗部部分进行输入亮度调节分别曝光,再进行多帧合成。但这样的运算量太大,并不能实时完成。于是将图像切割成多个不同的小块提高并行度,或者干脆压缩成低分辨率的图像+灰度图,再使用HDRnet神经网络对曲线进行预测处理,最后进行像素混合和降噪。
最新一代的Google Pixel 6里搭载的Google Tensor不再是独立的NPU,NPU和ISP部分而又被整合进了SoC,其有5.7 TOPS的INT8算力。
当然,现在的深度学习领域不仅仅是NVIDIA、Google或者Telsa这样头部玩家的游乐场,也有很多国内企业参与其中,OPPO的马里亚纳X就是神经网络处理器领域的新玩家。
马里亚纳X不同于骁龙Gen 1或者天机9000那样SoC片上内置NPU ,而是一个整合NPU和ISP(Image Signal Processor 图像信号处理器)功能的独立芯片。和Pixel Neural Core比较类似,这个芯片位于SoC的前端,在CMOS和SoC之间,这样图片数据在进入SoC之前就可以进行预处理。
先说ISP部分,马里亚纳X的ISP部分率先支持20bit的超高动态范围,而高通骁龙8 Gen 1和天玑9000都仅能支持18Bit,20Bit相比18Bit有更高的画面宽容度,此外Find X5 Pro的RGBW像素传感器的RGB和W分隔处理也是由ISP完成。
ISP初步处理好的数据再通过NPU进行降噪和HDR处理,提升画面的高感和宽容度表现(具体的方式应该和前面提及Google HDR算法差不多)。并且进行这个HDR处理的并不只是针对的单帧照片,不能等待拍摄完再慢悠悠转圈圈,而是需要实时处理4K30的超高清视频,有更高的实时性需求。
骁龙888的内置NPU 4K处理性能只有2FPS,基本是幻灯片级别。而在使用马里亚纳X的NPU之后,40FPS的性能就可以满足实时处理4K30视频HDR的性能需要。
能够实现4K30的实时HDR处理,是需要由马里亚纳X高达18 TOPS的INT8精度的算力来支撑的。
马里亚纳X有18TOPS的INT8算力,是明显高于前面介绍Google Tensor的5.7 TOPS,也要高于iPhone 13搭载A15的15.8 TOPS,骁龙8 Gen1和天玑9000的INT 8性能数据官方并没明确说明,这里就不做比较。但马里亚纳X同SoC内的NPU并不是抢占或者排他关系,而是可以分工负责流程处理不同的阶段,达成合作共赢。
除开马里亚纳X,其他手机或者独立芯片设计公司发布的NPU或ISP也都会宣告算力数据。无论是开发人员还是用户,面对算力数据的时候要有量化指标,一般是INT8或者INT16,少部分会使用INT4,实际上我们看全球大多数芯片公司的宣发,绝大多数会采用INT8或者INT16量作为指标。因为INT4算正负标识只能表示-8到7的整数,不算则是0-15的整数,能够实现的精度和范围太低,在神经网络中使用有比较大的限制,即使可以转到更小的神经网络也会有性能损失。不过用什么样的量化指标这没有规定,但不管怎么说,面向开发者或者用户,还是要标注量化标准,否则会让受众产生困惑和争议。比如最近有个芯片厂的宣发他们那颗接近30TOPS的ISP芯片,没标注标准,到现在我也不知道那是INT8还是INT4的测量结论。
NVIDIA的TensorRT典型流程就是将
回到INT8量化,INT8能够更好的兼顾效率和泛用性,行业内的无论是intel的OpenVINO和NVIDIA的TensorRT应用都是以INT8为主。用INT4标注只是算力数值大比较好看而已,INT8的算力数据才是有更大的实用价值。
手机同车机的NPU虽然在架构方面差不多,但在具体需求上还是有不同:车机的NPU由于供电和散热都有更大冗余,对于功耗控制就没有敏感,就可以用相对落后的工艺,比如前面说的Tesla的FSD和海思的MC810都是采用的14/16nm工艺;而手机对于功耗也更为敏感,在马里亚纳X是采用的台积电先进6nm工艺。TSMC N6是N7节点的改良工艺,相比14/16nm在相同性能的情况,功耗大概要低上2/3。
N6先进工艺加持再加上专用电路的效率优势,使用马里亚纳X功耗仅为传统芯片的47%,再考虑20倍的性能差距,马里亚纳X有接近骁龙888的内置NPU的50倍效能比。更高的 FPS可以提供更为流畅的预览和拍摄性能,更高的效能比可以大幅降低手机拍摄时候的发热和电力消耗,这些改变都是可以大幅提升用户拍摄时候的使用体验的。
OPPO的产品经理曾经介绍马里亚纳X的台积电6nm工艺流片费用超过人民币一亿元,流片的意思是将芯片生产全要素流程完整走一遍的试生产,如果不顺利需要反复调整这个成本还会更高,之前华为海思9000作为5nm首发试验的流片费用传说更是高达3亿。所以OPPO刚刚宣布要给TSMC下1000万片的订单,有效降低单片成本。而且马里亚纳X并不像有些厂商的“自主研发芯片”更像是贴牌冠名,马里亚纳X从芯片IP设计到算法,都是依靠自己组建的团队完全自主一步一步踏踏实实的走出来的,再加上量产封装测试的成本,马里亚纳X早期成本是非常贵的。另外,之前和他们聊的时候,听说早期他们本来采用的是12nm工艺的方案,后来觉得没啥用,做出来的时候SOC都可能进化到4nm甚至更先进了,所以下决心直接从6nm出发。另外,在宣发马里亚纳芯片的时候,欧加也是尊重了行业的惯例,采用了INT8和INT16量化指标,这样和竞品比较更直观,也更准确。
先进工艺的Wafer成本也是水涨船高,需要极大的投入 数据来源:Counterpoint Research
马里亚纳X的定位是影像专用NPU,特殊领域专属架构DSA使得其比较封闭,第三方应用是很难调用的,这样并不利于整体生态的发展。因此欧加集团的自研路线应该会和Google从Pixel Visual Core到Google Tensor的路线相近,先从马里亚纳X这样的特殊领域专属架构开始,在研发和运营过程中积累经验/培养团队,后续的最终目标还是作为Fabless(无晶圆生产能力的设计公司)研发独立设计的整体SoC,并形成完整的从硬到软的生态。
这条路真的十分困难,但如果不下决心做,可能也就没有未来了。
页:
[1]