五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

動(dòng)轉(zhuǎn)靜兩大升級(jí)!一鍵轉(zhuǎn)靜成功率領(lǐng)先,重點(diǎn)模型訓(xùn)練提速18%+

2023-03-07 11:29 作者:飛槳PaddlePaddle  | 我要投稿

目前主流深度學(xué)習(xí)框架支持的編程方式有兩種,分別為動(dòng)態(tài)圖和靜態(tài)圖。動(dòng)態(tài)圖的Pythonic編程體驗(yàn)更佳、更易調(diào)試,但性能方面與靜態(tài)圖有一定差距。靜態(tài)圖先組網(wǎng)再執(zhí)行,預(yù)先擁有完整網(wǎng)絡(luò)結(jié)構(gòu),更利于全局優(yōu)化,雖調(diào)試難度大,但執(zhí)行性能更佳。

百度飛槳采用動(dòng)靜統(tǒng)一的技術(shù)架構(gòu)設(shè)計(jì),提供了動(dòng)轉(zhuǎn)靜(@to_static)模塊功能,支持用戶動(dòng)態(tài)圖編程,并可一鍵切換靜態(tài)圖訓(xùn)練和部署。2022年11月,飛槳框架 2.4 版本(以下簡(jiǎn)稱飛槳v2.4)正式發(fā)布,動(dòng)轉(zhuǎn)靜“轉(zhuǎn)換成功率”和“訓(xùn)練性能”迎來(lái)全面升級(jí),帶來(lái)了全新的用戶使用體驗(yàn)。

  • 動(dòng)轉(zhuǎn)靜成功率明顯提升,一鍵轉(zhuǎn)換成功率達(dá)到92.1%。

  • 動(dòng)轉(zhuǎn)靜訓(xùn)練加速效果明顯,重點(diǎn)模型訓(xùn)練可提速18%+。

01 一鍵轉(zhuǎn)靜成功率明顯提升

動(dòng)轉(zhuǎn)靜的轉(zhuǎn)換成功率是動(dòng)轉(zhuǎn)靜功能的一個(gè)重要指標(biāo),與用戶的使用體驗(yàn)息息相關(guān),飛槳v2.4從“動(dòng)轉(zhuǎn)靜語(yǔ)法完善”和“API動(dòng)靜行為統(tǒng)一”兩個(gè)方面進(jìn)行了重點(diǎn)優(yōu)化和升級(jí):

PART1 動(dòng)轉(zhuǎn)靜語(yǔ)法完善

JIT?式動(dòng)態(tài)執(zhí)行

新增 Shape、Len、Attr、List、Unpack、Indexable等JIT 形式接口,提升語(yǔ)法轉(zhuǎn)寫的魯棒性。

控制流語(yǔ)法重構(gòu)

重構(gòu)了控制流IF/For/While語(yǔ)法轉(zhuǎn)寫邏輯,完備支持復(fù)雜嵌套場(chǎng)景下變量名解析等疑難問(wèn)題。

關(guān)鍵字語(yǔ)法優(yōu)化

優(yōu)化了控制流中提前return、break、continue 等關(guān)鍵字語(yǔ)法轉(zhuǎn)寫機(jī)制,有效減少了靜態(tài)圖中間表示多余算子的引入,提升執(zhí)行效率。

PART2 API動(dòng)靜行為統(tǒng)一

屬性參數(shù)可變

完成了20多個(gè)中高頻動(dòng)態(tài)圖API參數(shù)的升級(jí),如Reduce系列的paddle.mean/sum/max/min API的參數(shù) axis ,新增支持為Tensor類型,動(dòng)態(tài)可變。

接口動(dòng)靜統(tǒng)一

補(bǔ)齊了Tensor類靜態(tài)圖下缺失的接口,升級(jí)了paddle.to_tensor、paddle.grad等高頻API 功能,支持靜態(tài)圖調(diào)用。

Einsum?升級(jí)

實(shí)現(xiàn)了動(dòng)靜統(tǒng)一愛因斯坦求和算子,并支持Python二元、多元輸入,訓(xùn)推一體。

動(dòng)轉(zhuǎn)靜成功率和語(yǔ)法支持度

