0
本文作者: 叢末 | 2019-03-01 10:04 |
雷鋒網(wǎng) AI 科技評論按:日前,百度 PaddlePaddle 更新至 Fluid v1.3 版本,一如既往地, Fluid v1.3 版本在基礎(chǔ)框架、預測引擎、模型建設、分布式訓練各個方向上都實現(xiàn)了多項更新,而其中比較重要的更新包括:
統(tǒng)一 Executor 和 ParallelExecutor 接口,用戶只需通過 CompiledProgram 將單卡模型轉(zhuǎn)化多卡模型,并利用 Executor 進行訓練或者預測。
正式發(fā)布 AnalysisConfig 預測接口,支持計算圖分析、算子融合等優(yōu)化,并支持利用 Intel MKLDNN、Nvidia TensorRT 子圖引擎等第三方庫的加速.
模型庫新增發(fā)布 PaddlePaddle 視頻模型庫,提供 5 個視頻分類經(jīng)典模型以及適合視頻分類任務的通用骨架代碼,用戶可一鍵式高效配置模型完成訓練和評測。
新增支持 NLP 語義表示 BERT 模型,支持多機多卡訓練,支持混合精度訓練,訓練速度對比主流實現(xiàn)提升 50%+,提供完整部署示例。
發(fā)布大規(guī)模稀疏參數(shù)服務器 Benchmark,CPU 多機異步訓練發(fā)布顯著提升點擊率預估任務 IO 吞吐的 built-in reader,多機多卡訓練性能多方面提升。
最新版本在基礎(chǔ)框架、預測引擎、模型建設、分布式訓練上的具體更新情況如下:
安裝
新增 Linux 和 MacOS 下的中文版本輔助安裝腳本,提供交互式安裝方式,協(xié)助用戶在復雜環(huán)境下快速完成 PaddlePaddle 安裝。
Windows 支持優(yōu)化:新增 cuda8,cudnn7 的 GPU 支持,新增 AVX 指令集、MKLDNN、mnist 數(shù)據(jù)集支持。修復 Windows 加載 Linux/Mac 下同版本 paddle 訓練模型的問題。
增加動態(tài)圖基礎(chǔ)功能
動態(tài)圖 tracer、 autograd、python Layer/PyLayer,動態(tài)圖支持 MLP、GAN、ptbRNN、Resnet 模型,動態(tài)圖支持 Optimizer、GPU 訓練。
Executor 和 ParallelExecutor 接口優(yōu)化
對 Executor 和 ParallelExecutor 接口進行統(tǒng)一,用戶只需通過 CompiledProgram 將單卡模型轉(zhuǎn)化多卡模型,并利用 Executor 進行訓練或者預測。
ParallelExecutor 優(yōu)化:對 MultiDevSSAGraphBuilder 進行重構(gòu),使得 MultiDevSSAGraphBuilder 更易擴展。去除 ParallelExecutor 中的設備鎖,提升 ParallelExecutor 多卡調(diào)度性能。
中間表達 IR 和 Pass 方面的優(yōu)化
完善 C++ IR graph 的 python 接口以及 C++ IR pass 的 python 接口。
在 framework.py 中新增 IRGraph 類,為在 Python 層編寫 IR Pass 做準備。
新增支持網(wǎng)絡無鎖更新的 Pass。
新增 QuantizationTransformPass,此為 Quantization Aware Training 量化模式訓練前的圖修改操作部分。
內(nèi)存和顯存方面的優(yōu)化
新增支持在編譯時加入 Jemalloc 作為動態(tài)鏈接庫,提升內(nèi)存管理的性能,降低基礎(chǔ)框架內(nèi)存管理開銷。
新增 memory optimize,inplace pass, memory pool early deletion 等顯存優(yōu)化策略。
新增支持網(wǎng)絡無鎖更新的 Pass。
新增 QuantizationTransformPass,此為 Quantization Aware Training 量化模式訓練前的圖修改操作部分。
Operator 整體層面的優(yōu)化
每個 op 在執(zhí)行前只做一次 scope 查詢,減少讀寫鎖操作(原來需要做 1~5 次 scope 查詢)。
新增 Temporary Allocator,減少 op 中的同步操作。
新增 py_func operator,支持 python op 接入,用戶可以借助 py_func Operator 快速實現(xiàn)所需要的特有操作。
INTEL FP32 計算相關(guān)優(yōu)化
優(yōu)化 density_prior_box operator,單 op 四線程提速 3 倍。
優(yōu)化 Stack operator,單 op 提速 16 倍。
開發(fā) Transpose,Concat 和 Conv3d 三個基于 MKLDNN 的 kernel。
修復 lrn operator 中 MKLDNN kernel 精度 bug,同時單 op 提速 1.3 倍。
修復 MKLDNN 初始化占用 5G 內(nèi)存的問題,目前初始化占用 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。
其他
Fluid v1.3 版本還重構(gòu) DDim,Variable Type 等,能夠降低基礎(chǔ)框架調(diào)度開銷。
服務器預測
正式發(fā)布 AnalysisConfig 預測接口,支持計算圖分析、算子融合等優(yōu)化,并支持利用 Intel MKLDNN、Nvidia TensorRT 子圖引擎等第三方庫的加速。
預發(fā)布 intel CPU 上的 預測 INT8 離線量化方案
開發(fā) Conv2D,Pool2D,Quantize,Dequantize 四個基于 MKL-DNN 的 INT8 kernel。
預發(fā)布 Calibration 的 3 個核心 Python API(paddle.fluid.contrib.Calibrator)。
開發(fā) Calibration 工具,保證 FP32 和 INT8 的精度在 ResNet-50 和 MobileNet-V1 在 ImageNet 驗證數(shù)據(jù)集上相差在 1% 內(nèi)。
支持 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 連續(xù)重復的 fc op 為一個大 op,使得 seqpool 模型 CPU 預測速度提升 15%。
fuse 邏輯為 ((X?Y).2?(X.2?Y.2)).?scalar 的 op 組合 , 使得 seqpool 模型 CPU 預測速度提升 8.2%。
針對輸入 tensor 元素個數(shù)為 1 的情況,優(yōu)化 compare_op 的 CPU Kernel。
新增 Paddle-TRT 對 Calibration INT8 的支持,GPU 預測速度提升
模型 VGG,Resnet50 上預測速度達到了 Paddle-TRT float32 的兩倍性能。
模型 VGG,Resnet50 在 imagenet 數(shù)據(jù)集上測試,精度下降 0.3% 以內(nèi)。
算子融合
增加 fc 和 con 相關(guān)兩個 fuse,作用于 conv_op CUDNN kernel。
新增 Conv+Affine Channel 的融合 pass,F(xiàn)aster RCNN 運行的性能提升 26.8%。
新增 Transpose+Flatten+Concat 融合 pass,MobilenetSSD 模型性能提升 15%。
實現(xiàn) beam_search operator 的 CUDA Kernel,并且將相應的 top-k、elementwise_add、reshape、log 計算融合到 beam_search operator 中。
功能完善及易用性提升
新增 C++ IR graph 的 Python 接口。
新增預測庫的 Python 接口。
服務端預測支持從內(nèi)存加載模型。
其他
刪除 legacy V2 代碼。從 1.3 版本起,不再支持 V1&V2 老版本功能。
修復 Paddle-TRT elementwise-mul 模型運行出現(xiàn)問題的 bug。
修復 Paddle-TRT trt_engine stream 多個連續(xù)輸入情況下模型輸出結(jié)果異常的 bug。
移動端預測
效率優(yōu)化,常見模型預測速度提升
int8 預測支持 dequantize 和其他 op(batch normalization/relu/elementwise add)進行自動 kernel 融合。
transpose2 operator 對于 shuffle channel 操作進行優(yōu)化。
gru operator 使用 neon 指令進行優(yōu)化,并針對 batch size 為 1 時進行優(yōu)化。
優(yōu)化和實現(xiàn) pooling,支持任意的 padding。
優(yōu)化和實現(xiàn) batch normalization、softmax、elementwise add。
新增支持多個輸入和多個輸出的模型預測
新增實現(xiàn) prelu6 operator、cast operator、top_k operator
修復 int8 offline 量化溢出結(jié)果不對的問題
修復 winograd 實現(xiàn)在輸入 feature map 的 height 和 width 不相等時結(jié)果可能為 0 的 bug
PaddleCV 智能視覺
新增發(fā)布 PaddlePaddle 視頻模型庫,包括五個視頻分類模型:Attention Cluster、NeXtVLAD、LSTM,、stNet、TSN。提供適合視頻分類任務的通用骨架代碼,包括數(shù)據(jù)讀取和預處理、訓練和預測、網(wǎng)絡模型以及指標計算等多個模塊。用戶根據(jù)需要添加自己的網(wǎng)絡模型,直接復用其他模塊的代碼,快速部署模型。
新增支持目標檢測 Mask R-CNN 模型,效果與主流實現(xiàn)打平。
語義分割 DeepLabV3+模型,depthwise_conv op 融合,顯存優(yōu)化,顯存占用對比上一版本減少 50%。
PaddleNLP 智能文本處理
新增支持 NLP 語義表示 BERT 模型,支持多機多卡訓練,支持混合精度訓練,訓練速度對比主流實現(xiàn)提升 50%+,提供完整部署示例。
機器翻譯 Transformer 模型優(yōu)化解碼計算,decoder 中加入對 encoder output 計算結(jié)果的 cache,預測速度提升一倍。
PaddleRec 智能推薦
Sequence Semantic Retrieval 新增單機多線程、單機多卡運行示例,添加預測功能、數(shù)據(jù)預處理優(yōu)化,完善部署示例。
GRU4Rec 新增負采樣功能,使用 bpr loss 和 cross entropy loss 的效果與原作打平。
大規(guī)模稀疏參數(shù)服務器 Benchmark 發(fā)布
測試真實業(yè)務場景下,特征規(guī)模百億、樣本平均特征數(shù) 1k 的點擊率預估任務,在 batch=512 情況下,100worker 加速比 90.5,吞吐量 1.36M/s。
CPU 多機異步訓練
發(fā)布面向點擊率預估任務的 built-in reader,Criteo 數(shù)據(jù)集下 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%。
典型模型收斂速度優(yōu)化
新增功能:動態(tài) Batch Size,動態(tài) Image Resize 方法。
Resnet50 on Imagenet 數(shù)據(jù)集:訓練收斂輪數(shù)下降為標準訓練方法的 1/3 左右。
VisualDL graph 支持 Paddle fluid 保存的模型可視化展示。
安裝參考網(wǎng)址:http://paddlepaddle.org/documentation/docs/zh/1.3/beginners_guide/install/index_cn.html
PaddlePaddle Fluid v1.3 版本項目開源地址:https://github.com/PaddlePaddle/Paddle/releases 雷鋒網(wǎng)雷鋒網(wǎng)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。