吹拉弹唱


  • Home
  • Archive
  • Categories
  • Tags
  • Books
  •  

© 2022 Kleon

Theme Typography by Makito

Proudly published with Hexo

机器学习系统 1-1 - 后端硬件初探

Posted at 2021-01-12Updated at 2021-01-12 机器学习  机器学习 

机器学习系统通常使用定制硬件后端执行计算密集型算子。训练模型中包含大量训练专用的反向梯度算子,相比之下推理模型结构更简单,算子集更小。因此定制硬件通常从推理模型入手。

# 分类

如果采用异构计算系统的定义,硬件后端可以大致分为:

  • CPU

对应最通用的计算设备,可以执行所有计算,灵活性最高,计算性能通常不够高。不过由于CPU的广泛通用性以及较低的成本,使用CPU做推理计算也很常见。

因此针对不同指令集的CPU也发展出了不同的优化方案,比如Intel加入了AVX512指令支持超宽SIMD指令,但直接加入编译选项对性能提升不明显,需要使用集合了Intel汇编工程师的智慧的MKL-DNN库,针对不同算子精心设计精细到cache-line的操作;Intel随后几代CPU又加入了VNNI指令(INT8支持,实际使用时也有限制)和BF16指令(详细见推理优化)。

  • GPGPU1

对应计算密集型通用计算设备,可以执行有限的通用计算,取决于设备指令集。市场现状是,NVIDIA几乎垄断服务器级GPGPU供给,成本较高。CUDA软件栈闭源,优化通常只能基于NVIDIA提供的接口。不过也有一些奇技淫巧,通过接口劫持绕过CUDA软件的部分限制,需要一定的逆向工程的能力。

NVIDIA在模型量化(使用低位宽存储模型参数)上也很激进,INT8,INT4,FP16领先加入硬件。随之也出现过一阵超低精度paper热,使用2bit/1bit存储。如今,量化方案基本成熟,使用FP32训练,使用FP32直接推理,使用FP16/BF16推理精度略有,使用INT8则可能需要重新训练以恢复精度(详细见模型压缩)。

  • NPU

对应最专用的计算设备,通常支持的指令集最小,比如仅支持矩阵乘法,卷积,以及较常用的高频算子,执行效率最高。

几年前(现在是2020年)FPGA2凭借其相比ASIC3(专用定制芯片)的灵活可编程能力,一度出圈,成为深度学习硬件加速器的宠儿。不过,如今泡沫退去,一大批ASIC创业公司纷纷倒闭,FPGA自然也退回其最基础的应用场景(原型验证,低频可编程硬件)。

与此同时,NPU作为芯片的必备模块,已经与ARM整合进入手机CPU。一些大公司财大气粗,内部也在使用自研的特定场景芯片。

专用硬件突出“专用”二字,这意味着可以将应用场景无限缩窄。可以针对一类模型,甚至一种模型,甚至几种算子,针对性地使用大量专用优化。这样固然可能取得不错的性能,但是硬件开发本身相比软件来说慢得多。芯片的开发周期通常以年计,FPGA开发可能以月计,软件开发通常以周计。相较之下,必须要权衡开发时间、性能、成本以及通用性。

FPGA在芯片原型阶段的优势明显,如果大规模量产则成本与功耗都远高于ASIC。

另一方面,随着GPGPU的不断发展,先进工艺节点夹持,性能大幅提高,FPGA早期的低成本性能比的优势不复存在。在泡沫时期可能存在诸多在多项指标中平衡的特定场景硬件,但最终还是互相合并,收敛到几种硬件设计方案。

不过FPGA作为不错的早期原型平台还是有价值的,前端硬件的设计思路也和芯片设计相通,可以借鉴。


  • [1] 图形处理器通用计算
  • [2] Field-programmable gate array
  • [3] Application-specific integrated circuit

Share 

 Previous post: 机器学习系统 1-2 - 后端硬件指令集 Next post: 机器学习系统 0-0 - 总览 

© 2022 Kleon

Theme Typography by Makito

Proudly published with Hexo