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