首先,要知道这个问题是需要把推理和训练要分开,训练使用深度学习框架即可,也就是说性能最高的训练方法就是使用pytorch、TensorFlow、jax等等,这些框架来进行训练;可以说,训练的加速只能是使用多卡、多机、分布式的方法,但是推理则不同,推理的工业级加速则有特定的解决方法。
神经网络的推理,进行工业级加速有两种方法:
第一种,量化,也可以叫做混合计算,即在推理过程中将一部分计算使用低精度的数据类型,当然也有全部采用低精度的方法进行推理计算的,而这种低精度的推理计算往往也是有硬件设备来支持的,比如NVIDA公司的显卡有专为量化后推理计算的TensorRT Core。这种推理加速的方法其优点就是虽然牺牲一定的计算精度,但是却有较大的推理速度的提升,并且该种方法实现简单,毕竟依旧还是使用训练时的计算框架,如:TensorFlow、pytorch、jax等。
第二种,计算框架的重构,也可以叫做C++/CUDA重构。该种方法则不采用训练时的计算框架,也就是说完全不使用TensorFlow、pytorch、jax等框架,而是使用硬件的底层原语重新编写计算的kernel函数,也就是说使用CUDA直接编写需要用到的神经网络的kernel函数,而不是通过调用深度学习框架然后再调用CUDNN等框架实现的,并且使用C++或C++框架重写CPU端上的运行代码,同样不通过使用深度学习框架的方法来实现直接对硬件的操作,以此来提升运算性能。该种方法可以在保证计算精度不受影响的情况下获得和量化方法相当的推理速度,甚至可以更快,但其缺点也很明显,就是实现难度较大,可以说这种方法是不使用已有框架的实现方法,重构一个适用于特定结构的计算代码,这一种方式比较常见于网络AI围棋应用的项目,如:katago等等。不过也有公司对此种推理给出计算框架,也就是说有的公司推出项目,来对最常用的几种类型的神经网络的推理进行重构,并集成一个框架,如:Facebook的AITemplate。
相关:
- https://github.com/facebookincubator/AITemplate
- AI画图速度提升7倍,显存节省一半,快来体验AITEMPLATE神器
相关地址:
https://github.com/facebookincubator/AITemplate/blob/main/static/include/cuda_device_functions.h#L415