AI+Science系列(一) :飛槳加速CFD(計(jì)算流體力學(xué))原理與實(shí)踐
前言
? ? ? ?AI+Science專欄由百度飛槳科學(xué)計(jì)算團(tuán)隊(duì)出品,給大家?guī)?lái)在AI+科學(xué)計(jì)算領(lǐng)域中的一系列技術(shù)分享,歡迎大家關(guān)注和積極討論,也希望志同道合的小伙伴加入飛槳社區(qū),互相學(xué)習(xí),一起探索前沿未知。
? ? ? ?作為系列分享的第一篇,本文內(nèi)容涵蓋行業(yè)背景與痛點(diǎn)、AI+科學(xué)計(jì)算領(lǐng)域的前沿算法、基于飛槳的AI+科學(xué)計(jì)算產(chǎn)品方案、涉及的飛槳框架關(guān)鍵技術(shù)以及PINNs方法求解計(jì)算流體力學(xué)方腔流的案例等。
行業(yè)背景與痛點(diǎn)
? ? ? ?當(dāng)前AI技術(shù)在CV、NLP等領(lǐng)域已有了較為廣泛的應(yīng)用,替代傳統(tǒng)方法完成缺陷檢測(cè)、人臉檢測(cè)、物體分割、閱讀理解、文本生成等任務(wù),在產(chǎn)業(yè)界也形成了規(guī)?;穆涞?。但是放眼到更加廣闊的工業(yè)設(shè)計(jì)、制造等領(lǐng)域,仍有諸多科學(xué)和工程問(wèn)題亟待解決。比如對(duì)于高層建筑結(jié)構(gòu)、大跨橋梁、海上石油平臺(tái)、航空飛機(jī)等,流體和結(jié)構(gòu)的復(fù)雜相互作用會(huì)引起動(dòng)力荷載,進(jìn)而導(dǎo)致抖振、渦振、馳振、顫振等流致振動(dòng),影響結(jié)構(gòu)安全與服役年限。數(shù)值模擬是研究工程結(jié)構(gòu)流致振動(dòng)的有效方法之一,但是傳統(tǒng)數(shù)值方法需要大量的計(jì)算資源,在計(jì)算速度上有很大的局限性等等。
AI+科學(xué)計(jì)算領(lǐng)域前沿算法與典型應(yīng)用案例
? ? ? ?上述的問(wèn)題指向了AI+科學(xué)計(jì)算的發(fā)展: 利用深度學(xué)習(xí)技術(shù)突破維數(shù)高、時(shí)間長(zhǎng)、跨尺度的挑戰(zhàn),改變科學(xué)研究范式,幫助傳統(tǒng)行業(yè)轉(zhuǎn)型。提到AI方法,大家直觀的印象是大數(shù)據(jù)、神經(jīng)網(wǎng)絡(luò)模型搭建與訓(xùn)練。在CV,NLP等領(lǐng)域中也確實(shí)如此,AI方法以數(shù)據(jù)驅(qū)動(dòng),訓(xùn)練出神經(jīng)網(wǎng)絡(luò)以模擬圖像分類、語(yǔ)音識(shí)別等實(shí)際問(wèn)題中隱含的復(fù)雜邏輯,整體是一個(gè)“黑盒”問(wèn)題。但在解決科學(xué)計(jì)算相關(guān)問(wèn)題上,使用的AI方法有所變化,除了使用純數(shù)據(jù)驅(qū)動(dòng)方法解決問(wèn)題外,有時(shí)候還需要加入一些物理信息約束,因此,需要更多的領(lǐng)域相關(guān)知識(shí)。
? ? ? ?具體來(lái)看,在科學(xué)計(jì)算領(lǐng)域,往往需要針對(duì)海洋氣象、能源材料、航空航天、生物制藥等具體場(chǎng)景中的物理問(wèn)題進(jìn)行模擬。由于大多數(shù)物理規(guī)律可以表達(dá)為偏微分方程的形式,所以偏微分方程組的求解成為了解決科學(xué)計(jì)算領(lǐng)域問(wèn)題的關(guān)鍵。神經(jīng)網(wǎng)絡(luò)具備“萬(wàn)能逼近”的能力,即只要網(wǎng)絡(luò)有足夠多的神經(jīng)元,就可以充分地逼近任意一個(gè)連續(xù)函數(shù)。所以使用AI方法解決科學(xué)計(jì)算問(wèn)題的一個(gè)思路是訓(xùn)練神經(jīng)網(wǎng)絡(luò)以模擬某個(gè)偏微分方程組的解函數(shù)。
?使用AI 方法解決科學(xué)計(jì)算問(wèn)題,相對(duì)傳統(tǒng)方法有一些潛在的優(yōu)勢(shì):

