業界首個影片分類模型庫
新增影片模型庫,提供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