当前位置: 华文星空 > 知识

众多的AI加速架构,它们都有什么区别?

2022-01-01知识

因为(xx)两个不同架构项目的关系,不断有朋友问我,怎么看AI芯片和通用计算芯片在架构上的差异和优缺点?其实这个话题有点「旧」了,这几年中,既有学术界专家的比较正式的文章回答,也有业界大佬在会议上总结了一些观点,感兴趣的稍微搜一下就可以找到。但其实这个问题却又非常难回答,一个主要的原因,AI芯片架构众多,有几条不同的路线,再加上不同的应用场景:训练(normal/HPC),推理(Datacenter/Edge/Mobile/Tiny),自动驾驶是Mobile+Edge的组合,L2/L2.5以Mobile为主。我们不能以其中一个架构代表所有的AI芯片架构,但让我们了解了所有的AI芯片再来回答这个问题,就会发现太发散了,不好总结。

我尝试从几个最主要的特征出发,基于当前的一代架构为基础,将这些架构分成几类,纯粹个人见解:

  1. GPGPU类, 以SIMD为基础和核心 ,为AI拓展了较小的Tensor core(几百OPS/Cycle),整个芯片几十到百来个SM/CU,硬件调度Grid/Block。以Nvidia Ampere,AMD MI200为代表,包括包括国内几家以AI训练和推理为方向的初创公司架构,也可以包括寒武纪MLU架构。
  2. AI计算中GEMM/Conv为目标,围绕较大的MAC阵列设计 的架构,MAC通常在边长256*256/128*128/64*64的范围,希望通过大阵列提供高能效。前期主打的是推理,后面也可以拓展到训练。以Google TPU为代表的新的AI架构,包括海思达芬奇,特斯拉FSD的NPU核等。
  3. DNN网络计算特点为基础,众多小核组成网格布局 ,软件栈编译器切割调度模型为主,希望通过最好的调度减少数据流动的能耗。小核用比如RISC-V,没有MAC阵列或者很小,以Graphcore IPU和Tenstorrent的Tensix core为代表,还有Cerebras的盘子一样大的Wafer Scale Engine 2。
  4. 某一些专用领域的推理NPU ,比如OPPO的MariSilicon X,还有一些SOC里专用给ISV/CV功能的NPU核心。这些核心对应相关需求定制化,包括精度,量化,pipeline设计等,以达到更高的能效。
  5. 以数据流为设计中心 的架构,张量流处理器,代表是Groq的TSP。
  6. 基于光学矩阵计算单元 的数字/光学混合架构,类似第2类架构,对应的有较大(128*128/64*64)的光学矩阵,以Lightintelligence和Lightmatter为代表。
  7. 存内AI计算/存算一体 芯片,国内外都有不少公司已有相关芯片,包括达摩院也发布了一款。

可以看得出,每一种架构都有自己的独特的出发点,然后围绕这个出发点,以更好的AI加速为目的,再加上其他的一下约束,比如编程模型和编译器设计等,去拓展其他架构和微架构,实现一个AI计算架构。

有些架构兼有多种特征,比如高通最新的AI core(第7代),在原来的SIMD(DSP)架构上,加入较大MAC阵列,兼顾上面第1和第2类的特点。国内还有推理芯片使用同样的DSP+MAC(可认为DSA)架构。

上面几种类型的架构,后三种还是比较特别的,这里就不参与详细的对比讨论了。感兴趣的可以看相关论文资料。

我这里分析总结这些架构,只能从比较笼统的几个方面,以公开的资料来阐述。因为从业者的特殊身份,细节的地方容易触碰敏感的地方。敬请谅解。

总结一些架构思考角度,非常精简和枯燥,

  • 指令集,其实是一个芯片架构的综合体现,也是其中的一个精髓;
  • 核内(SM/CU/AI core)架构的分析和推断
  • Tensor core/Matrix core/MAC,AI计算的核心:Conv/GEMM加速;
  • Vector core,DNN中还有很大一部分的Vector操作,它们对能效的影响;
  • 核内存储系统(Buffer 和/或 L0/L1 Cache,Register)
  • 核内pipe间并行和调度:ALU(Matrix/Vector/Special Function),Memory(Load/Store from buffer or DRAM);
  • 核内调度的粒度和实现:thread/warp/CTA级别的
  • 核间架构的分析和推断
  • 单算子tiling(Grid/Block)并行工作流程,软件还是硬件调度,思考可能的实现方法;
  • Fused op的可能性,实现方法,难以程度和收益;
  • 全模型的工作模式,软硬件的协同:包括硬件(MCU),编译器,软件栈的协同;
  • 控制command的工作方式和,同步,等等
  • 能效比分析
  • 性能,功耗,只从架构角度,包括静态的TOPS/W,以及核心利用率的考量,端到端的推理训练性能/W。
  • 通用性分析,覆盖的算子,支持新算子的难易程度。
  • 编程模型和编程接口,编译器难度,如何对接训练框架等。
  • 产品的业务落地所需要的特性支持。
  • 一个提醒,我们讨论的是芯片产品架构,它有很多的理论以外的限制,比如硬件和软件的实现代价:RTL设计,验证,后端;编译器,软件栈,复杂度和人手和产品周期等等因素的相互约束。这些因素会影响这个产品能不能最后实现,多长时间能落地,从而影响架构的创新。我们似乎可以看到国外的公司更加敢于去做创新的架构,一个方面就是他们senior的人相对多一些,投资者也给他们更长的时间。当然另外还有一个因素是他们没有国产化这一个市场替代的创业方向,走已有的NV/AMD等的架构路线必然是没有前途的。

    后面文章详细聊聊自己上面几个典型架构的一些想法,纯属个人见解,很多不足之处,欢迎指教和讨论。

    总的观点是,当前是一个计算架构的时代,各种架构有自身的长处和短处,没有好坏之分,只有适合不适合。所以我们只看架构特点,不争论哪个架构更优秀。这些架构的架构师和设计者都是业界大佬,我们也不了解他们做这个架构的一些实际情况,所以真没资格做评判。