一文說透高性能計算在仿真上的應(yīng)用
“如果你的仿真還沒有受到硬件限制,說明你的仿真還沒有入門?!? ? ? ? ??
對于仿真工程師來講,最痛苦事情莫過于等待求解器計算。實際工程中稍微上規(guī)模的案例計算時間短則幾小時,長則幾天甚至更長。在這個過程中如果出現(xiàn)問題,還要找到原因排除問題重新計算(比如內(nèi)存不夠,可能造成程序退出,也可能和硬盤交換內(nèi)存性能下降,再比如常見的網(wǎng)格質(zhì)量差計算不收斂)。工程師都希望用最快的機器進行計算。
這也從某種程度上說明了為什么主流的仿真工具就那么幾個:仿真的首要問題是穩(wěn)定和精度,而這種穩(wěn)定性和高精度只能通過長期的用戶迭代和技術(shù)積累實現(xiàn)。
本文從硬件,軟件以及開發(fā)三個方面來介紹仿真和HPC高性能計算(High Performance Computing)的關(guān)系
高性能計算是當今科技領(lǐng)域中最引人矚目的領(lǐng)域之一,它在解決復(fù)雜問題、優(yōu)化系統(tǒng)性能和加速創(chuàng)新方面發(fā)揮著關(guān)鍵作用。而仿真作為高性能計算的重要應(yīng)用領(lǐng)域之一,為各行各業(yè)帶來了無限的可能性和機遇。
那么,什么是仿真?仿真是一種通過模擬實際系統(tǒng)或過程的行為和性能來預(yù)測和分析其運行方式的方法。它可以用于理解和解決各種復(fù)雜的現(xiàn)實問題,如工程設(shè)計、材料研發(fā)、流體力學(xué)、天氣預(yù)報、金融風(fēng)險分析等。仿真技術(shù)的發(fā)展為我們提供了深入研究和理解現(xiàn)實世界的機會,而高性能計算則成為實現(xiàn)大規(guī)模、高精度仿真的關(guān)鍵工具。
高性能計算的核心在于利用并行計算、分布式系統(tǒng)和高性能算法等技術(shù),提供強大的計算能力和處理能力,以應(yīng)對大規(guī)模數(shù)據(jù)和復(fù)雜計算任務(wù)。通過將仿真模型分解為小任務(wù)并同時進行計算,高性能計算能夠加速仿真過程,提供更快速、精確的結(jié)果。這種能力不僅能夠加快仿真結(jié)果的產(chǎn)出速度,還能夠進行更復(fù)雜的模擬和分析,進一步深入研究問題本質(zhì)。
高性能計算的入門并不需要你成為一名計算機專家,它是開放給各個領(lǐng)域的學(xué)生、研究者和專業(yè)人士的。通過學(xué)習(xí)高性能計算的基本概念、并行計算和分布式系統(tǒng)的原理,你將能夠利用現(xiàn)有的高性能計算工具和軟件,開始進行仿真實驗和計算任務(wù)。你將能夠探索不同領(lǐng)域的仿真應(yīng)用,如工程仿真、材料模擬、流體動力學(xué)、天氣預(yù)測等,從而解決實際問題并做出有意義的發(fā)現(xiàn)。
2020年一開始,COVID-19新冠狀病毒肆虐全球,奪走無數(shù)人的生命。加速藥物和疫苗研發(fā)成為全球研究人員當務(wù)之急。而開發(fā)新藥物和疫苗,依賴于海量數(shù)據(jù)的篩選計算,涉及到分子動力學(xué)的大規(guī)模計算和評估,這些計算無法短時間內(nèi)在PC機上完成,只能依賴高并發(fā),高共享的集群式HPC高性能計算硬件。包括阿里云、騰訊云在內(nèi)的國內(nèi)廠商提供了開放式的云端硬件計算平臺。
區(qū)別于一般的PC機器,仿真用HPC高性能計算硬件重點在于處理計算海量數(shù)據(jù),因此并不單單追求單核計算性能,而是包括共享內(nèi)存,CPU調(diào)度,資源分配,網(wǎng)絡(luò)吞吐,硬盤讀寫性能,數(shù)據(jù)存儲等綜合考量。
以我國神威·太湖之光為例,該超級計算機由40個運算機柜和8個網(wǎng)絡(luò)機柜組成。每個運算機柜比家用的雙門冰箱略大,4塊由32塊運算插件組成的超節(jié)點分布其中。每個插件由4個運算節(jié)點板組成,一個運算節(jié)點板又含2塊“申威26010”高性能處理器。一臺機柜就有1024塊處理器,整臺“神威·太湖之光”共有40960塊處理器。每個單個處理器有260個核心,主板為雙節(jié)點設(shè)計,每個CPU固化的板載內(nèi)存為32GBDDR3-2133。
目前的HPC高性能計算軟件,主要是用來協(xié)調(diào)計算機硬件資源,包括CPU,內(nèi)存,IO,集群等。以CPU為例,普通PC好的CPU只在幾十核,資源調(diào)度以多進程,線程為主。服務(wù)器,集群則涉及到多臺計算之間資源調(diào)度。而對于類似超算機器,核心可能有幾百萬,幾千萬,普通的資源調(diào)度算法本身可能也需要資源調(diào)度。
當一個有海量數(shù)據(jù)的任務(wù)交給HPC高性能計算處理時,會遇到如下問題:該任務(wù)有多少比例可以分解單獨分別執(zhí)行,可單獨執(zhí)行的任務(wù)時間是否均勻,單個任務(wù)放在單獨機器上內(nèi)存是否足夠,磁盤讀寫性能是否能同步,網(wǎng)絡(luò)帶寬是否會成為瓶頸等等,當所有問題放在一起考慮的時候,HPC高性能計算就不可避免的成為一個系統(tǒng)工程。數(shù)據(jù)計算量越大,硬件越多,系統(tǒng)就越復(fù)雜。找到一個合適業(yè)務(wù)的HPC模式并不是容易的事,尤其是受限于硬件資源,很多HPC高性能計算更多的依賴經(jīng)驗或者少考慮效率。所有這些操作需要好的軟件來控制。
MPI (Message passing interface),MPI是一個標準,用來定義數(shù)據(jù)交換標準
有限元計算中,稍大的模型自由度通??梢赃_到十萬/百萬。2004年,ANSYS求解出了自由度1億的模型,2008年ANSYS 求解出了自由度為10億的模型。千萬單元自由度問題,任何一本有限元書籍上的實例代碼,在普通PC機上都算不出來。針對大模型,傳統(tǒng)的計算方法不再適用。
在AI大模型的研發(fā)中,CPU并行編程和GPU并行編程都扮演著非常重要的角色。以下是一些具體的例子:
數(shù)據(jù)預(yù)處理和加載:在AI大模型的訓(xùn)練前,往往需要對大量的數(shù)據(jù)進行預(yù)處理,如圖像解碼、縮放、裁剪、歸一化等。這些任務(wù)通常在CPU上執(zhí)行,并且可以通過多線程并行化來提高效率。此外,為了避免GPU在等待數(shù)據(jù)時閑置,可以使用多線程預(yù)加載數(shù)據(jù),即在GPU處理當前批次的數(shù)據(jù)時,CPU已經(jīng)開始準備下一批次的數(shù)據(jù)。
模型訓(xùn)練:訓(xùn)練AI大模型需要大量的計算資源,因此通常在GPU上執(zhí)行。GPU擁有大量的并行計算單元,非常適合執(zhí)行大規(guī)模的矩陣運算,如矩陣乘法、卷積等。在訓(xùn)練過程中,程序員需要編寫GPU并行代碼,以充分利用GPU的計算能力。
模型并行化:對于非常大的模型,單個GPU的內(nèi)存可能無法容納整個模型。在這種情況下,可以使用模型并行化技術(shù),即將模型的不同部分放在不同的GPU上執(zhí)行。這需要在GPU之間進行數(shù)據(jù)交換,因此需要編寫并行代碼來協(xié)調(diào)各個GPU的工作。
數(shù)據(jù)并行化:除了模型并行化,還可以使用數(shù)據(jù)并行化技術(shù),即將同一批次的數(shù)據(jù)分成多份,分別在多個GPU上處理。這同樣需要在GPU之間進行數(shù)據(jù)交換,因此需要編寫并行代碼來協(xié)調(diào)各個GPU的工作。
模型推理:在模型推理階段,可以使用CPU和GPU結(jié)合的方式來提高效率。例如,可以在CPU上執(zhí)行一些簡單的預(yù)處理和后處理任務(wù),如數(shù)據(jù)加載、解碼、格式轉(zhuǎn)換等,而將計算密集的模型推理任務(wù)交給GPU。
分布式訓(xùn)練:對于非常大的模型和數(shù)據(jù)集,可能需要使用分布式訓(xùn)練。在這種情況下,需要編寫并行代碼來協(xié)調(diào)多個機器上的CPU和GPU的工作,包括數(shù)據(jù)分發(fā)、模型更新等。
在以上的各個環(huán)節(jié)中,都需要充分考慮CPU和GPU的計算能力和通信開銷,以合理分配任務(wù)和資源。
HPC可以加速計算,但不能解決所有算法帶來的性能問題。以有限元方法為例,對于1億自由度的問題,如果不使用稀疏矩陣而按照滿秩矩陣傳統(tǒng)方法求解,其算法復(fù)雜度和時間復(fù)雜度都是一億的三次方,即使用”太湖之光”也要按小時來算,而且還沒有考慮內(nèi)存是否能裝下所有數(shù)據(jù)。
HPC并不把單一的硬件性能作為評價指標,因此HPC的最大特點在于通過合理增加硬件數(shù)量,提升并行性。所以軟件開發(fā)的目標就是:1.對于算法本身降低計算資源;2.盡可能將計算分解成獨立的任務(wù)。
1.GPU開發(fā)
GPU 說簡單就是利用顯卡以加速計算,GPU是發(fā)展較快的一個方向。目前很多商業(yè)求解器都支持GPU加速,目前的做法是把邏輯性較強的業(yè)務(wù)放在CPU,而把純運算部分放在GPU上,Navida公司提供了專門的GPU計算語言CUDA。主流的仿真軟件諸如Marc,Nastran,Abaqus,ANSYS,LSDYNA,F(xiàn)luent,StarCD,F(xiàn)EKO,Moldflow等等都支持GPU計算。
2. OpenMP
OpenMP是一個編譯器指令和庫函數(shù)的集合,主要是為共享式存儲計算機上的并行程序設(shè)計使用。簡單實用,可以快速上手。
3. OpenACC
OpenACC是一個可利用CPU/GPU 加速器編程標準 。OpenACC 類似于 OpenMP,通過簡單的編譯指令即可實現(xiàn),但需要安裝支持的編譯器,目前貌似沒有可用于商業(yè)開發(fā)的免費版本。
4. OpenCL
OpenCL是一種標準化,跨平臺,基于C語言的并行計算API,簡單講OpenCL是一種可以實現(xiàn)跨平臺,利用CPU/GPU的程序接口。
隨著硬件成本的不斷下降以及云技術(shù)的不斷成熟,許多云廠商將商業(yè)仿真軟件安裝在云端HPC服務(wù)器上,按照資源使用時間收費;有些提供專業(yè)軟件,可以在本地進行建模,提交任務(wù)到遠程HPC機器;還有些直接提供web端工具,將建模,仿真,計算數(shù)據(jù)等所有資源云端化。所有這些可以幫助用戶避免購買昂貴的硬件,大幅降低仿真成本。