百度Paddle Fluid v1.3版本重磅更新 新增視訊模型庫、BERT模型

pythontab發表於2019-03-05

前言:

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

 

業界首個視訊分類模型庫

新增視訊模型庫,提供5個視訊分類經典模型以及適合視訊分類任務的通用骨架程式碼,使用者可一鍵式高效配置模型完成訓練和評測。

視訊理解權威競賽ActivityNet - Kinetics視訊動作識別任務冠軍方法stNet的resnet50版本開源實現。

基於PaddlePaddle的BERT多機多卡和混合精度訓練

新增支援NLP語義表示BERT模型,支援多機多卡訓練,支援混合精度訓練,訓練速度對比主流實現提升50%+,提供完整部署示例。

分散式訓練效能大幅提升

大規模稀疏引數伺服器Benchmark釋出, CPU多機非同步訓練釋出顯著提升點選率預估任務IO吞吐的built-in reader,多機多卡訓練效能多方面提升。

下面將Paddle Fluid v1.3版本所釋出的內容,全面介紹給廣大開發者:

重要更新

  • 統一ExecutorParallelExecutor介面,使用者只需通過CompiledProgram將單卡模型轉化多卡模型,並利用Executor進行訓練或者預測。

  • 正式釋出AnalysisConfig 預測介面,支援計算圖分析、運算元融合等優化,並支援利用 Intel MKLDNNNvidia TensorRT 子圖引擎等第三方庫的加速.

  • 模型庫新增釋出PaddlePaddle視訊模型庫,提供5個視訊分類經典模型以及適合視訊分類任務的通用骨架程式碼,使用者可一鍵式高效配置模型完成訓練和評測。

  • 新增支援NLP語義表示BERT模型,支援多機多卡訓練,支援混合精度訓練,訓練速度對比主流實現提升50%+,提供完整部署示例。

  • 大規模稀疏引數伺服器Benchmark釋出, CPU多機非同步訓練釋出顯著提升點選率預估任務IO吞吐的built-in reader,多機多卡訓練效能多方面提升。

  • 新增支援Intel Deep Learning Boost(VNNI指令集)。在新一代的Intel Xeon Scalable Processor上,使用這個特性的一些模型,INT8預測效能可以達到FP322倍。

基礎框架

  • 安裝

    • 新增LinuxMacOS下的中文版本輔助安裝指令碼,提供互動式安裝方式,協助使用者在複雜環境下快速完成PaddlePaddle安裝。

    • Windows支援優化:新增cuda8cudnn7GPU支援,新增AVX指令集、MKLDNNmnist資料集支援。修復Windows載入Linux/Mac下同版本paddle訓練模型的問題。

  • 增加動態圖基礎功能

    • 動態圖tracerautogradpython Layer/PyLayer,動態圖支援MLPGANptbRNNResnet模型,動態圖支援OptimizerGPU訓練。

  • ExecutorParallelExecutor介面優化

    • ExecutorParallelExecutor介面進行統一,使用者只需通過CompiledProgram將單卡模型轉化多卡模型,並利用Executor進行訓練或者預測。

    • ParallelExecutor優化
           
      MultiDevSSAGraphBuilder進行重構,使得MultiDevSSAGraphBuilder更易擴充套件。
           
      去除ParallelExecutor中的裝置鎖,提升ParallelExecutor多卡排程效能。

  • 中間表達IRPass方面的優化

    • 完善C++ IR graphpython介面以及C++ IR passpython介面。

    • framework.py中新增IRGraph類,為在Python層編寫IR Pass做準備。

    • 新增支援網路無鎖更新的Pass

    • 新增QuantizationTransformPass,此為Quantization Aware Training量化模式訓練前的圖修改操作部分。

  • 記憶體和視訊記憶體方面的優化

    • 新增支援在編譯時加入 Jemalloc 作為動態連結庫,提升記憶體管理的效能,降低基礎框架記憶體管理開銷

    • 新增memory optimizeinplace pass, memory pool early deletion等視訊記憶體優化策略。

    • 新增支援網路無鎖更新的Pass

    • 新增QuantizationTransformPass,此為Quantization Aware Training量化模式訓練前的圖修改操作部分。

  • Operator整體層面的優化

    • 每個op在執行前只做一次scope查詢,減少讀寫鎖操作(原來需要做1~5scope查詢)

    • 新增Temporary Allocator,減少op中的同步操作

    • 新增py_func operator,支援python op接入,使用者可以藉助py_func Operator快速實現所需要的特有操作

  • 重構DDimVariable Type等,降低基礎框架排程開銷。

  • INTEL FP32計算相關優化

    • 優化density_prior_box operator,單op四執行緒提速3倍。

    • 優化Stack operator,單op提速16倍。

    • 開發TransposeConcatConv3d三個基於MKLDNNkernel

    • 修復lrn operatorMKLDNN 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 MKLDNNNvidia TensorRT 子圖引擎等第三方庫的加速。

  • 預釋出 intel CPU上的 預測 INT8 離線量化方案

    • 開發Conv2DPool2DQuantizeDequantize四個基於MKL-DNNINT8 kernel

    • 預釋出Calibration3個核心Python APIpaddle.fluid.contrib.Calibrator)。

    • 開發Calibration工具,保證FP32INT8的精度在ResNet-50MobileNet-V1ImageNet驗證資料集上相差在1%內。

    • 支援Intel Xeon CascadeLake ServerVNNI指令)及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) ) .* scalarop組合 , 使得seqpool模型CPU預測速度提升8.2%

    • 針對輸入tensor元素個數為1的情況,優化compare_opCPU Kernel

  • 新增Paddle-TRT Calibration INT8的支援,GPU預測速度提升

    • 模型VGGResnet50上預測速度達到了Paddle-TRT float32的兩倍效能。

    • 模型VGGResnet50imagenet資料集上測試,精度下降0.3%以內。

  • 運算元融合

    • 增加 fc con 相關兩個 fuse,作用於 conv_op CUDNN kernel

    • 新增Conv+Affine Channel的融合passFaster RCNN執行的效能提升26.8%

    • 新增Transpose+Flatten+Concat 融合passMobilenetSSD模型效能提升15%

    • 實現beam_search operatorCUDA Kernel,並且將相應的top-kelementwise_addreshapelog計算融合到beam_search operator中。

  • 功能完善及易用性提升

    • 新增C++ IR graphPython介面。

    • 新增預測庫的Python介面。

    • 服務端預測支援從記憶體載入模型。

  • 其他

    • 刪除legacy V2程式碼。從1.3版本起,不再支援V1&V2老版本功能。

    • 修復Paddle-TRT elementwise-mul模型執行出現問題的bug

    • 修復Paddle-TRT trt_engine stream多個連續輸入情況下模型輸出結果異常的bug

