AI+Science系列(三):賽槳PaddleScience底層核心框架技術(shù)創(chuàng)新詳解
繼上一篇典型案例及API功能介紹,本篇重點(diǎn)講解飛槳核心框架為支持科學(xué)計(jì)算任務(wù)在技術(shù)上的創(chuàng)新工作與成果。
框架技術(shù)創(chuàng)新
飛槳科學(xué)計(jì)算套件賽槳PaddleScience底層技術(shù)依賴飛槳核心框架。為了有力地支撐科學(xué)計(jì)算任務(wù)高效訓(xùn)練與推理,飛槳核心框架在自動(dòng)微分、編譯器、執(zhí)行器和分布式等多方面分別進(jìn)行了技術(shù)創(chuàng)新。值得一提的是,自動(dòng)微分在機(jī)制上的革新帶來了框架計(jì)算量方面的優(yōu)化,結(jié)合自研編譯器CINN的加持,在典型科學(xué)計(jì)算任務(wù)2D定常Laplace模型上達(dá)到業(yè)界性能最優(yōu)。

自動(dòng)微分
飛槳核心框架在2.3版本中針對自動(dòng)微分機(jī)制和自動(dòng)微分API提供多種技術(shù)創(chuàng)新。

自動(dòng)微分機(jī)制
自動(dòng)微分在機(jī)制方面,通過設(shè)計(jì)自動(dòng)微分基礎(chǔ)算子體系,并在其上定義linearize和transpose程序變換規(guī)則。飛槳在靜態(tài)圖中新增對前向微分的支持,實(shí)現(xiàn)前反向不限階的自動(dòng)微分機(jī)制。創(chuàng)新后的自動(dòng)微分機(jī)制具備良好的算子支持?jǐn)U展性,目前已經(jīng)支持全連接網(wǎng)絡(luò),并在2D定常Laplace、3D定常圓柱繞流等典型科學(xué)計(jì)算任務(wù)上完成驗(yàn)證工作。
目前的自動(dòng)微分機(jī)制設(shè)計(jì)流程為:用戶完成前向組網(wǎng)后,會(huì)首先將前向過程對應(yīng)的網(wǎng)絡(luò)轉(zhuǎn)化到自動(dòng)微分基礎(chǔ)算子體系上,然后多次調(diào)用linearize和transpose兩種程序變換實(shí)現(xiàn)高階前向/反向微分,最后將網(wǎng)絡(luò)整體轉(zhuǎn)化到飛槳原生算子體系上完成組網(wǎng)或者對接編譯器進(jìn)行更多優(yōu)化。該機(jī)制將計(jì)算拆分到更細(xì)的粒度,由于引入并合理使用切空間(前向微分空間)信息,相對于原有的自動(dòng)微分機(jī)制有計(jì)算量上的優(yōu)化,在2D定常Laplace模型上實(shí)測有最大1.58倍性能提升。
自動(dòng)微分API
在自動(dòng)微分API方面,飛槳為外部用戶新增2個(gè)自動(dòng)微分API,分別是前向自動(dòng)微分forward_grad與反向自動(dòng)微分grad兩種接口,均支持高階微分。為了方便用戶使用,同時(shí)提供Jacobian、Hessian的求解,支持按行延遲計(jì)算,在復(fù)雜偏微分方程組中顯著提升計(jì)算性能。另外,也公開了實(shí)現(xiàn)此次創(chuàng)新后的自動(dòng)微分核心機(jī)制API jvp與vjp,當(dāng)前所有API均放在incubate空間下,處于實(shí)驗(yàn)特性,會(huì)根據(jù)用戶需求及具體應(yīng)用場景持續(xù)演進(jìn)。上述API列表以及計(jì)算示例如下表所示。


分布式自動(dòng)并行
為了支持用戶使用大規(guī)模網(wǎng)格點(diǎn)數(shù)據(jù)進(jìn)行高效訓(xùn)練,PaddleScience采用高可擴(kuò)展的飛槳自動(dòng)并行技術(shù),它能根據(jù)用戶輸入的串行網(wǎng)絡(luò)模型和所提供集群資源信息自動(dòng)進(jìn)行分布式訓(xùn)練?;诮y(tǒng)一分布式計(jì)算圖和統(tǒng)一資源圖設(shè)計(jì),飛槳自動(dòng)并行可支持任意并行策略和各類硬件集群資源上的分布式訓(xùn)練,能將原用戶原計(jì)算圖中每個(gè)串行tensor和串行operator自動(dòng)切分成分布式tensor和分布式operator,并插入合適高效通信來保證與原串行計(jì)算一致,如下圖所示。

