GROMACS是一個(gè)用于生物分子系統(tǒng)的模擬軟件包,是世界范圍內(nèi)使用率最高的科學(xué)軟件應(yīng)用程序之一,也是理解重要生物過(guò)程(包括當(dāng)前新冠病毒大流行的基礎(chǔ))的關(guān)鍵工具。
在以前的職位中,我們展示了最近與核心開(kāi)發(fā)團(tuán)隊(duì)合作進(jìn)行的優(yōu)化,這些優(yōu)化使 GROMACS 在現(xiàn)代多 GPU 服務(wù)器上的運(yùn)行速度比以前快得多。這些優(yōu)化包括將計(jì)算和通信卸載到 GPU ,后者對(duì)于那些可以有效地將多個(gè) GPU 并行用于單個(gè)模擬的相對(duì)較大的情況尤其有利。有關(guān)最新異構(gòu)軟件引擎的并行化和內(nèi)部工作的更多信息,請(qǐng)參閱GROMACS 中分子動(dòng)力學(xué)模擬的非均勻并行化和加速。
另一個(gè)越來(lái)越常見(jiàn)的工作流涉及運(yùn)行許多獨(dú)立的 GROMACS 仿真,其中每個(gè)仿真都可以相對(duì)較小。 NVIDIA GPU 的規(guī)模和能力不斷增加,但通常情況下,相對(duì)較小的仿真系統(tǒng)的孤立單彈道仿真無(wú)法充分利用每個(gè)系統(tǒng)上的所有可用計(jì)算資源 GPU 。
但是,多部門(mén)工作流程可以涉及數(shù)十到數(shù)千個(gè)松散耦合的分子動(dòng)力學(xué)模擬。在此類工作負(fù)載中,目標(biāo)通常不是最小化單個(gè)仿真的求解時(shí)間,而是最大化整個(gè)集成的吞吐量。
按照 GPU 并行運(yùn)行多個(gè)模擬可以顯著提高總體吞吐量,正如之前在GROMACS 中分子動(dòng)力學(xué)模擬的非均勻并行化和加速中針對(duì) GROMACS 所示(圖 11 )。已創(chuàng)建 NVIDIA 多進(jìn)程服務(wù)器( MPS )和多實(shí)例 GPU ( MIG )功能,以促進(jìn)此類工作流,通過(guò)使每個(gè) GPU 能夠同時(shí)用于多個(gè)任務(wù),進(jìn)一步提高效率。
在這篇文章中,我們演示了為 GROMACS 按照 GPU 運(yùn)行多個(gè)模擬的好處。我們展示了如何利用 MPS ,包括與 MIG 結(jié)合使用,在每個(gè) GPU 上并行運(yùn)行多個(gè)模擬,從而實(shí)現(xiàn)高達(dá) 1.8 倍的吞吐量總體改善。
背景資料
硬件
對(duì)于本文后面給出的結(jié)果,我們?cè)贒GX A100服務(wù)器上運(yùn)行,該服務(wù)器是 NVIDIA 內(nèi)部賽琳娜超級(jí)計(jì)算機(jī)的一部分,它具有八個(gè) A100-SXM4-80GB GPU 和兩個(gè) AMD EPYC 7742 (羅馬) 64 核 CPU 插槽。
GROMACS 測(cè)試用例
為了生成下一節(jié)給出的結(jié)果,我們使用 24K 原子核糖核酸酶立方和 96K 原子 ADH-dodec 測(cè)試用例,這兩個(gè)測(cè)試用例都使用 PME 進(jìn)行遠(yuǎn)程電子 CTR 靜態(tài)測(cè)試。有關(guān)更多信息和輸入文件,請(qǐng)參閱GROMACS 中分子動(dòng)力學(xué)模擬的異構(gòu)并行化和加速補(bǔ)充信息。
我們使用 GROMACS 版本 2021 。 2 (與 CUDA 版本 11 。 2 、驅(qū)動(dòng)程序版本 470 。 57 。 02 一起使用)。對(duì)于單個(gè)孤立實(shí)例(在單個(gè)A100-SXM4-80GB GPU 上),使用與后面所述相同的 GROMACS 選項(xiàng),我們實(shí)現(xiàn)了 RNAse 的1083 納秒/天和 ADH 的378 納秒/天。
-update gpu選項(xiàng)對(duì)此處的性能至關(guān)重要。這將觸發(fā)“ GPU – 駐留步驟”,其中每個(gè) timestep 的更新和約束部分被卸載到 GPU 以及默認(rèn)的“ GPU 強(qiáng)制卸載”行為。如果沒(méi)有這一點(diǎn),在這個(gè)硬件上,每種情況下的性能大約降低 2 倍。這對(duì) CPU 和 GPU 可用功能的平衡非常敏感,因此如果在不同的硬件上運(yùn)行,建議您嘗試使用此選項(xiàng)。
對(duì)于本文描述的實(shí)驗(yàn),我們使用獨(dú)立啟動(dòng)的同一模擬系統(tǒng)的多個(gè)實(shí)例。這是真實(shí)集合模擬的代理,當(dāng)然,成員模擬和不規(guī)則通信之間可能存在細(xì)微差異,但仍有以類似方式重疊的范圍。
MPS
隨著 GPU 的規(guī)模和功能不斷增加,單個(gè)應(yīng)用程序的執(zhí)行可能無(wú)法充分利用 GPU 提供的所有資源。 NVIDIA 多進(jìn)程服務(wù)( MPS )是一種使多個(gè) CPU 進(jìn)程提交的計(jì)算內(nèi)核能夠在同一 GPU 上同時(shí)執(zhí)行的工具。這種重疊可能實(shí)現(xiàn)更徹底的資源使用和更好的總體吞吐量。
使用 MPS 還可以通過(guò)更有效地重疊硬件資源利用率和更好地利用基于 CPU 的并行性,在多個(gè) GPU 之間實(shí)現(xiàn)應(yīng)用程序的強(qiáng)大擴(kuò)展,如本文后面所述。
2017 年, NVIDIA Volta 架構(gòu)與 NVIDIA Volta MPS 一起發(fā)布,具有增強(qiáng)的功能,包括每個(gè) GPU 最多增加 48 個(gè) MPS 客戶端:這在所有后續(xù) V100 、 Quadro 和 GeForce GPU 上都受支持。
MIG
與 MPS 一樣, NVIDIA 多實(shí)例 GPU ( MIG )促進(jìn)了每個(gè) GPU 的共享,但對(duì)資源進(jìn)行了嚴(yán)格的分區(qū)。它非常適合在多個(gè)不同的用戶之間共享 GPU ,因?yàn)槊總€(gè) MIG 實(shí)例都有一組有保證的資源,并且是完全隔離的。
GPU 在選定的 NVIDIA 安培體系結(jié)構(gòu) MIG 上可用,包括 A100 ,每個(gè) GPU 最多支持七個(gè) MIG 實(shí)例。 MIG 可以與 MPS 組合,其中多個(gè) MPS 客戶端可以在每個(gè) MIG 實(shí)例上同時(shí)運(yùn)行,每個(gè)物理 GPU 最多支持 48 個(gè) MPS 客戶端。
雖然可以跨多個(gè) MIG 實(shí)例運(yùn)行單個(gè)應(yīng)用程序?qū)嵗?,例如使?MPI , MIG 的目標(biāo)并不是為該用例提供任何性能改進(jìn)。 MIG 的主要目的是在每個(gè) GPU 上促進(jìn)多個(gè)不同的應(yīng)用程序?qū)嵗S嘘P(guān)更多信息,請(qǐng)參閱通過(guò)多實(shí)例 GPU 充分利用 NVIDIA A100 GPU 。
績(jī)效結(jié)果
圖 1 。使用 RNAse Cubic (左)和 ADH Dodec (右)測(cè)試用例中每個(gè) GPU 的模擬次數(shù)來(lái)擴(kuò)展 DGX A100 服務(wù)器上的總吞吐量。顯示了使用 MPS (開(kāi)放三角形)、 MIG 結(jié)合 MPS (閉合三角形)和 none (開(kāi)放圓)的結(jié)果。
圖 1 顯示了 RNAse (左)和 ADH (右)在 8- GPU DGX A100 服務(wù)器上同時(shí)運(yùn)行的所有模擬中,每個(gè) GPU 的模擬次數(shù)對(duì)總綜合吞吐量(以 ns /天為單位,越高越好)的影響。每種情況下最左邊的結(jié)果(每個(gè) GPU 進(jìn)行一次模擬)僅比相應(yīng)的單獨(dú)模擬結(jié)果(前面給出)乘以 8 ( DGX A100 服務(wù)器上 GPU 的數(shù)量)低幾個(gè)百分點(diǎn)。這表明您可以在服務(wù)器上有效地運(yùn)行多個(gè)模擬,而不會(huì)產(chǎn)生明顯的干擾。
您可以看到,通過(guò)增加每個(gè) GPU 的模擬次數(shù),可以獲得實(shí)質(zhì)性的改進(jìn),對(duì)于相對(duì)較小的 RNAse 病例,模擬次數(shù)最多為 1 。 8X ,對(duì)于較大的 ADH 病例,模擬次數(shù)最多為 1 。 3X 。
對(duì)于每個(gè)測(cè)試用例,我們使用每個(gè) GPU 最多七個(gè) MIG 分區(qū),包括沒(méi)有 MIG 和有 MIG 的結(jié)果。在這種情況下,MPS用于每個(gè) GPU 運(yùn)行多個(gè)進(jìn)程,每個(gè)物理 GPU 最多運(yùn)行48個(gè)MPS客戶端,其中 MIG 情況下的最大客戶端總數(shù)為42:7個(gè) MIG 分區(qū)中的每個(gè)分區(qū)有6個(gè)MPS客戶端。作為參考,我們還包括了沒(méi)有MPS或 MIG 的默認(rèn)結(jié)果,對(duì)于這些結(jié)果,我們認(rèn)為按照 GPU 運(yùn)行多個(gè)模擬沒(méi)有任何好處。
對(duì)于每個(gè)測(cè)試用例,最左邊的 MIG+MPS 結(jié)果是每個(gè) GPU 進(jìn)行 7 次模擬:每個(gè) MIG 客戶端進(jìn)行一次模擬(即,沒(méi)有 MPS)。我們發(fā)現(xiàn)這些“純 MIG”性能結(jié)果與相應(yīng)的“純 MPS”結(jié)果相比沒(méi)有優(yōu)勢(shì)。對(duì)于 RNAse,純 MIG 類似于純 MPS,而對(duì)于 ADH 則低于純 MPS。然而,將 MIG 與 MPS 相結(jié)合會(huì)導(dǎo)致 RNAse 的最佳整體結(jié)果,比最佳純 MPS 結(jié)果高約 7%。它導(dǎo)致性能與 ADH 的純 MPS 相當(dāng),但略低于純 MPS。
對(duì)于 RNAse ,性能最好的配置是每個(gè) MIG 四個(gè) MPS 客戶端,即每個(gè) GPU 總共 28 個(gè)模擬。對(duì)于 ADH ,最好的配置是使用純 MPS ,每 GPU 進(jìn)行 16 次模擬,而不使用 MIG 。
當(dāng) MIG 處于活動(dòng)狀態(tài)時(shí),它強(qiáng)制將每個(gè)模擬隔離到 GPU 硬件的特定分區(qū),這可能是有利的,具體取決于測(cè)試用例關(guān)鍵路徑的特定數(shù)據(jù)訪問(wèn)模式。另一方面,在沒(méi)有 MIG 的情況下,每個(gè)仿真都可以以更動(dòng)態(tài)的方式訪問(wèn) GPU 上的資源,這也是有利的。
MIG 的好處可能取決于測(cè)試用例,正如我們前面討論的那樣。令人欣慰的是,MPS在有 MIG 和沒(méi)有 MIG 的情況下都是有效的,特別是在有些用例中 MIG 出于其他原因是可取的,例如在用戶之間共享 GPU 。
GROMACS 是異構(gòu)的,并且具有靈活性,在這方面,計(jì)算可以卸載到 GPU ,其中 CPU 可以同時(shí)使用。我們的運(yùn)行使用了力計(jì)算的默認(rèn)選項(xiàng),將非粘結(jié)力和 PME 力計(jì)算映射到 GPU ,同時(shí)使用 CPU 進(jìn)行粘結(jié)力計(jì)算。這種配置通常會(huì)導(dǎo)致資源的良好重疊使用。
我們嘗試將粘結(jié)力計(jì)算卸載到 GPU (使用 -bonding GPU 選項(xiàng)),性能類似,但在所有情況下都略低。如前所述,我們使用 GPU – 駐留步驟。我們嘗試將更新和約束映射到 CPU ,我們還觀察到了根據(jù) GPU 運(yùn)行多個(gè)模擬的好處。
對(duì)于較大的 ADH 情況,可實(shí)現(xiàn)的吞吐量大大低于將更新和約束卸載到 GPU 時(shí)的吞吐量。然而,對(duì)于較小的 RNAse 情況,盡管在每 GPU 運(yùn)行一次(或幾次)模擬時(shí)吞吐量較低,但在每 GPU 運(yùn)行八次或更多模擬時(shí),無(wú)論是否卸載此部分,我們都看到了類似的吞吐量。行為可能因測(cè)試用例和硬件而異,因此最好使用所有可用的運(yùn)行時(shí)組合進(jìn)行實(shí)驗(yàn)。
我們還在不同的硬件上重復(fù)了核糖核酸酶的MPS實(shí)驗(yàn):NVIDIA A40和V100-SXM2 GPU ,我們還發(fā)現(xiàn),每個(gè) GPU 運(yùn)行多個(gè)模擬可以提高吞吐量,盡管程度低于A100。鑒于這些 GPU 的規(guī)格相對(duì)較低,這并不奇怪。A40為1.5倍,V100-SXM2為1.4倍,觀察到的吞吐量改善明顯低于A100的1.8倍,但仍然值得。
這些結(jié)果表明,通過(guò)在 MPS 中按 GPU 運(yùn)行多個(gè)進(jìn)程,并將 MIG 與 MPS 相結(jié)合,可以實(shí)現(xiàn)大的吞吐量改進(jìn)。最佳配置(包括 GROMACS 中的計(jì)算卸載選項(xiàng))取決于具體情況,我們?cè)俅谓ㄗh進(jìn)行實(shí)驗(yàn)。以下各節(jié)描述了這些模擬是如何編排的。
運(yùn)行配置詳細(xì)信息
在本節(jié)中,我們將提供用于生成結(jié)果的腳本,并描述其中包含的命令,作為您自己工作流的參考或起點(diǎn)。
純議員選舉
以下腳本使用 MPS 向 8- GPU DGX A100 服務(wù)器啟動(dòng)多個(gè)模擬。
35 3)NUMA=0;; 36 4)NUMA=7;; 37 5)NUMA=6;; 38 6)NUMA=5;; 39 7)NUMA=4;; 40 esac 41 42 # Loop over number of simulations per GPU 43 for (( j=0; j<$NSIMPERGPU; j++ )); 44 do 45 # Create a unique identifier for this simulation to use as a working directory 46 id=gpu${i}_sim${j} 47 rm -rf $id 48 mkdir -p $id 49 cd $id 50 51 ln -s $INPUT topol.tpr 52 53 # Launch GROMACS in the background on the desired resources 54 echo "Launching simulation $j on GPU $i with $NTHREAD CPU thread(s) on NUMA region $NUMA" 55 CUDA_VISIBLE_DEVICES=$i numactl --cpunodebind=$NUMA $GMX mdrun \ 56 -update gpu -nsteps 10000000 -maxh 0.2 -resethway -nstlist 100 \ 57 > mdrun.log 2>&1 & 58 cd .. 59 done 60 done 61 echo "Waiting for simulations to complete..." 62 wait
第 7 行和第 9 行分別指定 GROMACS 二進(jìn)制文件和測(cè)試用例輸入文件的位置。
第 11-12 行指定服務(wù)器的固定硬件詳細(xì)信息,該服務(wù)器有 8 個(gè) GPU 和 128 個(gè) CPU 內(nèi)核。
第 14 行指定了每個(gè) GPU 的模擬次數(shù),可以改變模擬次數(shù)以評(píng)估性能,正如生成上述結(jié)果所做的那樣。
第 17-21 行計(jì)算每個(gè)模擬應(yīng)分配多少 CPU 個(gè)線程。
第 25 行啟動(dòng) MPS 守護(hù)進(jìn)程,使從單獨(dú)模擬啟動(dòng)的內(nèi)核能夠在同一 GPU 上同時(shí)執(zhí)行。
第 28-40 行在服務(wù)器中的 GPU 上循環(huán),并為每個(gè)特定 GPU 分配一組適當(dāng)?shù)?CPU 內(nèi)核(“NUMA區(qū)域”)。此映射特定于DGX A100拓?fù)洌撏負(fù)渚哂袃蓚€(gè)AMD CPU s,每個(gè)AMD CPU 具有四個(gè)NUMA區(qū)域。我們安排特定的編號(hào)以獲得最佳親和力。有關(guān)更多信息,請(qǐng)參見(jiàn)DGX A100 用戶指南中的第1.3節(jié)。
第 43-49 行循環(huán)每個(gè) GPU 的模擬次數(shù),并創(chuàng)建模擬特有的工作目錄。
第 51 行在此唯一工作目錄中創(chuàng)建指向輸入文件的鏈接。
第 55-57 行啟動(dòng)每個(gè)模擬,使用CUDA_VISIBLE_DEVICES環(huán)境變量將其限制為所需的 GPU ,使用 numactl 實(shí)用程序?qū)⑵湎拗茷樗璧?CPU NUMA 區(qū)域??梢允褂谩?code 》 apt install numactl 《/ code 》提前安裝該實(shí)用程序。
-update GPU 選項(xiàng)與默認(rèn)的 GPU 強(qiáng)制卸載行為相結(jié)合,對(duì)性能至關(guān)重要(見(jiàn)上文),而-nsteps 10000000 -maxh 0.2 -resethway組合的結(jié)果是運(yùn)行每個(gè)模擬 12 分鐘( 0 。 2 小時(shí)),其中內(nèi)部計(jì)時(shí)器會(huì)在中途重置,以消除任何初始化開(kāi)銷(xiāo)。-nstlist 100指定 GROMACS 應(yīng)每隔 100 步重新生成內(nèi)部鄰居列表,其中這是一個(gè)可調(diào)參數(shù),影響性能但不影響正確性。)
結(jié)合 MIG 和 MPS 運(yùn)行
以下腳本是前一個(gè)腳本的版本,擴(kuò)展為支持每個(gè) GPU 的多個(gè) MIG 實(shí)例,其中每個(gè) MIG 實(shí)例可以使用 MPS 啟動(dòng)多個(gè)仿真。
1 #!/bin/bash 2 # Demonstrator script to run multiple simulations per GPU with MIG+MPS on DGX-A100 3 # 4 # Alan Gray, NVIDIA 5 6 # Location of GROMACS binary 7 GMX=/lustre/fsw/devtech/hpc-devtech/alang/gromacs-binaries/v2021.2_tmpi_cuda11.2/bin/gmx 8 # Location of input file 9 INPUT=/lustre/fsw/devtech/hpc-devtech/alang/Gromacs_input/adhd.tpr 10 11 NGPU=8 # Number of GPUs in server 12 NCORE=128 # Number of CPU cores in server 13 14 NMIGPERGPU=7 # Number of MIGs per GPU 15 NSIMPERMIG=3 # Number of simulations to run per MIG (with MPS) 16 17 # Number of threads per simulation 18 NTHREAD=$(($NCORE/($NGPU*$NMIGPERGPU*$NSIMPERMIG))) 19 if [ $NTHREAD -eq 0 ] 20 then 21 NTHREAD=1 22 fi 23 export OMP_NUM_THREADS=$NTHREAD 24 25 # Loop over number of GPUs in server 26 for (( i=0; i<$NGPU; i++ )); 27 do 28 # Set a CPU NUMA specific to GPU in use with best affinity (specific to DGX-A100) 29 case $i in 30 0)NUMA=3;; 31 1)NUMA=2;; 32 2)NUMA=1;; 33 3)NUMA=0;; 34 4)NUMA=7;; 35 5)NUMA=6;; 36 6)NUMA=5;; 37 7)NUMA=4;; 38 esac 39 40 # Discover list of MIGs that exist on this GPU 41 MIGS=`nvidia-smi -L | grep -A $(($NMIGPERGPU+1)) "GPU $i" | grep MIG | awk '{ print $6 }' | sed 's/)//g'` 42 MIGARRAY=($MIGS) 43 44 # Loop over number of MIGs per GPU 45 for (( j=0; j<$NMIGPERGPU; j++ )); 46 do 47 48 MIGID=${MIGARRAY[j]} 49 # Start MPS daemon unique to MIG 50 export CUDA_MPS_PIPE_DIRECTORY=/tmp/$MIGID 51 mkdir -p $CUDA_MPS_PIPE_DIRECTORY 52 CUDA_VISIBLE_DEVICES=$MIGID nvidia-cuda-mps-control -d 53 54 # Loop over number of simulations per MIG 55 for (( k=0; k<$NSIMPERMIG; k++ )); 56 do 57 58 # Create a unique identifier for this simulation to use as a working directory 59 id=gpu${i}_mig${j}_sim${k} 60 rm -rf $id 61 mkdir -p $id 62 cd $id 63 64 ln -s $INPUT topol.tpr 65 66 # Launch GROMACS in the background on the desired resources 67 echo "Launching simulation $k on MIG $j, GPU $i with $NTHREAD CPU thread(s) on NUMA region $NUMA" 68 CUDA_VISIBLE_DEVICES=$MIGID numactl --cpunodebind=$NUMA $GMX mdrun \ 69 -update gpu -nsteps 10000000 -maxh 0.2 -resethway -nstlist 100 \ 70 > mdrun.log 2>&1 & 71 cd .. 72 done 73 done 74 done 75 echo "Waiting for simulations to complete..." 76 wait
與純 MPS 腳本的主要區(qū)別以粗體突出顯示:
第 14 行指定每個(gè) GPU 的 MIG 實(shí)例數(shù),設(shè)置為最多 7 個(gè)。使用以下命令提前在八個(gè) GPU 中的每一個(gè)上創(chuàng)建實(shí)例:
for gpu in 0 1 2 3 4 5 6 7 do nvidia-smi mig -i $gpu --create-gpu-instance \ 1g.10gb,1g.10gb,1g.10gb,1g.10gb,1g.10gb,1g.10gb,1g.10gb \ --default-compute-instance done
第 15 行指定每個(gè) MIG 實(shí)例要運(yùn)行的模擬數(shù)量。
第 18 行調(diào)整 CPU 核心分配計(jì)算,以正確地考慮每個(gè) GPU 的總模擬次數(shù)。
第 41-42 行位于循環(huán)(物理) GPU s 內(nèi),列出與 GPU 關(guān)聯(lián)的 MIG s 唯一的 ID ,并創(chuàng)建包含這七個(gè) ID 的可索引數(shù)組。
第 45 行向循環(huán)嵌套添加一個(gè)新的中間級(jí)別,對(duì)應(yīng)于每個(gè) GPU 的多個(gè) MIG s 。
第 48-52 行根據(jù) MIG 啟動(dòng)一個(gè)單獨(dú)的 MPS 守護(hù)程序,這是結(jié)合 MIG 和 MPS 的要求。
第 55 行在每個(gè) MIG 的模擬次數(shù)上循環(huán)。它繼續(xù)像以前一樣啟動(dòng)每個(gè)模擬,但現(xiàn)在每個(gè)模擬都被限制為使用唯一 MIG ID 的特定 MIG 實(shí)例。
多流程的其他優(yōu)勢(shì)
到目前為止,我們已經(jīng)向您展示了如何按照 GPU 運(yùn)行多個(gè)進(jìn)程可以為 GROMACS 帶來(lái)巨大的好處,并且我們提供了具體的示例來(lái)演示。類似的技術(shù)可以在更廣泛的用例和場(chǎng)景中提供好處,包括 GROMACS 和其他應(yīng)用程序。在本節(jié)中,我們將簡(jiǎn)要討論其中的一些。
GROMACS 多模擬框架
在這篇文章中,我們使用 shell 腳本中的循環(huán)并行啟動(dòng)了多個(gè)模擬。內(nèi)置的 GROMACS 多仿真框架提供了一種替代機(jī)制,其中通過(guò)-multidir選擇mdrun啟動(dòng) GROMACS 時(shí),將多個(gè) MPI 任務(wù)映射到多個(gè)仿真。以類似的方式,最大化吞吐量的好處也可以應(yīng)用于該機(jī)制。
為了評(píng)估這一點(diǎn),我們沒(méi)有直接使用 MPI 啟動(dòng) GROMACS ,而是通過(guò)一個(gè)包裝器腳本啟動(dòng) GROMACS ,該腳本可以為每個(gè) MPI 級(jí)別設(shè)置適當(dāng)?shù)沫h(huán)境變量和numactl選項(xiàng)??梢允褂铆h(huán)境變量發(fā)現(xiàn)秩,例如 OpenMPI 的OMPI_COMM_WORLD_LOCAL_RANK。另一種方法是以類似的方式使用 MPI 啟動(dòng)器的綁定功能。
我們的實(shí)驗(yàn)表明, MPS 的行為與前面描述的一樣。然而,相比之下,我們并沒(méi)有看到 MPS 和 MIG 結(jié)合的任何額外好處,這需要進(jìn)一步的研究。
多模擬框架還支持在集合內(nèi)的模擬之間進(jìn)行不頻繁的副本交換,使用-replex選擇mdrun或AWH 多步行機(jī)方法在一個(gè)模擬中應(yīng)用多個(gè)獨(dú)立的偏置電位。對(duì)于這些工作流,性能行為取決于用例的特定細(xì)節(jié),因此我們建議進(jìn)行實(shí)驗(yàn)。有關(guān)-replex選項(xiàng)的更多信息,請(qǐng)參閱副本交換模擬簡(jiǎn)介教程。
用于多重 GPU 強(qiáng)擴(kuò)展的 MPS
這篇文章探討了 MPS (和 MIG )的好處,以提高并行運(yùn)行的許多獨(dú)立模擬的吞吐量。另一個(gè)共同目標(biāo)是通過(guò)并行使用多個(gè) GPU 來(lái)最小化單個(gè)模擬的求解時(shí)間。
通常,單獨(dú)的 CPU 任務(wù)(如 MPI 任務(wù))用于控制每個(gè) GPU ,并執(zhí)行未卸載到 GPU 的任何計(jì)算工作負(fù)載。在某些情況下,每個(gè) GPU 運(yùn)行多個(gè) CPU 任務(wù)是有益的,因?yàn)檫@可以為重疊的 CPU 計(jì)算 GPU 計(jì)算和通信提供額外的機(jī)會(huì)。按照 GPU 運(yùn)行多個(gè)進(jìn)程也有助于重新平衡并行運(yùn)行中固有的負(fù)載不平衡。有關(guān)更多信息,請(qǐng)參閱本節(jié)后面討論的 GROMACS 示例。
此方法還可以增加 CPU 上基于任務(wù)的并行程度,并增強(qiáng)應(yīng)用程序中任何 CPU 駐留的并行工作負(fù)載的性能。當(dāng) MPS 處于活動(dòng)狀態(tài)時(shí),與多個(gè)任務(wù)關(guān)聯(lián)的多個(gè)內(nèi)核可以在每個(gè) GPU 上并行執(zhí)行。最好是進(jìn)行實(shí)驗(yàn),以發(fā)現(xiàn)它是否能對(duì)特定情況有益,并找到最佳配置。
格羅馬克的例子
下面是一個(gè)具體的例子。在以前的職位中,我們將重點(diǎn)放在每個(gè) GROMACS 模擬并行運(yùn)行四個(gè) GPU 的情況下,以最小化求解時(shí)間。我們展示了這四個(gè) GPU 如何有效地平衡三個(gè) PP 任務(wù)和一個(gè) PME 任務(wù)。
但是,如果您試圖將該配置調(diào)整為兩個(gè) GPU ,最自然的方法是分配一個(gè) PP GPU 和一個(gè) PME GPU 。這不會(huì)產(chǎn)生良好的性能,因?yàn)?PP GPU 的工作量要大得多。
最好將四 GPU 配置映射到兩 GPU 配置,并激活 MPS 以啟用內(nèi)核重疊。 GPU 中的一個(gè)重疊兩個(gè) PP 任務(wù),而另一個(gè)重疊兩個(gè) PP 和一個(gè) PME 。這將導(dǎo)致更好的負(fù)載平衡和更快的解決時(shí)間。在GROMACS 中分子動(dòng)力學(xué)模擬的非均勻并行化和加速論文中,該技術(shù)用于生成圖 12 的兩個(gè) GPU 強(qiáng)縮放結(jié)果。同樣,我們建議對(duì)任何特定情況進(jìn)行實(shí)驗(yàn)。
與計(jì)算重疊的 I / O
這篇文章展示了按照 GPU 運(yùn)行多個(gè)進(jìn)程如何通過(guò)重疊提供好處。好處不僅限于計(jì)算和通信。此解決方案也適用于花費(fèi)大量 I / O 時(shí)間的情況。在這些情況下,一個(gè)實(shí)例的 I / O 組件可以與另一個(gè)實(shí)例的計(jì)算組件重疊,以提高總體吞吐量。 MPS 使內(nèi)核能夠與其他計(jì)算內(nèi)核、通信或文件 I / O 并行執(zhí)行。
關(guān)于作者
Alan Gray 是 NVIDIA 的首席開(kāi)發(fā)技術(shù)工程師,專門(mén)研究應(yīng)用程序優(yōu)化,特別是大規(guī)模 GPU 加速體系結(jié)構(gòu)。
Szilárd Páll 是斯德哥爾摩 KTH 皇家理工學(xué)院 PCD 高性能計(jì)算中心的 HPC 研究員。他擁有計(jì)算機(jī)科學(xué)和計(jì)算生物物理學(xué)的背景,自 2008 年以來(lái)一直在為 GPU 加速器編程。
審核編輯:郭婷
-
cpu
+關(guān)注
關(guān)注
68文章
11080瀏覽量
217114 -
gpu
+關(guān)注
關(guān)注
28文章
4948瀏覽量
131254 -
服務(wù)器
+關(guān)注
關(guān)注
13文章
9795瀏覽量
88001
發(fā)布評(píng)論請(qǐng)先 登錄
數(shù)據(jù)吞吐量提升!面向下一代音頻設(shè)備,藍(lán)牙HDT、星閃、Wi-Fi、UWB同臺(tái)競(jìng)技
CY7C65211 作為 SPI 從機(jī)模式工作時(shí)每秒的最大吞吐量是多少?
如何在Visual Studio 2022中運(yùn)行FX3吞吐量基準(zhǔn)測(cè)試工具?
FX3進(jìn)行讀或?qū)懖僮鲿r(shí)CS信號(hào)拉低,在讀或?qū)懲瓿珊驝S置高,對(duì)吞吐量有沒(méi)有影響?
無(wú)法在GPU上運(yùn)行ONNX模型的Benchmark_app怎么解決?
使用OpenVINO?進(jìn)行優(yōu)化后,為什么DETR模型在不同的硬件上測(cè)試時(shí)顯示不同的結(jié)果?
高通吞吐量超高精度加工

ADC芯片的采樣率為100MSPS,位寬16位,那么吞吐量是多少?
【「算力芯片 | 高性能 CPU/GPU/NPU 微架構(gòu)分析」閱讀體驗(yàn)】--了解算力芯片GPU
TMS320VC5510 HPI吞吐量和優(yōu)化

TMS320C6474通用總線架構(gòu)(CBA)吞吐量

TMS320DM36x SoC架構(gòu)和吞吐量

TMS320C6472/TMS320TCI6486的吞吐量應(yīng)用程序報(bào)告

評(píng)論