深度学习在进行推理时,很多应用场景在对硬件有一定限制的情况下,对推理速度还有比较高的要求,如移动端的人脸识别与语音语义识别、安防领域的烟雾报警等。在这些领域中,推理速度的快慢不但直接影响着软件效果与体验,而且也决定着一款产品能否获得更加广阔的市场。因此,如何对深度学习推理进行优化以获得更快的推理速度,也已成为目前人工智能领域最为火热的方向之一。
当前对推理进行加速时,主要有模型加速以及推理运行时加速两个方面。在模型加速方面,目前比较主流的技术有模型压缩、剪枝和量化等;在推理运行时加速方面,针对不同硬件或者应用场景,各大厂商都推出了自己的推理加速库或运行时,来更好地为自家硬件以及产品服务执行,比如X86 CPU执行的OpenVINO,Tf serving,ARM CPU上的TF Lite,移动端CPU上腾讯的NCNN,NVIDIA GPU上的TensorRT。本文将要介绍的MKLDNN库,即是Intel公司针对自身CPU以及GPU设计的深度学习加速库,能够成倍地提升神经网络在Intel CPU以及GPU下的推理速度,目前在Adlik集成的OpenVINO运行时中就使用到了MKLDNN。以下便对该库以及其实现的推理加速技术进行简单介绍。
01
MKLDNN介绍
1. MKLDNN简介
MKLDNN是一个深度学习底层库,该库主要针对英特尔处理器、英特尔图形处理器以及Xe图形处理器,对深度神经网络进行op级以及指令集级的优化。在使用MKLDNN进行训练或者推理时,其使用JIT(Just In Time)代码生成技术,根据神经网络op的参数以及后端硬件支持的指令集,生成优化后的代码,以提高神经网络在指定硬件,特别是英特尔CPU和GPU上的执行速度。当前主流的深度学习框架,如TensorFlow、PyTorch等,都集成了MKLDNN库,通过在编译时加入编译选项,使能MKLDNN库,便能够使用该库对深度神经网络的训练以及推理进行加速。
2. MKLDNN特殊优化指令集介绍
在MKLDNN中,其对于以下指令集进行了专门的优化:Intel SSE4.1、AVX、AVX2、AVX-512以及Intel DL Boost。在其开源代码中,可以看到对于计