業(yè)界首個(gè)視頻分類模型庫(kù)
新增視頻模型庫(kù)赊堪,提供5個(gè)視頻分類經(jīng)典模型以及適合視頻分類任務(wù)的通用骨架代碼苹熏,用戶可一鍵式高效配置模型完成訓(xùn)練和評(píng)測(cè)。
視頻理解權(quán)威競(jìng)賽ActivityNet- Kinetics視頻動(dòng)作識(shí)別任務(wù)冠軍方法stNet的resnet50版本開源實(shí)現(xiàn)苍鲜。
基于PaddlePaddle的BERT多機(jī)多卡和混合精度訓(xùn)練
新增支持NLP語(yǔ)義表示BERT模型兄猩,支持多機(jī)多卡訓(xùn)練曹阔,支持混合精度訓(xùn)練半开,訓(xùn)練速度對(duì)比主流實(shí)現(xiàn)提升50%+,提供完整部署示例赃份。
分布式訓(xùn)練性能大幅提升
大規(guī)模稀疏參數(shù)服務(wù)器Benchmark發(fā)布寂拆,?CPU多機(jī)異步訓(xùn)練發(fā)布顯著提升點(diǎn)擊率預(yù)估任務(wù)IO吞吐的built-in reader,多機(jī)多卡訓(xùn)練性能多方面提升抓韩。
下面將Paddle Fluid v1.3版本所發(fā)布的內(nèi)容纠永,全面介紹給廣大開發(fā)者:
重要更新
統(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?子圖引擎等第三方庫(kù)的加速.
模型庫(kù)新增發(fā)布PaddlePaddle視頻模型庫(kù)苍日,提供5個(gè)視頻分類經(jīng)典模型以及適合視頻分類任務(wù)的通用骨架代碼惭聂,用戶可一鍵式高效配置模型完成訓(xùn)練和評(píng)測(cè)。
新增支持NLP語(yǔ)義表示BERT模型易遣,支持多機(jī)多卡訓(xùn)練,支持混合精度訓(xùn)練嫌佑,訓(xùn)練速度對(duì)比主流實(shí)現(xiàn)提升50%+豆茫,提供完整部署示例侨歉。
大規(guī)模稀疏參數(shù)服務(wù)器Benchmark發(fā)布,?CPU多機(jī)異步訓(xùn)練發(fā)布顯著提升點(diǎn)擊率預(yù)估任務(wù)IO吞吐的built-in ? ? reader揩魂,多機(jī)多卡訓(xùn)練性能多方面提升幽邓。
新增支持Intel Deep ? ? Learning Boost(VNNI指令集)。在新一代的Intel Xeon ? ? Scalable Processor上火脉,使用這個(gè)特性的一些模型牵舵,INT8預(yù)測(cè)性能可以達(dá)到FP32的2倍。
基礎(chǔ)框架
安裝
新增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)鏈接庫(kù)功蜓,提升內(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)所需要的特有操作
重構(gòu)DDim,Variable ? ? Type等抵代,降低基礎(chǔ)框架調(diào)度開銷腾节。
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。
減少?gòu)腗KLDNN 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拘泞。
預(yù)測(cè)引擎
服務(wù)器預(yù)測(cè)
正式發(fā)布AnalysisConfig?預(yù)測(cè)接口纷纫,支持計(jì)算圖分析、算子融合等優(yōu)化陪腌,并支持利用?Intel MKLDNN辱魁、Nvidia ? ? TensorRT?子圖引擎等第三方庫(kù)的加速烟瞧。
預(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è)庫(kù)的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。
模型建設(shè)
PaddleCV?智能視覺
新增發(fā)布PaddlePaddle視頻模型庫(kù)蔫浆,包括五個(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)打平。
語(yǔ)義分割DeepLabV3+模型弄匕,depthwise_conv ? ? ?op融合颅悉,顯存優(yōu)化,顯存占用對(duì)比上一版本減少40%迁匠。
PaddleNLP?智能文本處理
新增支持NLP語(yǔ)義表示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的效果與原作打平菠劝。
分布式訓(xùn)練
大規(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
VisualDL graph支持Paddle ? ? fluid保存的模型可視化展示澄步。