百度Paddle Fluid v1.3版本官方重磅更新

Paddle Fluid v1.3版本於今日發佈,在基礎框架、預測引擎、模型建設、分佈式訓練各個方向上完成多項升級。python

業界首個視頻分類模型庫服務器

新增視頻模型庫,提供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保存的模型可視化展現。

相關文章
相關標籤/搜索