当前位置: 首页 > 科技观察

携程AI推理性能自动化优化

时间:2023-03-18 01:30:18 科技观察

一、背景近年来,人工智能在安防、教育、医疗、旅游等工业和生活场景中逐渐开花结果。在携程的旅游业务方面,AI技术也覆盖了广泛的旅游产品和旅游服务。根据出行的具体场景和业务需求,携程AI研发集成了自然语言处理、机器翻译、计算机视觉、搜索排序等主流AI。该技术已成功应用于自由行、跟团游、签证、娱乐、租车等多个旅游度假业务领域。从技术角度来看,为了满足不同业务场景的需求,涉及到多种AI技术,包括传统的机器学习、卷积神经网络、Transformer等深度学习模型结构,以及知识图谱等技术领域和图神经网络。同时,为了充分挖掘AI技术的优势,模型设计的复杂度与日俱增,包括模型深度、宽度、结构复杂度等。计算量的增加使得AI推理性能瓶颈日益突出,尤其是对于实时业务需求。对推理速度的要求更高。为了追求最好的推理性能,往往需要人工一项一项地进行优化,这涉及到高昂的开发、部署和通信成本。主要问题集中在:模型结构种类繁多,性能瓶颈差异大,适用的优化方法不同,人工优化成本高;优化方式很多,自上而下,涉及各种模型压缩方式、系统级、运行时优化等,人工优化门槛高;人工一一优化,泛化性差,技术覆盖面有限;硬件平台的差异需要有针对性的调优,导致优化的人工成本和部署成本高;新模型的发布和迭代,需要应用优化方法,通信和接入成本高,同时带来性能不稳定;模型压缩技术对不同的模型有不同的优化效果,可能需要进行模型再训练、训练和数据准备过程漫长且效率低下。因此,为降低优化、部署和迭代成本,提高工作效率,保证性能稳定,我们尝试构建模型自动化优化平台,旨在提供更全面易用、稳定性更好的算法模型,并降低使用和维护成本。优化的解决方案。2.优化平台主要框架从性能优化方法论来看,无论是自动优化还是手动优化,主要集中在以下两个方向:降低算法复杂度:通过调整或简化模型来改进算法结构,或保持结构不变实现效率;充分发挥软件和硬件的性能:模型结构和算法不变,优化软件执行效率,发挥硬件优势,最大限度地提高硬件执行效率。围绕这两个优化方向和人工智能的主流技术方向,优化平台整体架构层自下而上分为:硬件平台和操作系统层,包括x86架构CPU、GPU、ARM、FPGA等platforms,操作系统主要是LinuxOS;引擎框架层主要是Tensorflow、Pytorch等人工智能主流框架;推理优化层主要是我们结合业务场景和实际需求自主研发的优化技术,包括高性能算子库、图优化修改工具、量化蒸馏等模型压缩模块;算法模型:包括业界常用的模型,如以卷积为主要结构的CV模型、Resnet、GoogleNet、YOLO等;以Transformer为主要结构的NLP模型Bert,Albert等;应用场景:主要体现在旅游场景的实际应用,如智能客服平台、机器翻译、搜索排序等应用。图1模型平台框架组成3.自动优化过程优化平台的构建可以系统有效地集成优化技术,并快速将其应用到实际需求中。但如果不实现自动优化,优化效率比较低,部署迭代成本高。通信和访问成本很高。为此,我们建立了自动化优化流程,涵盖支持的优化技术,结合模型训练平台和数据标注平台,从模型设计、模型训练到模型推理优化、模型部署全链路,做到零干预、无感知优化效果,大大提高工作效率和整体优化效果的稳定性。图2展示了数据平台、模型训练平台、模型优化和部署的一般流程。具体有哪些优化方法以及如何实现自动化的过程细节如图3所示。图2模型自动化优化实现框架图3自动化优化实现的基本流程4.功能模块自动化的主要功能模块优化平台分为四个部分:高性能算子库,包括算子重写、算子合并等优化,支持attention、softmax、layernorm等多种常用算子;计算图优化,主要是搜索计算图,修改替换模型图结构,合并生成新的模型文件进行推理和部署;还包括常用的图形优化和修改工具;模型压缩模块,包括模型静态和动态量化、模型剪枝和蒸馏等;模型部署优化,主要提供部署优化方案,包括部署设计、运行时环境配置等。图4模型优化平台基本模块4.1高性能算子库该模块主要实现了常用的算子和激活函数,包括卷积、全连接层、batchnorm、softmax等基本算子,以及合并经典transformerencoder、decoder等模型结构基于tensorflow实现,c++实现,支持CPU和GPU平台优化。具体优化方法包括:算法改进,比如卷积算法的实现,结合im2col和winograd卷积,针对不同的卷积核大小自适应使用最优算法,达到最快的速度;内存重构,以BERT模型为例。其中最核心也是最耗时的计算模块是multi-headself-attention机制,其中包含了大量的矩阵乘法计算。根据算法原理,它包括查询层、键层和值层。获取、查询和关键点乘法等,更重??要的是目前的tensorflow算法实现包括大量的行列变换操作(transpose),transpose带来大量的内存访问开销,这些问题可以通过内存重构来避免.同时,很多矩阵乘法实现可以通过批量调用矩阵乘法来提高计算效率,从而提高运行速度。如下图5所示,self-attention机制的原始实现过程包括三个冗余的转置操作,T(a)表示张量a的转置形式。这三个转置操作可以通过重构内存来避免。如图6所示,优化后的计算过程不包含转置。图5Self-attention6原始实现流程图self-attention优化后的实现过程对比。可以明显看出优化后减少了4次转置操作,意味着内存访问开销降低了。同时,对于矩阵乘法,调用Batched矩阵乘法代替了单一的矩阵乘法运算,效率更高。内在指令集优化,例如在CPU平台上使用合适的向量化指令AVX512和专门针对AI的VNNI指令;operatorfusion,以transformer为例,每一层包含大量分散的算子,包括self-Attention,GELUActivationfunction,normalizationLayerNormalization算子等分散的算子,为了减少数据访问开销,将多个算子融合到实现一个新的GPU内核。通过算子合并,算子数量减少约90%,涉及内存转移的模型算子去除率为100%,90%的时间集中在核心计算内核启动器上。如图7所示。图7算子融合示例4.2模型压缩模型压缩是提高推理性能的另一种有效手段。主要是指算法层面的模型优化。在保证精度的前提下,可以合理减少模型结构或参数数量,以达到降低整个模型计算量的目的。模型压缩的主要作用是:简化模型结构,降低计算复杂度,提高推理速度减少模型参数和模型大小,减少内存占用。宏观上,目前优化平台支持的模型压缩方式包括模型蒸馏、模型剪枝、低精度量化等。4.2.1ModelDistillation模型蒸馏采用迁移学习,将预训练的复杂模型(Teachermodel)的输出作为监督信号,训练另一个简单的学生网络(StudentModel),从而简化模型,减少Model参数。模型蒸馏具有很强的普适性,可以有效提高小模型的精度,但参数调整相对困难。主要核心问题包括如何选择特征层、如何设计损失函数、学生模型的设计和数据集的选择等。图8是在我们的压缩框架中实现的Transformer的解码器模型的蒸馏实现。图8Transformer模型蒸馏总损失函数构成:其中α和β代表对应的损失值权重系数,α∈(0,1),β∈R,Lsoft是Teacher网络的输出和Student网络的损失值模型输出,Lhard——训练数据语料的真实标签和Student网络模型输出的损失值,LAT_FMT——Teacher和Student网络模型的Decoder中间输出内容的损失值,使用采用逐步分层蒸馏的方法,最终推理速度提升2倍,精度损失的BLEU值在可接受范围内(4%)。4.2.2Low-precisionquantizationLow-precisionquantizationismore从计算机硬件设计的角度,修改数据类型和降低数据精度来加速,这取决于硬件实现。量化方法也包括各种方法,例如训练后量化(PTQpost训练量化)、训练期间量化(QAT,quantizationawaretraning)等。目前我们的优化平台支持float16和int8,int8量化只支持PTQ模式。通常,为了保证模型的准确性,int8量化需要对量化后的模型进行标定。标定方法依赖于复杂的数学算法,目前较为常用。是KL散度,对于CV模型来说,精度损失是可以接受的。对于基于Transformer的NLP模型,精度损失较大,我们目前只支持GPU平台的float16实现。与float32相比,存储空间和带宽减半,精度几乎没有损失,吞吐量最多可提升3倍。4.2.3模型剪枝剪枝的主要思想是去掉权重矩阵中相对“不重要”的权重,然后对网络进行微调;方法简单,压缩效果可控,但剪枝粒度和方法选择需要考虑规则定义,非结构化剪枝效果需要依赖硬件平台实现。模型剪枝在计算机视觉领域应用广泛,取得了很好的效果。图9举例说明了一种典型的结构化剪枝方法[4]。对于CV模型,我们将batch_normal层添加到原始模型。batch_normal参考论文2:ChannelPruningforAcceleratingVeryDeepNeuralNetworks论文提出使用通道进行剪枝。实验如下:在超分辨率实验中,考虑在原来的模型中加入batch_normal层,然后对batch_nomal的α值进行正则化处理,最后以这个值作为剪枝的依据,分析batch_normal的参数α层,对不同的卷积模型应用相同的方法发现,一些模型近一半的参数在1e-5量级,同一层的分布方差极小。在此基础上,在通道级别对模型进行剪枝并进行微调训练。剪枝效果明显,模型尺寸减小。到原来的1/4,在精度相同的前提下,加速比可以达到4倍。对于yolov3模型,大部分参数差异不大(MAP降低了2%),而且切割次数有限,所以为了保持精度,参数数量减半,加速比约为1.5倍。图9模型剪枝示例4.3接口设计模型优化平台采用即插即用的模块化设计,可以与模型训练平台和模型发布平台无缝对接。训练平台调用及反馈:无缝对接训练平台,python接口调用或web服务接口;如需再培训,申请培训平台接口;优化结果接口提供:支持*.pb格式的模型输出;具体使用方法如图10和图11所示。图10高性能算子库的调用图11为模型压缩模块的调用方法。图11模型压缩模块调用5.优化结果以机器翻译实际应用的Transformer模型为例。测试平台为CPU:Intel(R)Xeon(R)Silver4210CPU@2.20GHz;GPU:NvidiaT4,作为固定示例的平均响应延迟为测试数据,优化后和优化前的加速比如下图12所示。其中,原始性能以tensorflow1.14为测试基准,在GPU平台框架层优化、编译运行时等多层优化中实现。图13是基于T4平台使用模型压缩和高性能算子库优化的Transformer翻译模型对比。结果,该图显示了令牌长度为64和不同批大小时的延迟和吞吐量改进比率。在实践中,token越大,float16的优势越明显。图12和图13基于CPU硬件平台。对于CV和NLP模型(如yolov3、bert和albert等),也取得了不错的优化效果,延迟加速比可以达到5倍以上。6、未来展望AI优化具有巨大的潜力和需求,因为AI理论和模型日趋完善,应用场景对模型精度等推理服务质量要求更高,必然使模型结构和计算复杂度更高和更高。推理服务的性能需求只会增加。从成本和效率的角度来看,自动优化是必然趋势,业界也开展了相关研究并取得了一定进展。从两个角度来说,也是基于自动优化的大方向。算子优化等系统级优化最终会通过tvm等AI编译器来实现,而模型压缩则侧重于使用AutoML的思想,基于当前平台和实际需求,通过结构搜索找到满足要求的最简化网络。当然,目前传统的蒸馏、剪枝等压缩方式也可以结合AutoML的思想,同样可以高效的达??到压缩效果。因此,我们的自动化优化平台也是基于自动化优化的思想,综合考虑业务场景的需求,并参考了业界更先进的优化技术,为旅游AI模型带来更高效的优化方案场景,更好地推动人工智能技术在旅游业务中的应用落地。