攜程AI推理性能的自動化優(yōu)化實踐
一、背景
近年來,人工智能逐漸在安防,教育,醫(yī)療和旅游等工業(yè)和生活場景中落地開花。在攜程旅游業(yè)務上,AI技術同樣廣泛覆蓋了多個旅游產品和旅游服務領域,攜程度假AI研發(fā)根據(jù)旅游的特定場景和業(yè)務需求,將自然語言處理,機器翻譯,計算機視覺,搜索排序等主流AI技術成功應用于旅游度假的多個業(yè)務線,例如自由行,跟團游,簽證,玩樂和租車等。
從技術角度,為了適應不同的業(yè)務場景需求,涉及到多種AI技術,包括傳統(tǒng)機器學習,卷積神經(jīng)網(wǎng)絡,Transformer等深度學習模型結構,以及知識圖譜和圖神經(jīng)網(wǎng)絡等技術領域。同時,為了充分挖掘AI技術的優(yōu)勢,模型設計復雜度日漸提升,包括模型深度,寬度以及結構復雜度等各個維度,計算量的增大使得AI推理性能瓶頸日益凸顯,尤其是實時性的業(yè)務需求對推理速度要求更高。為了追求最佳推理性能,往往需要手動進行逐個優(yōu)化,涉及的開發(fā),部署和溝通成本都很高。主要問題集中在:
- 模型結構種類多,性能瓶頸差異較大,適用的優(yōu)化方法各有不同,手動優(yōu)化成本高;
- 優(yōu)化方法眾多,自上而下,涉及多種模型壓縮方式,系統(tǒng)級,運行時優(yōu)化等,手動優(yōu)化門檻高;
- 逐個手動優(yōu)化,可推廣性差,技術覆蓋面有限;
- 硬件平臺的差異,需要針對性調優(yōu),導致優(yōu)化的人力成本和部署成本都很高;
- 新模型的發(fā)布和迭代,需要應用優(yōu)化方法,涉及較高的溝通和接入成本,同時帶來了性能的不穩(wěn)定性;
- 模型壓縮技術對不同模型的優(yōu)化效果有所差異,可能需要進行模型的再訓練,訓練和數(shù)據(jù)準備流程較長,效率低下。
因此,為了降低優(yōu)化,部署和迭代成本,提高工作效率,并保證性能穩(wěn)定,我們嘗試搭建模型自動化優(yōu)化平臺,旨在為算法模型提供更全面易用,穩(wěn)定性更好,使用和維護成本更低的優(yōu)化解決方案。
二、優(yōu)化平臺的主要框架
從性能優(yōu)化方法論的角度,無論是自動優(yōu)化還是手動優(yōu)化,主要關注以下兩大方向:
- 降低算法復雜度:可通過調整或簡化模型結構,或者保持結構不變,改進算法實現(xiàn)效率;
- 充分發(fā)揮軟硬件性能:模型結構和算法不變,優(yōu)化軟件執(zhí)行效率,使用硬件優(yōu)勢特征,最大化硬件執(zhí)行效率。
圍繞這兩大優(yōu)化方向以及人工智能的主流技術方向,優(yōu)化平臺的整體架構層自下而上可以劃分為:
- 硬件平臺和操作系統(tǒng)層,包含x86架構的CPU,GPU,ARM,F(xiàn)PGA等多種平臺,操作系統(tǒng)主要是Linux OS;
- 引擎框架層,主要是Tensorflow,Pytorch等人工智能主流框架;
- 推理優(yōu)化層,主要是由我們結合業(yè)務場景和實際需求進行自主研發(fā)的優(yōu)化技術,包含高性能算子庫,圖優(yōu)化和修改工具以及量化蒸餾等模型壓縮模塊;
- 算法模型:包含業(yè)界常用模型,例如以卷積為主要結構的CV模型,Resnet,GoogleNet,YOLO等;以Transformer為主要結構的NLP模型Bert,Albert等;
- 應用場景:主要體現(xiàn)在旅游場景中的實際應用,例如智能客服平臺,機器翻譯,搜索排序等應用。
三、自動化優(yōu)化流程
優(yōu)化平臺的搭建能夠系統(tǒng)有效地將優(yōu)化技術整合起來,并快速應用于實際需求,但是如果不實現(xiàn)自動化優(yōu)化,優(yōu)化效率比較低,部署和迭代成本,溝通和接入成本高。因此我們建立了自動化優(yōu)化流程,將所支持的優(yōu)化技術涵蓋在內,結合模型訓練平臺,數(shù)據(jù)標注平臺,從模型設計,模型訓練到模型推理優(yōu)化,模型部署全鏈路,實現(xiàn)零介入無感知的優(yōu)化效果,大大提升工作效率以及整體優(yōu)化效果的穩(wěn)定性。
圖2所示為數(shù)據(jù)平臺,模型訓練平臺,模型優(yōu)化和部署的大概流程。具體有哪些優(yōu)化手段,如何進行自動化實現(xiàn)的流程細節(jié)如圖3所示。
四、功能模塊
自動化優(yōu)化平臺的主要功能模塊分四部分:
- 高性能算子庫,包括算子重寫,算子合并等多個優(yōu)化,支持attention,softmax,Layer norm等多個常用算子;
- 計算圖優(yōu)化,主要進行計算圖搜索,修改替換模型圖結構,合并生成新的模型文件進行推理部署;同時包含常用的圖優(yōu)化和修改工具;
- 模型壓縮模塊,包括模型靜態(tài)和動態(tài)量化,模型剪枝和蒸餾等;
- 模型部署優(yōu)化,主要提供部署的優(yōu)化方案,包括部署設計,運行時環(huán)境配置等。
4.1 高性能算子庫
該模塊主要實現(xiàn)了常用的算子以及激活函數(shù),包含基礎算子,例如卷積,全連接層,batch norm,softmax等等以及合并后的經(jīng)典的模型結構,例如transformer encoder,decoder等,基于tensorflow實現(xiàn),采用c++實現(xiàn),支持CPU和GPU平臺的優(yōu)化。
具體的優(yōu)化方法涵蓋了:
- 算法改進,例如卷積算法的實現(xiàn),將im2col和winograd卷積相結合,針對不同卷積核大小自適應使用最佳算法,實現(xiàn)最快的速度;
- 內存重構,以BERT模型為例,最核心也是最耗時的計算模塊之一就是多頭自注意力機制multi-head self-attention,包含了大量的矩陣乘法計算,根據(jù)算法原理,包括query層,key層和value層的獲取,query和key點乘等等,更重要的是當前的tensorflow算法實現(xiàn)包含了大量的行列變換操作(transpose),transpose帶來大量的內存訪問開銷,這些問題可以通過內存重構來避免。
同時很多矩陣乘法實現(xiàn)可以通過批量矩陣乘法調用提升計算效率,從而帶來運行速度的提升。如下圖5所示,self-attention機制原始實現(xiàn)流程包含了三次冗余的transpose操作,T(a)表示張量a的transpose形式。通過對內存重構可以避免這三次transpose操作。如圖6所示,優(yōu)化后的計算流程不包含transpose。
二者對比,可以明顯看出,優(yōu)化后減少了4次transpose操作,也就是減少了內存訪問的開銷,同時對于矩陣乘法,調用批量矩陣乘法替代單個矩陣乘法操作,效率更高。
- Intrinsic指令集優(yōu)化,例如在CPU平臺使用合適的向量化指令AVX512以及專門針對AI的VNNI指令等;
- 算子融合,以transformer為例,每一層包含大量的零散算子,包括self-Attention,GELU激活函數(shù),歸一化Layer Normalization算子等多個零散算子,為了減少數(shù)據(jù)訪問開銷,將多個算子進行融合,實現(xiàn)新的GPU kernel。通過算子合并,算子數(shù)量減少約90%,模型涉及內存搬移的操作去除率100%,90%的時間集中在核心計算的kernel launcher。如圖7所示。
4.2 模型壓縮
模型壓縮是提升推理性能的另一個有效手段,主要是指在算法層面上的模型優(yōu)化,保證精度的前提下,通過合理的降低模型結構或者參數(shù)量,從而實現(xiàn)減少整個模型計算量的目的。
模型壓縮的主要作用有:
- 簡化模型結構,降低計算復雜度,提升推理速度
- 減少模型參數(shù)和模型尺寸,降低對內存的占用。
宏觀上來講,當前的優(yōu)化平臺支持的模型壓縮方法有模型蒸餾,模型剪枝,低精度量化等。
4.2.1 模型蒸餾
模型蒸餾采用的是遷移學習,通過預先訓練好的復雜模型(Teacher model)的輸出作為監(jiān)督信號去訓練另外一個簡單的學生網(wǎng)絡(Student Model),從而實現(xiàn)對模型的簡化,減少模型參數(shù)。模型蒸餾普遍性很強,可有效提升小模型準確率,但是調參相對困難,主要的核心的問題包括,如何選擇特征層如何設計損失函數(shù),學生模型的設計和數(shù)據(jù)集的選擇等等。圖8是我們壓縮框架中實現(xiàn)的對Transformer的decoder模型的蒸餾實現(xiàn)。
總損失函數(shù)構成:
其中α和β分別表示相應的損失值權重系數(shù),α∈(0,1],β∈R,Lsoft是 Teacher網(wǎng)絡的輸出與Student網(wǎng)絡模型輸出的損失值,Lhard - 訓練數(shù)據(jù)語料真實標簽與Student網(wǎng)絡模型輸出的損失值,LAT_FMT - Teacher和Student網(wǎng)絡模型的Decoder 的中間輸出內容損失值,采用逐級分層蒸餾的方法,最終推理速度加速比達到2倍,精度損失BLEU值在可接受范圍內(4%)。
4.2.2 低精度量化
低精度量化更多是從計算機硬件的設計角度,修改數(shù)據(jù)類型,降低數(shù)據(jù)精度,從而進行加速,依賴于硬件實現(xiàn)。量化的方式也包含多種,訓練后量化(PTQ post training quantization),訓練時量化(QAT,quantization aware traning)等。
目前我們優(yōu)化平臺支持float16和int8,其中int8量化只支持PTQ方式,一般情況下,為了保證模型精度,采用int8量化需要對量化后的模型校準,校準方式實現(xiàn)依賴于復雜的數(shù)學算法,目前較常用的是KL散度,對于CV模型,精度損失可接受。對于基于Transformer的NLP模型,精度損失較大,我們目前只支持GPU平臺的float16實現(xiàn)。相比于float32,存儲空間和帶寬減半,精度幾乎無損失,吞吐提升可達3倍。
4.2.3 模型剪枝
剪枝的主要思想是將權重矩陣中相對“不重要”的權值剔除,然后再對網(wǎng)絡進行微調;方法簡單,壓縮效果可控,但是在剪枝粒度和方法選擇需要認為定義規(guī)則,而且非結構化的剪枝效果需要依賴于硬件平臺實現(xiàn)。模型剪枝在計算機視覺領域廣泛使用,并取得了不錯的效果。
圖9舉例實現(xiàn)了一種典型的結構化剪枝的方法[4]。我們針對CV模型,在原始模型中加入batch_normal層,對batch_normal的參考論文2:ChannelPruning for Accelerating Very Deep Neural Networks論文中提出利用channel進行剪枝,實驗如下:在超分辨率的實驗中,考慮在原始模型中加入batch_normal層,然后對batch_nomal的α值做正則化,最后利用該值作為依據(jù)進行剪枝,對訓練好的模型中的batch_normal層的參數(shù)α進行分析,針對不同的卷積模型應用同樣的方式,發(fā)現(xiàn)有些模型有近一半的參數(shù)在1e-5數(shù)量級,此外同一層中的分布方差極小,據(jù)此對模型進行通道級別的剪枝并進行fine tune訓練,剪枝效果明顯,模型大小減少到原來的1/4,精度不變的前提下,加速比可達4倍。而對于yolov3模型,大部分參數(shù)差異不大(MAP降低2%),可剪掉的有限,所以為了保持精度,參數(shù)量減半,加速比1.5x左右。

