前言:
Paddle Fluid v1.3版本於今日釋出,在基礎框架、預測引擎、模型建設、分散式訓練各個方向上完成多項升級。
業界首個視訊分類模型庫
新增視訊模型庫,提供5個視訊分類經典模型以及適合視訊分類任務的通用骨架程式碼,使用者可一鍵式高效配置模型完成訓練和評測。
視訊理解權威競賽ActivityNet - Kinetics視訊動作識別任務冠軍方法stNet的resnet50版本開源實現。
基於PaddlePaddle的BERT多機多卡和混合精度訓練
新增支援NLP語義表示BERT模型,支援多機多卡訓練,支援混合精度訓練,訓練速度對比主流實現提升50%+,提供完整部署示例。
分散式訓練效能大幅提升
大規模稀疏引數伺服器Benchmark釋出, CPU多機非同步訓練釋出顯著提升點選率預估任務IO吞吐的built-in reader,多機多卡訓練效能多方面提升。
下面將Paddle Fluid v1.3版本所釋出的內容,全面介紹給廣大開發者:
重要更新
統一Executor和ParallelExecutor介面,使用者只需通過CompiledProgram將單卡模型轉化多卡模型,並利用Executor進行訓練或者預測。
正式釋出AnalysisConfig 預測介面,支援計算圖分析、運算元融合等優化,並支援利用 Intel MKLDNN、Nvidia TensorRT 子圖引擎等第三方庫的加速.
模型庫新增釋出PaddlePaddle視訊模型庫,提供5個視訊分類經典模型以及適合視訊分類任務的通用骨架程式碼,使用者可一鍵式高效配置模型完成訓練和評測。
新增支援NLP語義表示BERT模型,支援多機多卡訓練,支援混合精度訓練,訓練速度對比主流實現提升50%+,提供完整部署示例。
大規模稀疏引數伺服器Benchmark釋出, CPU多機非同步訓練釋出顯著提升點選率預估任務IO吞吐的built-in reader,多機多卡訓練效能多方面提升。
新增支援Intel Deep Learning Boost(VNNI指令集)。在新一代的Intel Xeon Scalable Processor上,使用這個特性的一些模型,INT8預測效能可以達到FP32的2倍。
基礎框架
安裝
新增Linux和MacOS下的中文版本輔助安裝指令碼,提供互動式安裝方式,協助使用者在複雜環境下快速完成PaddlePaddle安裝。
Windows支援優化:新增cuda8,cudnn7的GPU支援,新增AVX指令集、MKLDNN、mnist資料集支援。修復Windows載入Linux/Mac下同版本paddle訓練模型的問題。
增加動態圖基礎功能
動態圖tracer、autograd、python Layer/PyLayer,動態圖支援MLP、GAN、ptbRNN、Resnet模型,動態圖支援Optimizer、GPU訓練。
Executor和ParallelExecutor介面優化
對Executor和ParallelExecutor介面進行統一,使用者只需通過CompiledProgram將單卡模型轉化多卡模型,並利用Executor進行訓練或者預測。
ParallelExecutor優化
對MultiDevSSAGraphBuilder進行重構,使得MultiDevSSAGraphBuilder更易擴充套件。
去除ParallelExecutor中的裝置鎖,提升ParallelExecutor多卡排程效能。中間表達IR和Pass方面的優化
完善C++ IR graph的python介面以及C++ IR pass的python介面。
在framework.py中新增IRGraph類,為在Python層編寫IR Pass做準備。
新增支援網路無鎖更新的Pass。
新增QuantizationTransformPass,此為Quantization Aware Training量化模式訓練前的圖修改操作部分。
記憶體和視訊記憶體方面的優化
新增支援在編譯時加入 Jemalloc 作為動態連結庫,提升記憶體管理的效能,降低基礎框架記憶體管理開銷
新增memory optimize,inplace pass, memory pool early deletion等視訊記憶體優化策略。
新增支援網路無鎖更新的Pass。
新增QuantizationTransformPass,此為Quantization Aware Training量化模式訓練前的圖修改操作部分。
Operator整體層面的優化
每個op在執行前只做一次scope查詢,減少讀寫鎖操作(原來需要做1~5次scope查詢)
新增Temporary Allocator,減少op中的同步操作
新增py_func operator,支援python op接入,使用者可以藉助py_func Operator快速實現所需要的特有操作
重構DDim,Variable Type等,降低基礎框架排程開銷。
INTEL FP32計算相關優化
優化density_prior_box operator,單op四執行緒提速3倍。
優化Stack operator,單op提速16倍。
開發Transpose,Concat和Conv3d三個基於MKLDNN的kernel。
修復lrn operator中MKLDNN kernel精度bug,同時單op提速1.3倍。
修復MKLDNN初始化佔用5G記憶體的問題,目前初始化佔用500MB。
減少從MKLDNN OP kernel到非MKLDNN OP kernel時不必要的reorder。
完善CPU JitKernel
sequence pooling 的jitkernel,純op提升2倍。
softmax 的jitkernel,純op提升2倍,同時使得Bert模型CPU預測提升26%。
常見的基本邏輯:向量的每個元素求平方kVSquare、矩陣乘法kMatMul、向量的最大值kHMax、向量所有元素的和kHSum。
預測引擎
伺服器預測
正式釋出AnalysisConfig 預測介面,支援計算圖分析、運算元融合等優化,並支援利用 Intel MKLDNN、Nvidia TensorRT 子圖引擎等第三方庫的加速。
預釋出 intel CPU上的 預測 INT8 離線量化方案
開發Conv2D,Pool2D,Quantize,Dequantize四個基於MKL-DNN的INT8 kernel。
預釋出Calibration的3個核心Python API(paddle.fluid.contrib.Calibrator)。
開發Calibration工具,保證FP32和INT8的精度在ResNet-50和MobileNet-V1在ImageNet驗證資料集上相差在1%內。
支援Intel Xeon CascadeLake Server(VNNI指令)及Intel Xeon SkyLake Server,效能提升約為1.33倍。
CPU預測速度提升
fuse sequence pooling concatop,支援N (<200)個sequence_pooling op concat起來組成一個新op,整體使得seqpool模型 CPU預測提升56%。
fuse 連續重複的fc op為一個大op,使得seqpool模型CPU預測速度提升15%。
fuse 邏輯為((X * Y).^2 - (X.^2 * Y.^2) ) .* scalar的op組合 , 使得seqpool模型CPU預測速度提升8.2%。
針對輸入tensor元素個數為1的情況,優化compare_op的CPU Kernel。
新增Paddle-TRT 對Calibration INT8的支援,GPU預測速度提升
模型VGG,Resnet50上預測速度達到了Paddle-TRT float32的兩倍效能。
模型VGG,Resnet50在imagenet資料集上測試,精度下降0.3%以內。
運算元融合
增加 fc和 con 相關兩個 fuse,作用於 conv_op CUDNN kernel。
新增Conv+Affine Channel的融合pass,Faster RCNN執行的效能提升26.8%。
新增Transpose+Flatten+Concat 融合pass,MobilenetSSD模型效能提升15%。
實現beam_search operator的CUDA Kernel,並且將相應的top-k、elementwise_add、reshape、log計算融合到beam_search operator中。
功能完善及易用性提升
新增C++ IR graph的Python介面。
新增預測庫的Python介面。
服務端預測支援從記憶體載入模型。
其他
刪除legacy V2程式碼。從1.3版本起,不再支援V1&V2老版本功能。
修復Paddle-TRT elementwise-mul模型執行出現問題的bug。
修復Paddle-TRT trt_engine stream多個連續輸入情況下模型輸出結果異常的bug。
移動端預測
效率優化,常見模型預測速度提升
int8預測支援dequantize和其他op(batch normalization/relu/elementwise add)進行自動kernel融合。
transpose2 operator對於shuffle channel操作進行優化。
gru operator使用neon指令進行優化,並針對batch size為1時進行優化。
優化和實現pooling,支援任意的padding。
優化和實現batch normalization、softmax、elementwise add。
新增支援多個輸入和多個輸出的模型預測。
新增實現prelu6 operator、cast operator、top_k operator。
修復int8 offline量化溢位結果不對的問題。
修復winograd實現在輸入feature map的height和width不相等時結果可能為0的bug。
模型建設
PaddleCV 智慧視覺
新增釋出PaddlePaddle視訊模型庫,包括五個視訊分類模型:Attention Cluster、NeXtVLAD、LSTM,、stNet、TSN。提供適合視訊分類任務的通用骨架程式碼,包括資料讀取和預處理、訓練和預測、網路模型以及指標計算等多個模組。使用者根據需要新增自己的網路模型,直接複用其他模組的程式碼,快速部署模型。
新增支援目標檢測Mask R-CNN模型,效果與主流實現打平。
語義分割DeepLabV3+模型,depthwise_conv op融合,視訊記憶體優化,視訊記憶體佔用對比上一版本減少40%。
PaddleNLP 智慧文字處理
新增支援NLP語義表示BERT模型,支援多機多卡訓練,支援混合精度訓練,訓練速度對比主流實現提升50%+,提供完整部署示例。
機器翻譯Transformer模型優化解碼計算,decoder中加入對encoder output計算結果的cache,預測速度提升一倍。
PaddleRec 智慧推薦
Sequence Semantic Retrieval 新增單機多執行緒、單機多卡執行示例,新增預測功能、資料預處理優化,完善部署示例。
GRU4Rec新增負取樣功能,使用bpr loss和cross entropy loss的效果與原作打平。
分散式訓練
大規模稀疏引數伺服器Benchmark釋出
測試真實業務場景下,特徵規模百億、樣本平均特徵數1k的點選率預估任務,在batch=512情況下,100worker加速比90.5,吞吐量1.36M/s 。
CPU多機非同步訓練
釋出面向點選率預估任務的built-in reader,Criteo資料集下IO總吞吐提升1300%。
GPU多機多卡水平擴充套件效能提升
新增並行模式:PG(ParallelGraph)、MP(Multi-Process),獨立GPU卡之間的計算,提升效能同時,不影響模型精度。
在ResNet50模型,單機8卡V100下,PG, MP模式提升訓練效能30%以上;4機32卡,PG模式提速46%,MP模式提速60%。
在BERT模型,8卡V100下,PG, MP模式提升訓練效能26%。
Multi-Process模式相比Parallel-Graph模式對Reader速度敏感度不高。
GPU多機多卡垂直擴充套件效能提升
新增功能:fp16和混合精度訓練
Fp16單機單卡加速情況:ResNet50提速約87%,BERT提速約70%。
BERT同時開啟PG和混合精度,單機8卡下單位時間吞吐提升120%。
ResNet50同時開啟混合精度訓練和MP模式,在V100單機8卡、4機32卡下,單位時間吞吐提升100%。
典型模型收斂速度優化
新增功能:動態Batch Size,動態Image Resize方法。
Resnet50 on Imagenet資料集:訓練收斂輪數下降為標準訓練方法的1/3左右。
VisualDL
VisualDL graph支援Paddle fluid儲存的模型視覺化展示。
更多內容,請了解:https://github.com/PaddlePaddle/Paddle/releases