目前飛槳自動(dòng)并行支持半自動(dòng)與全自動(dòng)兩種模式:
模式一:半自動(dòng)模式下用戶可以根據(jù)自己需要指定某些關(guān)鍵tensor和operator的切分方式,而框架會(huì)通過數(shù)據(jù)流分析方式進(jìn)行自動(dòng)推導(dǎo)剩余的tensor和operator;
模式二:全自動(dòng)模式下不需要用戶標(biāo)記任何切分方式,所有tensor和operator都由框架基于Cost Model自適應(yīng)選擇最優(yōu)的切分策略?;谧詣?dòng)并行所提供的數(shù)據(jù)并行、梯度累積和數(shù)據(jù)集并行加載等分布式能力,在3D圓柱繞流任務(wù)上32卡擴(kuò)展效率可達(dá)到93%。結(jié)合自動(dòng)并行,PaddleScience未來將更容易獲得復(fù)雜并行策略支持。
編譯器
自動(dòng)微分機(jī)制將科學(xué)計(jì)算模型中的深度學(xué)習(xí)算子拆分成若干細(xì)粒度的基礎(chǔ)算子,若直接計(jì)算,這些細(xì)粒度算子將使得模型的大部分時(shí)間被浪費(fèi)在數(shù)據(jù)交換和執(zhí)行調(diào)度而非實(shí)際計(jì)算上。這意味著我們并未完全利用到硬件的計(jì)算資源,因此模型的計(jì)算速度還仍有較大的提升空間。神經(jīng)網(wǎng)絡(luò)編譯器在此類問題上有著顯著的優(yōu)勢,包括針對計(jì)算圖的通用Pass優(yōu)化、算子融合以及自動(dòng)代碼生成等。飛槳神經(jīng)網(wǎng)絡(luò)編譯器CINN即是解決此類問題的有力工具,它在消除大量無用數(shù)據(jù)交換和執(zhí)行調(diào)度開銷的同時(shí),極大地降低算子開發(fā)所需的人力成本,相比于未開啟編譯加速的執(zhí)行方式,開啟CINN在2D定常Laplace模型上實(shí)測有最大3.72倍性能提升。
CINN為科學(xué)計(jì)算模型提供了一套完善的優(yōu)化機(jī)制,典型的常量折疊,冗余算子消除,特定硬件的gemm rewriter庫算子替換等優(yōu)化Pass在CINN中均已實(shí)現(xiàn)。自動(dòng)算子融合能力也在日趨強(qiáng)化,為科學(xué)計(jì)算等領(lǐng)域模型的訓(xùn)練性能提供更多的加速契機(jī)。以2D定常Laplace模型為例,最大的融合算子集合可包含94個(gè)小算子。

我們以2D定常Laplace模型作為統(tǒng)一測試模型,設(shè)定采樣點(diǎn)數(shù)100*100,選取多組網(wǎng)絡(luò)層數(shù)和隱藏層節(jié)點(diǎn)數(shù)的全連接網(wǎng)絡(luò)訓(xùn)練2000 epoch,分別在JAX、飛槳靜態(tài)圖、飛槳靜態(tài)圖+新自動(dòng)微分、飛槳靜態(tài)圖+新自動(dòng)微分+CINN編譯器幾種模式下進(jìn)行測試。以飛槳靜態(tài)圖模式作為baseline,計(jì)算其他模式相對飛槳靜態(tài)圖的加速比。

(性能測試硬件平臺:V100 16GB單卡;Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz 40-core)
從實(shí)驗(yàn)結(jié)果可以看出,受益于新自動(dòng)微分機(jī)制上的革新和自研編譯器CINN的性能優(yōu)化加持,在典型科學(xué)計(jì)算任務(wù)2D定常Laplace模型上達(dá)到業(yè)界性能最優(yōu)。
執(zhí)行器
飛槳中有兩種數(shù)據(jù)結(jié)構(gòu)可以表示網(wǎng)絡(luò)模型,一種是Program,將模型表示成OP序列,方便在單機(jī)單卡下順序執(zhí)行OP;另一種是Graph,將模型表示成計(jì)算圖結(jié)構(gòu),方便在多卡下并行調(diào)度OP,并默認(rèn)開啟許多圖優(yōu)化的IR pass以提升訓(xùn)練性能。由于Program相比Graph修改簡單,可以方便地插入分布式需要的數(shù)據(jù)通信等OP,因而飛槳中許多重要的分布式功能都是基于Program結(jié)構(gòu)進(jìn)行開發(fā)。在科學(xué)計(jì)算項(xiàng)目中,我們對上述典型的科學(xué)計(jì)算模型實(shí)現(xiàn)Program和Graph兩種表示結(jié)構(gòu)的無損互轉(zhuǎn),使得計(jì)算圖優(yōu)化后的Graph可以轉(zhuǎn)換成Program進(jìn)行分布式訓(xùn)練,打通計(jì)算圖優(yōu)化和分布式訓(xùn)練結(jié)合的技術(shù)路徑,充分利用兩者的優(yōu)化能力,大幅提升模型訓(xùn)練性能。
此外,飛槳框架在2.3版本中發(fā)布了全新的靜態(tài)圖執(zhí)行器,其中實(shí)現(xiàn)高效的多stream和多線程異步調(diào)度組件,使得模型訓(xùn)練更加性能優(yōu)越和易擴(kuò)展,并已在單機(jī)單卡場景下默認(rèn)使用。針對PaddleScience,我們通過對靜態(tài)圖新執(zhí)行器在對接Graph IR體系和支持分布式訓(xùn)練等方面的功能適配和擴(kuò)充,使圖優(yōu)化后的模型可以利用新執(zhí)行器進(jìn)行分布式訓(xùn)練。
拓展閱讀
AI+Science系列(一) :飛槳加速CFD(計(jì)算流體力學(xué))原理與實(shí)踐
AI+Science系列(二):國內(nèi)首個(gè)基于AI框架的CFD工具組件!賽槳v1.0 Beta API介紹以及典型案例分享!
賽槳PaddleScience v1.0 Beta:基于飛槳核心框架的科學(xué)計(jì)算通用求解器
相關(guān)地址
飛槳AI for Science共創(chuàng)計(jì)劃
https://www.paddlepaddle.org.cn/science
飛槳PPSIG-Science小組
https://www.paddlepaddle.org.cn/specialgroupdetail?id=9