業界首個視頻分類模型庫
新增視頻模型庫,提供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保存的模型可視化展示。