简介: 深度学习已在面向自然语言解决等畛域的理论业务场景中宽泛落地,对它的推理性能优化成为了部署环节中重要的一环。推理性能的晋升:一方面,能够充分发挥部署硬件的能力,升高用户响应工夫,同时节省成本;另一方面,能够在放弃响应工夫不变的前提下,应用构造更为简单的深度学习模型,进而晋升业务精度指标。导读深度学习已在面向自然语言解决等畛域的理论业务场景中宽泛落地,对它的推理性能优化成为了部署环节中重要的一环。推理性能的晋升:一方面,能够充分发挥部署硬件的能力,升高用户响应工夫,同时节省成本;另一方面,能够在放弃响应工夫不变的前提下,应用构造更为简单的深度学习模型,进而晋升业务精度指标。本文针对地址标准化服务中的深度学习模型发展了推理性能优化工作。通过高性能算子、量化、编译优化等优化伎俩,在精度指标不升高的前提下,AI模型的模型端到端推理速度最高可取得了4.11倍的晋升。1. 模型推理性能优化方法论模型推理性能优化是AI服务部署时的重要环节之一。一方面,它能够晋升模型推理的效率,充沛开释硬件的性能。另一方面,它能够在放弃推理提早不变的前提下,使得业务采纳复杂度更高的模型,进而晋升精度指标。然而,在理论场景中推理性能优化会遇到一些艰难。1.1 自然语言解决场景优化难点典型的自然语言解决(Natural Language Processing, NLP)工作中,循环神经网络(Recurrent Neural Network, RNN)以及BERT[7](Bidirectional Encoder Representations from Transformers.)是两类使用率较高的模型构造。为了便于实现弹性扩缩容机制和在线服务部署的高性价比,自然语言解决工作通常部署于例如Intel® Xeon®处理器这样的x86 CPU平台。然而,随着业务场景的复杂化,服务的推理计算性能要求越来越高。以上述RNN和BERT模型为例,其在CPU平台上部署的性能挑战如下:RNN循环神经网络是一类以序列(sequence)数据为输出,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络。理论应用中常见的RNN有LSTM,GRU以及衍生的一些变种。在计算过程中,如下图所示,RNN构造中每一次的后级输入都依赖于相应的输出和前级输入。因而,RNN能够实现序列类型的工作,近些年在NLP甚至是计算机视觉畛域被宽泛应用。RNN相较于与BERT而言,计算量更少,模型参数共享,但其计算时序依赖性会导致无奈对序列进行并行计算。
RNN构造示意图BERTBERT[7]证实了可能以较深的网络结构在大型数据集上实现无监督预训练(Unsupervised Pre-training),进而供应特定工作进行微调(finetune)的模型。它不仅晋升了这些特定工作的精度性能,还简化了训练的流程。BERT的模型构造简略又易于扩大,通过简略地加深、加宽网络,即可取得相较于RNN构造更好的精度。而另一方面,精度晋升是以更大的计算开销为代价的,BERT模型中存在着大量的矩阵乘操作,这对于CPU而言是一种微小的挑战。
BERT模型构造示意图1.2 模型推理优化策略基于上述推理性能挑战的剖析,咱们认为从软件栈层面进行模型推理优化,次要有如下策略:模型压缩:包含量化、稠密、剪枝等特定场景的高性能算子AI编译器优化量化模型量化是指将浮点激活值或权重(通常以32比特浮点数示意)近似为低比特的整数(16比特或8比特),进而在低比特的示意下实现计算的过程。通常而言,模型量化能够压缩模型参数,进而升高模型存储开销;并且通过升高访存和无效利用低比特计算指令(如Intel® Deep Learning Boost Vector Neural Network Instructions,VNNI),获得推理速度的晋升。给定浮点值,咱们能够通过如下公式将其映射为低比特值:其中和是通过量化算法所得。基于此,以Gemm操作为例,假如存在浮点计算流程:咱们能够在低比特域实现相应的计算流程:高性能算子在深度学习框架中,为了放弃通用性,同时兼顾各种流程(如训练),算子的推理开销存在着冗余。而当模型构造确定时,算子的推理流程仅是原始全量流程个一个子集。因而,当模型构造确定的前提下,咱们能够实现高性能推理算子,对原始模型中的通用算子进行替换,进而达到晋升推理速度的目标。在CPU上实现高性能算子的关键在于缩小内存拜访和应用更高效的指令集。在原始算子的计算流程中,一方面存在着大量的两头变量,而这些变量会对内存进行大量的读写操作,进而拖慢推理的速度。针对这种状况,咱们能够批改其计算逻辑,以升高两头变量的开销;另一方面,算子外部的一些计算步骤咱们能够间接调用向量化指令集,对其进行减速,如Intel® Xeon®处理器上的高效的AVX512指令集。AI编译器优化随着深度学习畛域的倒退,模型的构造、部署的硬件呈现出多样化演进的趋势。将模型部署至各硬件平台时,咱们通常会调用各硬件厂商推出的runtime。而在理论业务场景中,这可能会遇到一些挑战,如:模型构造、算子类型的迭代的速度会高于厂家的runtime,使得一些模型无奈疾速基于厂商的runtime实现部署。此时须要依赖于厂商进行更新,或者利用plugin等机制实现缺失的算子。业务可能蕴含多个模型,这些模型可能由多个深度学习框架训得,此外模型可能须要部署至多个硬件平台。此时须要将这些格局不同的模型转化至各个硬件平台所需的格局,同时要思考各推理框架实现的不同导致的模型精度性能变动等问题,尤其是像量化这类对于数值差别敏感度较高的办法。AI编译器就是为了解决上述问题而提出的,它形象出了多个档次来解决上述的一些问题。首先,它承受各个前端框架的模型计算图作为输出,并通过各类Converter转化生成对立的两头示意。随后,诸如算子交融、循环展开等图优化pass会作用至两头示意,以晋升推理性能。最初,AI编译器会基于优化后的计算图进行面向特定硬件平台的codegen,生成可执行的代码,这过程中会引入诸如stitch、shape constraint等优化策略。AI编译器有很好鲁棒性、适应性、易用性,并且可能播种显著优化收益。本文中,阿里云机器学习平台PAI团队联结英特尔数据中心软件团队、英特尔人工智能和剖析团队、达摩院NLP地址标准化团队,针对地址标准化服务的推理性能挑战,单干实现了高性能的推理优化计划。2. 地址标准化介绍公安政务、电商物流、能源(水电燃)、运营商、新批发、金融、医疗等行业在业务发展的过程中往往波及大量地址数据,而这些数据往往没有造成规范构造标准,存在地址缺失、一地多名等问题。随着数字化的降级,城市地址不规范的问题更加凸显。
地址利用现存问题地址标准化[2](Address Purification)是阿里巴巴达摩院NLP团队依靠阿里云海量的地址语料库,以及超强的NLP算法实力所积淀出的高性能及高准确率的规范地址算法服务。地址标准化产品从标准地址数据、建设统一标准地址库的角度登程,提供高性能地址算法。
地址标准化劣势该地址算法服务能主动地标准化解决地址数据,可无效地解决一地多名,地址辨认,地址真伪分别等地址数据不标准、人工治理耗时耗力、地址库反复建设问题,为企业,政府机关以及开发者提供地址数据荡涤,地址标准化能力,使地址数据更好的为业务提供反对。地址标准化产品具备如下的几个特点:准确率高:领有海量地址语料库以及超强的NLP算法技术,并继续优化迭代,地址算法准确率高超强性能:积攒了丰盛的我的项目建设教训,可能稳固承载海量数据服务全面:提供20多种地址服务,满足不同业务场景需要部署灵便:反对公共云、混合云、私有化部署。本次优化的模块属于地址标准化中的搜寻模块。地址搜寻是指用户输出地址文本相干信息,基于地址库和搜索引擎,对用户输出的地址文本进行搜寻和联想,并返回相干趣味点(Point of Interest,POI)信息。地址搜寻性能不仅可能晋升用户数据处理体验,同时也是多个地址上游服务的根底,如经纬度查问、门址标准化、地址归一等,因而在整套地址服务体系中起到了关键作用。
地址服务搜寻体系示意图具体而言,本次优化的模型是基于多任务天文预训练语言模型底座产出的多任务向量召回模型和精排模型。多任务天文预训练语言模型底座在掩码语言模型 (Masked Language Model, MLM) 工作的根底上联合了相干趣味点分类与地址元素辨认(省、市、区、POI 等),并通过元学习(Meta Learning)的形式,自适应地调整多个工作的采样概率,在语言模型中融入通用的地址常识。
多任务地址预训练模型底座示意图多任务向量召回模型基于上述底座训练所得,蕴含双塔类似度、Geohash (地址编码) 预测、分词和 Term Weighting (词权重) 四个工作。
多任务向量召回模型示意图作为计算地址类似度匹配的外围模块,精排模型则是在上述底座的根底上,引入了海量点击数据和标注数据训练训练所得[3],并通过模型蒸馏技术,晋升了模型的效率[4]。最终用利用于召回模型召回的地址库文档从新排序。基于上述流程训练失去的4层单模型可能在CCKS2021中文NLP地址相关性工作[5]上取得较12层基线模型更好的成果(详见性能展现局部)。
精排模型示意图3. 模型推理优化解决方案阿里云机器学习平台PAI团队推出的Blade产品反对以上提及的所有优化计划,提供了对立的用户接口,并领有多个软件后端,如高性能算子、Intel Custom Backend、BladeDISC等等。
Blade模型推理优化架构图3.1 BladeBlade是阿里云机器学习PAI团队(Platform of Artificial Intelligence)推出的通用推理优化工具,能够通过模型零碎联结优化,使模型达到最优推理性能。它有机交融了计算图优化、Intel® oneDNN等vendor优化库、BladeDISC编译优化、Blade高性能算子库、Costom Backend、Blade混合精度等多种优化伎俩。同时,简洁的应用形式升高了模型优化门槛、晋升了用户体验和生产效率。PAI-Blade反对多种输出格局,包含Tensorflow pb、PyTorch torchscript等。对于待优化的模型,PAI-Blade会对其进行剖析,再利用多种可能的优化伎俩,并从各种优化后果当选取出减速成果最显著的为最终的优化后果。
Blade优化示意图为了在保障部署成功率的前提下取得最大的优化成果,PAI-Blade采取了“圈图”的形式进行优化,即:将待优化子计算图中,可能被推理后端/高性能算子反对的局部转化至相应的优化子图;无奈被优化的子图回退(fallback)至相应的原生框架(TF/Torch)执行。
Blade圈图示意图Blade Compression是Blade推出的面向模型压缩的工具包,旨在帮助开发人员进行高效的模型压缩优化工作。它蕴含了多种模型压缩性能,包含量化、剪枝、稠密化等。压缩后的模型能够便捷地通过Blade实现进一步优化,以取得模型零碎联结的极致优化。量化方面,Blade Compression:提供了简洁的应用接口,通过调用几个简略api,即可实现量化改图、校准(calibration)、量化训练(Quantization-aware Training,QAT)、导出量化模型等步骤。提供了多种后端的反对,通过config文件的配置,即可实现面向不同设施、不同后端的量化过程。集成了PAI-Blade团队在理论生产业务中自研的各种算法,以取得更高的量化精度。同时,咱们提供了丰盛的原子能力api,便于对特定状况进行定制化开发。
Blade Compression示意图BladeDISC是阿里云机器学习平台PAI团队推出的面向机器学习场景的动静shape深度学习编译器,是Blade的后端之一。它反对支流的前端框架(TensorFlow、PyTorch)与后端硬件(CPU、GPU),同时也反对推理以及训练的优化。
BladeDISC架构图3.2 基于Intel® Xeon®的高性能算子神经网络模型中的子网络通常具备长期的通用性和普遍性,如 PyTorch 中的 Linear Layer 和Recurrent Layers 等,是模型建构的根底模块,负责着特定的性能,通过这些模块的不同组合失去不拘一格的模型,并且这些模块也是AI编译器重点优化的指标。据此,为了失去最佳性能的根底模块,从而实现性能最佳的模型,Intel针对X86架构对这些根底模块进行了多层次优化,包含使能高效的AVX512指令、算子外部计算调度、算子交融、缓存优化,并行优化等等。在地址标准化服务中,常常会呈现Recurrent Neural Network (RNN) 模型,并且RNN模型中最影响性能的模块是LSTM或GRU等模块,本章节以LSTM为例,出现在不定长且多batch的输出时,如何实现对LSTM的极致性能优化。通常,为了满足不同用户的需要和申请,谋求高性能和低成本的云上服务会将不同的用户申请进行Batch,以实现计算资源的最大化利用。如下图所示,总共有3条曾经被embedding的句子,并且内容和输出的长度是不雷同的。
原始输出数据为了使得LSTM计算的更高效,须要对Batched input采纳PyTorch的pack_padded_sequence()函数进行padding和sort,失去下图所示,一个paddding的数据tensor,一个形容数据tensor的batch size的tensor,一个形容数据tensor的原始序号tensor。
LSTM输出数据到目前为止,曾经筹备好了LSTM的输出,对于LSTM的计算过程如下图所示,对输出的tensor进行分段批量计算,及跳过零值计算。
LSTM针对输出的计算步骤更深刻的LSTM的计算优化如下图17所示,公式中的矩阵乘局部进行了公式间计算交融,如下图所示,原先4次矩阵乘转换成1次矩阵乘,并且采纳AVX512指令进行数值计算,以及多线程并行优化,从而实现高效的LSTM算子。其中,数值计算指的是矩阵乘和后序的elementwise的元素操作,针对矩阵乘局部,本计划采纳的是oneDNN库进行计算,库中具备高效的AVX512 GEMM实现,针对elementwise的元素操作,本计划对其采纳AVX512指令集进行算子交融,晋升了数据在缓存中的命中率。
LSTM计算交融[8]3.3 推理后端 Custom BackendIntel custom backend[9]作为Blade的软件后端,强有力地减速着模型量化和稠密的推理性能,次要蕴含三个层面的优化。首先,采纳Primitive Cache的策略对内存进行优化,其次,进行图交融优化,最初,在算子层级,实现了蕴含稠密与量化算子在内的高效算子库。
Intel Custom Backend架构图低精度量化稠密与量化等高速算子, 得益于Intel® DL Boost减速指令集,如VNNI指令集。
VNNI 指令介绍上图为VNNI 指令, 8bits能够应用AVX512 BW三个指令来减速, VPMADDUBSW 先对2对由8bits组成的数组做乘法与加法, 失去16bits数据, VPMADDWD将相邻数据加总起来,失去32bits数据, 最初VPADDD加上一个常数, 此三函数可组成一个AVX512_VNNI,此指令可用来减速推理中的矩阵相乘。图交融除此之外,Custom Backend中也提供了图交融,例如矩阵相乘后不输入两头态长期Tensor,而是间接运行前面指令,行将后项的post op与前级算子进行交融,如此缩小数据搬运以缩小运行工夫,下图为一个范例,红框内的算子交融后可打消额定的数据搬移,成为一个新的算子。
图交融内存优化内存调配与开释会与操作系统进行通信,从而导致运行时的延时减少,为了缩小这部分的开销,Custom Backend中减少了Primitive Cache的设计,Primitive Cache用于缓存曾经被创立的Primitive,使得Primitive不能被零碎回收,缩小了下一次调用时的创立开销。同时为耗时较大的算子建设了快取机制,以减速算子运行,如下图所示:
Primitive Cache量化性能如之前所说,模型大小减小后,计算与存取的开销大幅缩小,从而性能失去微小的晋升。4. 整体性能展现咱们选取了地址搜寻服务中典型的两个模型构造来验证上述优化计划的成果。测试环境如下所示:服务器型号:阿里云 ecs.g7.large,2 vCPU测试CPU型号:Intel® Xeon® Platinum 8369B CPU @ 2.70GHz测试CPU核数:1 vCPUPyTorch版本:1.9.0+cpuonnx版本:1.11.0onnxruntime版本:1.11.14.1 ESIMESIM[6]是一种专为自然语言推断而生的加强版LSTM,它的推理开销次要来自于模型中的LSTM构造。Blade利用Intel数据中心软件团队开发的高性能通用LSTM算子对其进行减速,替换PyTorch module中的默认LSTM (Baseline)。本次测试的ESIM中蕴含两种LSTM构造,单算子优化前后的性能如表所示:LSTM构造输出shape优化前RT优化后RT减速比LSTM - A7x2000.199ms0.066ms+3.02x 202x2000.914ms0.307ms+2.98xLSTM - B70x500.266ms0.098ms+2.71x 202x500.804ms0.209ms+3.85xLSTM单算子优化前后推理性能优化前后,ESIM端到端推理速度如表 所示,同时优化前后模型的精度放弃不变。模型构造ESIM[6]ESIM[6]+Blade算子优化减速比RT6.3ms3.4ms+1.85xESIM模型优化前后推理性能4.2 BERTBERT[7]近年来在自然语言解决 (NLP) 、计算机视觉(CV)等畛域被宽泛驳回。Blade对该种构造有编译优化(FP32)、量化(INT8)等多种手段。速度测试中,测试数据的shape固定为10x53,各种后端及各种优化伎俩的速度性能如下表所示。能够看到,blade编译优化后或INT8量化后的模型推理速度均优于libtorch与onnxruntime,其中推理的后端是Intel Custom Backend & BladeDisc。值得注意的是,通过量化减速后的4层BERT的速度是2层BERT的1.5倍,意味着能够在提速的同时,让业务用上更大的模型,取得更好的业务精度。模型构造RT减速比(相较 FP32 libtorch) libtorchonnxruntimeBlade地址-2层BERT FP3217.9ms17.5ms14.0ms(编译优化)1.28x地址-4层BERT FP3237.0ms34.5ms28.0ms(编译优化)1.32x地址-4层BERT INT821.9ms26.6ms9.0ms(量化)4.11x地址BERT推理性能展现精度方面,咱们基于CCKS2021中文NLP地址相关性工作[5]展现相干模型性能,如下表所示。达摩院地址团队自研的4层BERT的macro F1精度要高于规范的12层BERT-base。Blade编译优化能够做到精度无损,而通过Blade Compression量化训练后的实在量化模型精度要略高于原始浮点模型。模型构造macro F1(越高越好)12层BERT-base77.24地址-4层BERT78.72(+1.48)地址-4层BERT + Blade编译优化78.72(+1.48)地址-4层BERT + Blade量化78.85(+1.61)地址BERT相干精度后果参考文献[1] https://help.aliyun.com/docum...[2] https://www.aliyun.com/produc...[3] Augmented SBERT: Data Augmentation Method for Improving Bi-Encoders for Pairwise Sentence Scoring Tasks (Thakur et al., NAACL 2021)[4] Rethink Training of BERT Rerankers in Multi-stage Retrieval Pipeline (Gao et al., ECIR 2021)[5] https://tianchi.aliyun.com/co...[6] Enhanced LSTM for natural language inference[J] (Chen Q, Zhu X, Ling Z, et al., ACL 2017)[7] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (Devlin J, Chang M W, Lee K, et al., ACL 2019)[8] https://pytorch.org/docs/stab...[9] https://github.com/intel/neur... 统稿作者:陈博华本文由阿里云机器学习平台PAI团队联结英特尔数据中心软件团队、英特尔人工智能和剖析团队、达摩院NLP地址标准化团队相干我的项目组成员独特参加编写。原文链接:https://click.aliyun.com/m/10...本文为阿里云原创内容,未经容许不得转载。