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

飛槳PaddlePaddle發表於2019-03-05

業界首個影片分類模型庫

新增影片模型庫,提供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

相關文章