飛槳v2.4下,動(dòng)轉(zhuǎn)靜具備了更豐富的語(yǔ)法支持,Python語(yǔ)法支持比例達(dá)到了90%,在80多個(gè)外部用戶真實(shí)論文復(fù)現(xiàn)模型集合上,動(dòng)轉(zhuǎn)靜一鍵轉(zhuǎn)寫成功率提升至92.1%,功能完備性和易用性都有明顯提升。如下是一個(gè)動(dòng)轉(zhuǎn)靜導(dǎo)出預(yù)測(cè)模型的樣例代碼:

執(zhí)行上述代碼樣例后,在當(dāng)前目錄下會(huì)生成三個(gè)文件,即代表成功導(dǎo)出預(yù)測(cè)模型:

simple_net.pdiparams????????//?存放模型中所有的權(quán)重?cái)?shù)據(jù)
simple_net.pdmodel??????????//?存放模型的網(wǎng)絡(luò)結(jié)構(gòu)
simple_net.pdiparams.info???//?存放額外的其他信息動(dòng)轉(zhuǎn)靜導(dǎo)出模型一般包括三個(gè)步驟:

  • 添加裝飾器

    將@to_static裝飾器裝飾在forward函數(shù)上。

  • 切換 eval 模式

    如Dropout 、LayerNorm 接口在 train() 和 eval() 模式下行為存在較大的差異,在模型導(dǎo)出前,請(qǐng)務(wù)必確認(rèn)模型已切換到正確的模式。

  • 調(diào)用 save 接口

    調(diào)用 paddle.jit.save接口導(dǎo)出其對(duì)應(yīng)的模型文件和參數(shù)文件。飛槳?jiǎng)愚D(zhuǎn)靜@to_staitc更多功能用法,可參考【擴(kuò)展閱讀—?jiǎng)愚D(zhuǎn)靜使用樣例】

02 動(dòng)轉(zhuǎn)靜訓(xùn)練加速效果明顯

在飛槳框架中,通常情況下使用動(dòng)態(tài)圖訓(xùn)練即可滿足大部分場(chǎng)景需求。飛槳v2.4優(yōu)化了動(dòng)轉(zhuǎn)靜訓(xùn)練的相關(guān)邏輯,面向重點(diǎn)模型,動(dòng)態(tài)圖訓(xùn)練的性能已經(jīng)可以和靜態(tài)圖媲美,例如在ResNet50、Transformer、YOLOv3等模型上,動(dòng)轉(zhuǎn)靜訓(xùn)練相較于動(dòng)態(tài)圖有18.6%~21.5%的顯著加速效果。

重點(diǎn)模型加速效果

在如下場(chǎng)景中,開發(fā)者可以考慮使用動(dòng)轉(zhuǎn)靜方式進(jìn)行模型訓(xùn)練,將會(huì)獲得較明顯的性能提升效果。

PART1 場(chǎng)景一:重調(diào)度模型

即每個(gè)API背后的GPU Kernel 計(jì)算耗時(shí)較少,在CPU端拉起后很快就執(zhí)行完了,此類任務(wù)的特點(diǎn):

  • PU 利用率較低(可通過(guò)watch -n 1 nvidia-smi命令查看)。

  • 常見于NLP 領(lǐng)域或AMP/FP16 任務(wù)。

  • 訓(xùn)練性能瓶頸點(diǎn)主要是Host端調(diào)度開銷。


如上圖是重調(diào)度模型的動(dòng)態(tài)圖和動(dòng)轉(zhuǎn)靜 Timeline 示意圖。從圖中可以看出:

  • 一個(gè)Batch的訓(xùn)練耗時(shí)取決于 Host 端總耗時(shí)。

  • 動(dòng)態(tài)圖每個(gè)Python API在運(yùn)行時(shí),都會(huì)產(chǎn)生一次Python 和C++交互,會(huì)產(chǎn)生較大的調(diào)度開銷。

  • 動(dòng)轉(zhuǎn)靜之后,整體上切分為執(zhí)行前向和反向的兩個(gè)Python C API,故減少了很多個(gè)API間的調(diào)度開銷。

  • 動(dòng)轉(zhuǎn)靜內(nèi)核執(zhí)行器也經(jīng)過(guò)了極致的優(yōu)化(如Instruction緩存等),Kernel launch效率也會(huì)比純動(dòng)態(tài)圖模式要高。

