Open egolearner opened 5 years ago
https://arxiv.org/abs/1811.09886 针对Facebook的DL Inference场景,分析了DL Inference的特点,介绍了性能优化的工作,并对以后软硬件协同设计进行了展望。
很多预测工作需要CPU的灵活性、可用性、低延迟,因此FB的工作主要针对通用处理器。 论文认为新的DL硬件需要满足下列条件:
论文将模型分为三类,排序与推荐、CV、NLP。
推荐可以表达为事件概率预测问题,而ML模型预测的是一个或多个事件的概率。 模型的输入为dense和sparse特征,sparse特征的embedding表常常包括上亿的参数,而全连接层(FC)只有少量的参数。虽然推荐中往往同时预测多个item,可以通过batch实现FC的高性能运算,但整个模型的执行一般是内存密集的embedding查表:随机从表中读取很大数目的列向量。 未来趋势
论文讲到三类应用:图像分类、目标检测、视频理解。 目标检测比图像分类更加耗时,原因:检测因为精度原因需要高分辨率;Faster-RCNN最后的卷积块需要在许多小型空间区域做batch。 视频理解传统上采用帧采样的手段,而最近的3D卷积因为能同时利用时域和空域信息精度更高而得到了广泛的应用。 未来趋势
未来趋势
FB的DL计算量与系统社区通常研究的有显著不同
计算中耗时最高的依次为FC、embedding lookup和tensor变换。 推荐和NMT模型batch小,CV模型分组卷积输出少量channel时,矩阵矩阵运算变窄,更像是矩阵向量运算,性能由BLAS3降级为BLAS2。
DL的模型、特征、tensor时刻在变,需要持续监控性能指标,为此FB实现了Op级别的性能监控,可以判定每层瓶颈是计算还是内存带宽。机器上的agent会上报每层的性能信息,包括执行时间、内存带宽、实际的FLOP/s。
虽然移动端广泛使用了降低精度预测,但数据中心尚未如此。一方面,移动平台使用了精度换计算量的模型,而服务端倾向于精度高但计算量大的模型,而且核心服务的模型(如feed流,反欺诈)对精度要求更高(<1%的结果变化)。另一方面,通用CPU对高性能降低精度预测支持不佳。
X86处理器支持单精度与半精度浮点数转换,但没有原生的半精度(fp16)计算指令。X86使用一系列指令来实现32位累加的8位整型乘法,仅比fp32的计算呑吐高33%。使用16位累加的话会比fp32高2倍,但精度下降很多,除非结合感知异常点的量化。VNNI指令集支持高性能32位累加的int8乘法,但x86架构尚不支持。
FB的优化表明根据性能瓶颈使用不同的量化技术是有用的,比如主要节省存储和带宽的量化技术应该使用embedding层、小批量的FC层和depth-wise卷积来做测试。FB的感知异常点量化经验表明高性能稀疏线性代数库既对剪枝模型有用也对降低精度的未剪枝模型有用。
应对精度挑战的技术
DL预测涉及的矩阵形状更小且高瘦。对高瘦矩阵需要均摊packing的成本。对DL来说大量的运算并不是严格的矩阵乘法:卷积运算可以表达为im2col紧跟矩阵乘法,达不到最高性能,需要将卷积提升为一等公民;甚至FC因为有bias项也不能仅用GEMM实现,为了节省内存带宽bias应该融合到GEMM中;ReLU等常用OP也应该支持融合。 Google gemmlowp, Intel MKL-DNN, FBGEMM各有所长。
常用的全图优化包括OP融合、消除数据移动、OP调度、inter与intra OP的多线程并行。论文的主要工作针对OP fusion,一方面寻找值得人工优化的收益最高的机会,另一方面寻找更广泛的编译器自动生成kernel的机会。 具体做法为:寻找所有频繁执行的子图并按融合带来的潜在加速排序,使用融合前后的性能来评估潜在加速。排除掉某些模式的子图,如包括非数据并行OP的子图。最后运行top-k算法。
https://arxiv.org/abs/1811.09886 针对Facebook的DL Inference场景,分析了DL Inference的特点,介绍了性能优化的工作,并对以后软硬件协同设计进行了展望。
1. 引言
很多预测工作需要CPU的灵活性、可用性、低延迟,因此FB的工作主要针对通用处理器。 论文认为新的DL硬件需要满足下列条件:
2. DL预测的特点
表示模型
论文将模型分为三类,排序与推荐、CV、NLP。
排序与推荐
推荐可以表达为事件概率预测问题,而ML模型预测的是一个或多个事件的概率。 模型的输入为dense和sparse特征,sparse特征的embedding表常常包括上亿的参数,而全连接层(FC)只有少量的参数。虽然推荐中往往同时预测多个item,可以通过batch实现FC的高性能运算,但整个模型的执行一般是内存密集的embedding查表:随机从表中读取很大数目的列向量。 未来趋势
CV
论文讲到三类应用:图像分类、目标检测、视频理解。 目标检测比图像分类更加耗时,原因:检测因为精度原因需要高分辨率;Faster-RCNN最后的卷积块需要在许多小型空间区域做batch。 视频理解传统上采用帧采样的手段,而最近的3D卷积因为能同时利用时域和空域信息精度更高而得到了广泛的应用。 未来趋势
NLP
未来趋势
计算特点
计算内核
计算中耗时最高的依次为FC、embedding lookup和tensor变换。 推荐和NMT模型batch小,CV模型分组卷积输出少量channel时,矩阵矩阵运算变窄,更像是矩阵向量运算,性能由BLAS3降级为BLAS2。
3. 性能优化
性能分析
DL的模型、特征、tensor时刻在变,需要持续监控性能指标,为此FB实现了Op级别的性能监控,可以判定每层瓶颈是计算还是内存带宽。机器上的agent会上报每层的性能信息,包括执行时间、内存带宽、实际的FLOP/s。
降低精度预测
虽然移动端广泛使用了降低精度预测,但数据中心尚未如此。一方面,移动平台使用了精度换计算量的模型,而服务端倾向于精度高但计算量大的模型,而且核心服务的模型(如feed流,反欺诈)对精度要求更高(<1%的结果变化)。另一方面,通用CPU对高性能降低精度预测支持不佳。
性能挑战
X86处理器支持单精度与半精度浮点数转换,但没有原生的半精度(fp16)计算指令。X86使用一系列指令来实现32位累加的8位整型乘法,仅比fp32的计算呑吐高33%。使用16位累加的话会比fp32高2倍,但精度下降很多,除非结合感知异常点的量化。VNNI指令集支持高性能32位累加的int8乘法,但x86架构尚不支持。
FB的优化表明根据性能瓶颈使用不同的量化技术是有用的,比如主要节省存储和带宽的量化技术应该使用embedding层、小批量的FC层和depth-wise卷积来做测试。FB的感知异常点量化经验表明高性能稀疏线性代数库既对剪枝模型有用也对降低精度的未剪枝模型有用。
精度挑战
应对精度挑战的技术
软件挑战
DL预测涉及的矩阵形状更小且高瘦。对高瘦矩阵需要均摊packing的成本。对DL来说大量的运算并不是严格的矩阵乘法:卷积运算可以表达为im2col紧跟矩阵乘法,达不到最高性能,需要将卷积提升为一等公民;甚至FC因为有bias项也不能仅用GEMM实现,为了节省内存带宽bias应该融合到GEMM中;ReLU等常用OP也应该支持融合。 Google gemmlowp, Intel MKL-DNN, FBGEMM各有所长。
全图优化
常用的全图优化包括OP融合、消除数据移动、OP调度、inter与intra OP的多线程并行。论文的主要工作针对OP fusion,一方面寻找值得人工优化的收益最高的机会,另一方面寻找更广泛的编译器自动生成kernel的机会。 具体做法为:寻找所有频繁执行的子图并按融合带来的潜在加速排序,使用融合前后的性能来评估潜在加速。排除掉某些模式的子图,如包括非数据并行OP的子图。最后运行top-k算法。
4. 应用驱动的硬件协同设计方向