华为智能汽车部门Intelligent Automotive Solutions(IAS)下设包括提供应用算法的Autonomous Driving Solution (ADS)部门、提供域控制器的Mobile Data Center(MDC)和提供传感器系统的集成感知事业部。
其中,ADS负责算法研究,下分很多小组,分得特别精细,比如有Obstacle Detection Team障碍物探测、Prediction and Decision预测与决策;MDC类似于Tier1,前身为中央计算部门,主要为华为ARM服务器业务提供硬件。华为智能驾驶使用的芯片由海思提供,华为ARM服务器芯片也由海思提供,智能驾驶和ARM服务器芯片共用大部分研发成果。
华为海思AI产品线规划路线图
图片来源:https://ggim.un.org/meetings/2019/Deqing/documents/1-3%20Huawei%20slides.pdf
海思AI产品线规划有四条,分别为鲲鹏、昇腾、麒麟和鸿鹄。其中,鲲鹏系列主要是CPU,昇腾是AI加速器,麒麟主要是针对手机,鸿鹄针对电视。智能驾驶是昇腾产品线的延伸。此外基于麒麟990的麒麟990A则是华为汽车座舱芯片。
华为智能驾驶芯片主要有昇腾310、昇腾610和昇腾620,这三款芯片还可以级联增加性能。https://www-file.huawei.com/-/media/corp2020/pdf/publications/huawei-research/2022/huawei-research-issue1-en.pdf,这个文档里有华为昇腾系列芯片的详细解释,本文主要资料来源就是这个文档。
昇腾610的内部框架图
图片来源:华为
昇腾910内部框架图
图片来源:华为
华为设计芯片是模块形式,尽量复用研发成果,昇腾系列芯片的CPU和AI核心基本是相同的,只是核心数量不同。
华为昇腾核心特性一览表
图片来源:华为
昇腾核心即AI核,分原始、Max、Mini、Lite、Tiny几个版本,针对不同的应用使用不同的核心和数量配置,如针对手机领域的麒麟990,是两个Lite和一个Tiny核心,三个加起来是6.88TOPS@INT8算力。昇腾310则是两个Mini核心,昇腾610则是10个原始核心,昇腾910是32个Max核心。昇腾620可能是10个Max核心。每个核心基本是相同的,主要是缓存配置和频率配置不同。
不同的核心对应不同的算法网络
图片来源:华为
昇腾Max核心内部框架
图片来源:华为
上图为Max核心内部框架,主要包括标量Scalar、矢量Vector和张量Tensor三个运算单元。标量单元负责任务调度,矢量单元负责深度学习最后的激活阶段,张量负责卷积矩阵乘法。
三种运算单元的计算模式
图片来源:华为
标量基本近似CPU,灵活性最高,但针对AI运算力最低。1D矢量近似于GPU,灵活性居中,AI算力中等,CUBE针对2D矩阵,也就是一般意义上的张量。
如果按照严格数学的定义,那么矢量是一阶张量,矩阵是二阶张量,CUBE核跟英伟达的所谓张量核Tensor基本一致。
英伟达自Turing架构开始用的张量核架构和华为的CUBE基本一致,都是三维架构。
三种运算核心的对比
图片来源:华为
一个CUBE核是8TOPS@FP16的算力,注意是FP16不是常见的INT8,车载领域一般是INT8。一个CUBE内部包含4096个FP16 MACs,8192个INT8 MACs,而一个MAC是包含两个Ops,因此如果运行频率是1GHz,那FP16算力就是1G*2*4096=8T。
同样,谷歌的TPU V1是65000个FP16 MAC,运行频率0.7GHz,那么算力就是65000*0.7G*2=91T。特斯拉第一代FSD两个NPU,每个NPU是9216个INT8 MAC,运行频率是2GHz,算力就是2*2*2G*9216=73TOPS。所谓算力基本就是MAC数量的堆砌,堆的越多,算力越高,面积也越大,成本就越高。
算力这个数字不用较真。
几个手机芯片的AI算力对比
来源:华为
高通骁龙865标称最高,有8TOPS,但AI得分很低,远低于4.5TOPS的联发科天玑1000,更低于华为的麒麟990,显然高通的水分很大,联发科则太老实了,标称比实际低了至少1TOPS。
华为在2019年在IEEE上发表论文《Kunpeng 920: The First 7-nm Chiplet-Based 64-Core ARM SoC for Cloud Services》,链接为https://ieeexplore.ieee.org/document/9444893,这可是要付费浏览的论文,不是ARXIV那种只要你投就发表的论文,IEEE的论文是要严格审核的。
华为的论文主要说了LLC,即最后一级缓存。鲲鹏920的设计中,将SoC的全局LLC切片到各个CPU Cluster中,使LLC与CPU Cluster形成NUMA关系。因此,需要仔细考虑如何选择每个集群的适当大小,以最大限度地发挥其效益。综合考虑多种因素,选择每个集群4个CPU核心,以获得当前进程节点的最佳PPA分数。
LLC采用私有模式或共享模式:私有模式通常用于每个CPU核心承载相对独立的任务数据时;当SoC内的任务共享大量数据时,通常使用共享模式。
在私有模式下,每个CPU集群和对应的LLC切片组成一个私有组,可以避免集群访问高延迟的缓存切片。
在共享模式下,所有 LLC切片组合在一起充当一个块,以提高 SoC 内部数据的重用率。
再来看CPU部分,昇腾610里是16核心的CPU,按照惯例这里的CPU核心很可能就是鲲鹏里的CPU核心,即《Kunpeng 920: The First 7-nm Chiplet-Based 64-Core ARM SoC for Cloud Services》里所说的TAISHAN V110,众所周知,泰山也是华为服务器的产品线名称。TAISHAN V110是ARM系列的魔改,因为TAISHAN V120内核是基于ARM Cortex-A76的魔改,https://www.huaweicentral.com/kirin-990a-huaweis-first-auto-chipset-installed-in-arcfox-alpha-s-smart-car/,这里提到了麒麟990A的CPU是TAISHAN V120的lite版,而https://www.hisilicon.com/en/products/Kirin/Kirin-flagship-chips/Kirin-990-5G,则直接承认麒麟990的CPU就是ARM Cortex-A76,因此TAISHAN V110很可能是ARM Cortex-A75或A73或者是ARM服务器系列的N1。和英伟达的Orin使用的ARM Cortex-A78AE差距很大,但华为用数量弥补了这一差距,基本与英伟达旗鼓相当。
NoC方面是2D的4*6 MESH网格,节点间工作频率2GHz,带宽1024位即256GB/s,这个在2019年是比较高端的配置,但现在是2023年了,只能是中等配置。
华为与其他智能驾驶芯片的对比
图片来源:华为
华为最后也做了与其他智能驾驶芯片的对比,从中也可以看出昇腾610的die size尺寸很大,有401平方毫米。根据TechanaLye的分析,英伟达Orin的die size是455平方毫米,不过英伟达是三星的8纳米工艺,如果用和昇腾一样的台积电7纳米工艺,那么面积应该与昇腾610差不多,也就是说昇腾610的硬件成本和英伟达Orin是基本一致的。依照昇腾610的功率,水冷散热是少不了的。
算力实际上很难对比,英伟达的一般都是稀疏算力,而华为据说是稠密,通常两者会差一倍。英伟达Orin有多个版本,最顶级版本的275TOPS@稀疏INT8,算力实际上是两部分:一部分由2048个CUDA贡献,最高频率1.3GHz,贡献170TOPS@稀疏INT8算力;另一部分是64个张量核贡献,最高频率1.6GHz,贡献105TOPS@INT8稀疏算力,如果是FP32稠密格式那么算力仅为5.3TOPS(此时只有CUDA能处理FP32数据),并且CUDA核和张量核很难同时达到最大化性能。张量核主要做矩阵乘法,CUDA主要做矩阵与矢量乘法,矢量与矢量之间乘法,CPU会根据数据和任务的不同安排谁来工作。
此外稀疏和稠密有三种不同的定义,一种稀疏是计算稀疏,稀疏指计算密度低,谷歌第四代TPU就特设稀疏核,就是针对稀疏计算部分如transformer的嵌入部分。另一种是输入数据本身就是稀疏矩阵,还有一种是密集权重模型经过剪枝后的稀疏模型。天然稀疏矩阵指原始数据就包含很多0的矩阵,激光雷达的信息矩阵就是典型的稀疏矩阵,RGB摄像头一般是稠密矩阵。
在汽车这种嵌入式领域,算力和存储带宽限制需要尽可能地降低权重规模,对模型进行剪枝或者说蒸馏,这种属于主动将模型稀疏化,通常有四级,分别是Fine-grained、Vector、Kernel和Filter,分别对应单个权重、行或列、通道和卷积核。
英伟达对于最高级的fine grained做了特别优化,相对稠密模型,计算速度提高一倍,也就是算力数值高了一倍,英伟达公布的算力数值,一般默认是稀疏。如果没有针对fine grained优化,那么计算速度还是与稠密模型时一致。顺便说一句,对于激光雷达这种稀疏矩阵,人类目前没有找到好的优化加速的方法。
算力数值实际和算法高度捆绑。若算法不匹配,最糟糕的情况下,算力只能发挥1%不到,也就是如果是100TOPS的算力,那么实际只发挥了不到1TOPS,这种情况不算罕见。
昇腾的软件开发栈
图片来源:华为
上图是昇腾的软件开发栈,CUDA还是必须使用,算子库还是常见的cuBLAS,英伟达的GPU此时会更占优势。
Transformer时代,存储带宽比算力数值更有价值。CNN时代,卷积之类的稠密算子占了90%以上的计算,而Transformer时代稠密算子所占的部分大幅下降,对存储带宽要求高的存储密集型算子大幅增加数倍,80-90%的计算延迟都是由这些算子造成的。
存储带宽方面,昇腾910不计成本使用了HBM,不过2019年只有HBM一代,昇腾910的存储带宽是1TB/s,和目前主流AI加速器比差距较大;昇腾610自然无法用昂贵的HBM,只能是LPDDR4/5,估计是100-200GB/s之间;昇腾310考虑成本,存储带宽只有47.8GB/s。特斯拉二代FSD用了GDDR6做存储,可轻易超过400GB/s。
考虑到华为的智能驾驶芯片是2019年确定设计框架的,这在2019年毫无疑问是全球最先进的,没有之一,即便到了2023年,这个设计仍然不算落伍,但与英伟达和高通的下一代相比,难免出现差距。特别是Transformer对AI运算有非常大的改变,必须做出对应的修改。
转载自佐思汽车研究,文中观点仅供分享交流,不代表本公众号立场,如涉及版权等问题,请您告知,我们将及时处理。
-- END --