? ? ? ?由于加入了物理信息約束,該方法在沒(méi)有任何輸入數(shù)據(jù)的情況下,只指定邊界條件和初始條件,就可以訓(xùn)練出神經(jīng)網(wǎng)絡(luò)擬合目標(biāo)PDE的解。也有一些學(xué)者在原始PINNs方法的基礎(chǔ)上進(jìn)行改進(jìn),加入一些數(shù)據(jù),形成偏微分方程部分、邊界條件部分、初始條件部分、數(shù)據(jù)部分4部分組成的損失函數(shù),進(jìn)一步提高神經(jīng)網(wǎng)絡(luò)的模擬精度,在3D不可壓的流體問(wèn)題上取得了不錯(cuò)的結(jié)果。如下圖所示,分別對(duì)三種不同case使用PINNs算法基于二維二元觀察速度進(jìn)行了3D流場(chǎng)重建,并計(jì)算了三種case中不同方向速度及壓力的L2范數(shù)相對(duì)誤差??梢园l(fā)現(xiàn)PINNs方法可以精準(zhǔn)捕捉漩渦脫落的不穩(wěn)定性。




? ? ? ?總體而言,AI為科學(xué)計(jì)算問(wèn)題的解決提供了新的研究范式,無(wú)論是AI完全取代傳統(tǒng)方法,還是AI與傳統(tǒng)方法融合的相關(guān)工作都在快速發(fā)展,未來(lái)會(huì)更大程度地影響整個(gè)科學(xué)計(jì)算領(lǐng)域,成為新一代革命性的方向。
基于飛槳的AI+科學(xué)計(jì)算產(chǎn)品方案
? ? ? ?飛槳科學(xué)計(jì)算開發(fā)套件以開源深度學(xué)習(xí)框架飛槳為核心,結(jié)合科學(xué)計(jì)算領(lǐng)域?qū)S兄R(shí),搭配高性能的基礎(chǔ)設(shè)施異構(gòu)平臺(tái),提供給科研開發(fā)者簡(jiǎn)單易用的AI+科學(xué)計(jì)算產(chǎn)品方案。
?? ? ? ?百度飛槳在2021年12月正式發(fā)布飛槳科學(xué)計(jì)算套件 0.1版本,依托底層核心框架在高階自動(dòng)微分功能上的技術(shù)革新,快速高質(zhì)量推進(jìn)飛槳在AI+科學(xué)計(jì)算領(lǐng)域的能力建設(shè)。

? ? ? ?飛槳科學(xué)計(jì)算套件提供泛化的微分、積分方程等接口以及兩種求解器PINNs(物理信息神經(jīng)網(wǎng)絡(luò))和FNO(傅立葉神經(jīng)算子),支撐上層應(yīng)用各種微分、積分方程的求解。并且我們正在開展生態(tài)共建,聯(lián)合打造多個(gè)跨領(lǐng)域的仿真模塊,并針對(duì)各個(gè)模塊開發(fā)典型應(yīng)用案例。飛槳科學(xué)計(jì)算套件目前已提供達(dá)西流(Darcy Flow)、頂蓋方腔流(Lid-driven Cavity Flow)等計(jì)算流體力學(xué)領(lǐng)域的經(jīng)典算例。
支撐科學(xué)計(jì)算的框架關(guān)鍵技術(shù)
? ? ? ?飛槳科學(xué)計(jì)算開發(fā)套件整體依托于飛槳核心框架,為了支持科學(xué)計(jì)算類任務(wù),飛槳核心框架新增了函數(shù)式自動(dòng)微分接口和部分算子高階自動(dòng)微分的功能。
?? ? ? ?自動(dòng)微分機(jī)制是廣泛應(yīng)用于深度學(xué)習(xí)框架之中微分技術(shù)。區(qū)別于符號(hào)微分和數(shù)值微分,自動(dòng)微分依托深度學(xué)習(xí)框架中的計(jì)算圖,在每個(gè)計(jì)算圖節(jié)點(diǎn)內(nèi)進(jìn)行符號(hào)微分,并把節(jié)點(diǎn)間的微分結(jié)果用數(shù)值存儲(chǔ),進(jìn)而實(shí)現(xiàn)比數(shù)值微分更精確,比符號(hào)微分更高效的微分機(jī)制。