對(duì)于想使用動(dòng)態(tài)圖訓(xùn)練代碼的用戶來(lái)說(shuō),只需要在組網(wǎng)入口的forward函數(shù)處添加裝飾器@to_static,其他代碼無(wú)需改動(dòng)就可以一鍵切換為動(dòng)轉(zhuǎn)靜訓(xùn)練。@to_static裝飾器會(huì)將此函數(shù)內(nèi)的所有subLayers 轉(zhuǎn)化為一個(gè)靜態(tài)子圖并執(zhí)行。如下是一個(gè)動(dòng)轉(zhuǎn)靜訓(xùn)練樣例代碼:

PART2 場(chǎng)景二:調(diào)度+計(jì)算共存模型

即模型訓(xùn)練時(shí)同時(shí)存在計(jì)算量小和計(jì)算量大的GPU Kernel,且一個(gè)Batch的起始位置常為小Kernel,此類任務(wù)的特點(diǎn):

  • GPU 利用率波動(dòng)比較大(可通過(guò)watch -n 1 nvidia-smi命令查看)。

  • 訓(xùn)練性能瓶頸點(diǎn)同時(shí)受局部調(diào)度和局部 Kernel 計(jì)算效率影響。

如上圖是調(diào)度+計(jì)算共存的動(dòng)態(tài)圖和動(dòng)轉(zhuǎn)靜Timeline示意圖。從圖中可以看出:

  • 一個(gè)Batch的訓(xùn)練耗時(shí)取決于 Max(Host端,GPU端)。

  • 動(dòng)轉(zhuǎn)靜降低了Python C API 調(diào)度開銷,收益點(diǎn)大多在Batch前半部分,后半部分可能會(huì)被overlap,調(diào)度方面的收益會(huì)打折扣。

  • 動(dòng)轉(zhuǎn)靜可借助全局圖優(yōu)化技術(shù),通過(guò)算子融合等技術(shù)提升模型訓(xùn)練的吞吐。

在此種場(chǎng)景下,飛槳?jiǎng)愚D(zhuǎn)靜@to_static API 提供build_strategy參數(shù),在動(dòng)轉(zhuǎn)靜的全圖視角下,用戶可以通過(guò)build_strategy參數(shù)開啟不同的全局圖優(yōu)化策略。通過(guò)裝飾器@to_static(build_strategy=get_build_strategy())或者API調(diào)用paddle.jit.to_static(net, build_strategy=get_build_strategy())兩種方式開啟全局圖優(yōu)化策略,如下是一個(gè)簡(jiǎn)單的使用樣例:

飛槳?jiǎng)愚D(zhuǎn)靜@to_static開啟更多全局圖優(yōu)化用法,可參考【擴(kuò)展閱讀—?jiǎng)愚D(zhuǎn)靜訓(xùn)練圖優(yōu)化策略】

拓展閱讀

[1]動(dòng)轉(zhuǎn)靜使用樣例https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/jit/basic_usage_cn.html

[2]?動(dòng)轉(zhuǎn)靜訓(xùn)練圖優(yōu)化策略https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/jit/basic_usage_cn.html#sidongzhuanjinggengduoyongfa

[3]動(dòng)轉(zhuǎn)靜轉(zhuǎn)換原理https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/jit/principle_cn.html

[4] 動(dòng)轉(zhuǎn)靜報(bào)錯(cuò)調(diào)試https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/jit/debugging_cn.html

[5]?動(dòng)轉(zhuǎn)靜Limitations

https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/jit/limitations_cn.html

動(dòng)轉(zhuǎn)靜兩大升級(jí)!一鍵轉(zhuǎn)靜成功率領(lǐng)先,重點(diǎn)模型訓(xùn)練提速18%+的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
阿鲁科尔沁旗| 永泰县| 北川| 五家渠市| 潞城市| 大厂| 东丰县| 南漳县| 蓝山县| 安吉县| 湛江市| 太湖县| 龙井市| 含山县| 抚松县| 仲巴县| 蒙自县| 衡山县| 天峨县| 改则县| 航空| 顺平县| 遂平县| 大城县| 建瓯市| 尚义县| 衡阳市| 武邑县| 大连市| 巩留县| 长葛市| 通渭县| 长泰县| 汉川市| 丁青县| 南靖县| 大荔县| 桦甸市| 江口县| 耒阳市| 阜康市|