4.3 接口設計
模型優(yōu)化平臺采用即插即用的模塊化設計,可無縫對接模型訓練平臺,模型發(fā)布平臺等。
- 訓練平臺的調用和反饋:無縫對接訓練平臺,python接口調用或者web服務接口;如果需要重新訓練,向訓練平臺申請接口;
- 優(yōu)化結果的接口提供:支持*.pb格式的模型輸出;
具體使用方式如圖10和圖11所示。

圖11給出了模型壓縮模塊的調用方式。

五、優(yōu)化成果
以實際應用機器翻譯的Transformer模型為例,所測試平臺為CPU: Intel(R) Xeon(R) Silver 4210CPU @ 2.20GHz; GPU:Nvidia T4,以固定算例的平均響應延遲為測試數(shù)據(jù),優(yōu)化后和優(yōu)化前的加速比如下圖12所示。
其中,原始性能基于tensorflow1.14為測試基準,在GPU平臺框架層優(yōu)化和編譯運行時等多層優(yōu)化實現(xiàn),圖13是Transformer翻譯模型基于T4平臺使用模型壓縮和高性能算子庫優(yōu)化之后的對比結果,圖中給出的是token長度為64,不同batch大小時的延遲和吞吐提升比例,實際中token越大,float16的優(yōu)勢越明顯。