移動端預測

  • 效率優化,常見模型預測速度提升

    • int8預測支援dequantize和其他opbatch normalization/relu/elementwise add)進行自動kernel融合。

    • transpose2 operator對於shuffle channel操作進行優化。

    • gru operator使用neon指令進行優化,並針對batch size1時進行優化。

    • 優化和實現pooling,支援任意的padding

    • 優化和實現batch normalizationsoftmaxelementwise add

  • 新增支援多個輸入和多個輸出的模型預測。

  • 新增實現prelu6 operatorcast operatortop_k operator

  • 修復int8 offline量化溢位結果不對的問題。

  • 修復winograd實現在輸入feature mapheightwidth不相等時結果可能為0bug

模型建設

  • PaddleCV 智慧視覺

    • 新增釋出PaddlePaddle視訊模型庫,包括五個視訊分類模型:Attention ClusterNeXtVLADLSTM,stNetTSN。提供適合視訊分類任務的通用骨架程式碼,包括資料讀取和預處理、訓練和預測、網路模型以及指標計算等多個模組。使用者根據需要新增自己的網路模型,直接複用其他模組的程式碼,快速部署模型。

    • 新增支援目標檢測Mask R-CNN模型,效果與主流實現打平。

    • 語義分割DeepLabV3+模型,depthwise_conv op融合,視訊記憶體優化,視訊記憶體佔用對比上一版本減少40%

  • PaddleNLP 智慧文字處理

    • 新增支援NLP語義表示BERT模型,支援多機多卡訓練,支援混合精度訓練,訓練速度對比主流實現提升50%+,提供完整部署示例。

    • 機器翻譯Transformer模型優化解碼計算,decoder中加入對encoder output計算結果的cache,預測速度提升一倍。

  • PaddleRec 智慧推薦

    • Sequence Semantic Retrieval 新增單機多執行緒、單機多卡執行示例,新增預測功能、資料預處理優化,完善部署示例。

    • GRU4Rec新增負取樣功能,使用bpr losscross entropy loss的效果與原作打平。

分散式訓練

  • 大規模稀疏引數伺服器Benchmark釋出

    • 測試真實業務場景下,特徵規模百億、樣本平均特徵數1k的點選率預估任務,在batch=512情況下,100worker加速比90.5,吞吐量1.36M/s 

  • CPU多機非同步訓練

    • 釋出面向點選率預估任務的built-in readerCriteo資料集下IO總吞吐提升1300%

  • GPU多機多卡水平擴充套件效能提升

    • 新增並行模式:PGParallelGraph)、MPMulti-Process),獨立GPU卡之間的計算,提升效能同時,不影響模型精度。

    • ResNet50模型,單機8V100下,PG, MP模式提升訓練效能30%以上;432卡,PG模式提速46%MP模式提速60%

    • BERT模型,8V100下,PG, MP模式提升訓練效能26%

    • Multi-Process模式相比Parallel-Graph模式對Reader速度敏感度不高。

  • GPU多機多卡垂直擴充套件效能提升

    • 新增功能:fp16和混合精度訓練

    • Fp16單機單卡加速情況:ResNet50提速約87%BERT提速約70%

    • BERT同時開啟PG和混合精度,單機8卡下單位時間吞吐提升120%

    • ResNet50同時開啟混合精度訓練和MP模式,在V100單機8卡、432卡下,單位時間吞吐提升100%

  • 典型模型收斂速度優化

    • 新增功能:動態Batch Size,動態Image Resize方法。

    • Resnet50 on Imagenet資料集:訓練收斂輪數下降為標準訓練方法的1/3左右。

VisualDL

  • VisualDL graph支援Paddle fluid儲存的模型視覺化展示。

 更多內容,請了解:https://github.com/PaddlePaddle/Paddle/releases


相關文章