? ? ? ?相比傳統(tǒng)AI任務(wù),科學(xué)計(jì)算任務(wù)對(duì)框架提出了新的需求:(1)由于損失函數(shù)中存在方程部分,功能上要求支持更高階的微分;(2)在用戶接口上,需要提供更加貼近數(shù)學(xué)公式的函數(shù)式自動(dòng)微分接口。
?? ? ? ?為了支持高階微分,我們一方面在框架中增加高階導(dǎo)數(shù)算子,另一方面也在設(shè)計(jì)基礎(chǔ)算子體系,支持不限階數(shù)的自動(dòng)微分。

? ? ? ?在自動(dòng)微分接口方面,我們提供 jacobian,hessian,jvp,vjp等函數(shù)式自動(dòng)微分接口,讓用戶可以用更加自然的方式完成方程構(gòu)建。
案例介紹:PINNs方法求解計(jì)算流體力學(xué)頂蓋驅(qū)動(dòng)方腔流
? ? ? ?Lid-driven Cavity Flow(頂蓋驅(qū)動(dòng)方腔流)是CFD(計(jì)算流體力學(xué))領(lǐng)域中一個(gè)經(jīng)典benchmark問(wèn)題,常用于驗(yàn)證計(jì)算方法,我們選擇了這個(gè)問(wèn)題作為CFD領(lǐng)域中第一個(gè)典型應(yīng)用案例。頂蓋驅(qū)動(dòng)方腔流中包含一個(gè)充滿液體的方形腔體。這個(gè)腔體三面封閉,頂部開放,頂部有水平方向的速度用來(lái)驅(qū)動(dòng)方腔內(nèi)的流體流動(dòng),其他三個(gè)腔壁為無(wú)滑動(dòng)邊界,速度為零。在這個(gè)問(wèn)題下,我們需要求解穩(wěn)態(tài)不可壓縮的Navier-Stokes方程。

? ? ? ?其中u為頂蓋速度,ρ為流體密度,p為壓力。首先我們?cè)诙S區(qū)域內(nèi)選定計(jì)算域,構(gòu)成正方形,并在x、y兩個(gè)方向上進(jìn)行離散選點(diǎn)。對(duì)四個(gè)壁面的邊界條件定義如下:

? ? ? ?我們擬定頂蓋初始速度為1,雷諾數(shù)為10的情況下,使用PINNs方法對(duì)方腔內(nèi)流場(chǎng)進(jìn)行模擬。我們求解定常NS方程,設(shè)定自變量空間坐標(biāo)(x, y)作為PINNs網(wǎng)絡(luò)的輸入,網(wǎng)絡(luò)的輸出為流場(chǎng)中在x,y兩個(gè)方向的速度(u, v)。損失函數(shù)定義為控制方程的損失函數(shù)與邊界條件的損失函數(shù)乘以各自權(quán)重并相加。神經(jīng)網(wǎng)絡(luò)通過(guò)梯度下降反向傳播等機(jī)制,將損失函數(shù)數(shù)值收斂到最小,因此將NS方程求解問(wèn)題轉(zhuǎn)化為優(yōu)化問(wèn)題。
神經(jīng)網(wǎng)絡(luò)loss定義:

調(diào)用PINNs求解器設(shè)置訓(xùn)練參數(shù):

預(yù)測(cè)流場(chǎng)速度(u, v)并轉(zhuǎn)化為vtk文件進(jìn)行可視化:

結(jié)果展示:

? ? ? ?在低雷諾數(shù)下,流體粘性起到很大作用,在方腔的左右下方兩個(gè)邊角還未形成明顯的渦,速度梯度均勻。在PINNs方法下,和傳統(tǒng)方法(OpenFOAM)結(jié)果對(duì)比水平方向最大均方誤差為7.38R-04,垂直方向最大均方誤差為5.99E-04。推理計(jì)算量和網(wǎng)格呈線性關(guān)系,推理速度大于傳統(tǒng)方法的12~626倍。

飛槳科學(xué)計(jì)算套件Github:
https://github.com/PaddlePaddle/PaddleScience
下期預(yù)告
AI+Science專欄,將持續(xù)為大家?guī)?lái)AI+科學(xué)計(jì)算的一系列技術(shù)分享,下期我們將分享——基于飛槳科學(xué)計(jì)算套件的二維流場(chǎng)典型案例分析。