基于CPU硬件平臺,針對CV和NLP模型(例如yolov3,bert和albert等),也取得了不錯的優(yōu)化效果,延遲加速比最高達到5倍以上。
六、未來展望
AI優(yōu)化的潛力和需求很大,因為AI理論和模型的日益完善,應用場景對模型精度等推理服務質量的更高要求,必然使得模型結構和計算復雜度越來越高,對推理服務的性能需求只會有增無減。從成本和效率多個角度考慮,自動優(yōu)化是必然趨勢,并且業(yè)界也都陸續(xù)開展了相關研究,取得了一些進展。
依舊從兩方面來看,同樣是基于自動化優(yōu)化這個大方向,算子優(yōu)化等系統(tǒng)級優(yōu)化最終都會通過tvm等AI編譯器實現(xiàn),而模型壓縮則側重于使用AutoML的思想,基于當前平臺和實際需求,通過結構搜索找到符合要求的最簡化的網(wǎng)絡。當然,當前的蒸餾,剪枝等傳統(tǒng)壓縮方法也可以跟AutoML的思想相結合,同樣能夠高效地實現(xiàn)壓縮效果。
因此,我們的自動化優(yōu)化平臺也正是基于自動化優(yōu)化的思路,綜合考慮業(yè)務場景需求,參考業(yè)界更先進的優(yōu)化技術,為旅游場景的AI模型帶來更加高效的優(yōu)化方案,推動AI技術在旅游業(yè)務更好落地。














































