999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

利用LSF API實(shí)現(xiàn)GPU集群的并行機(jī)時(shí)統(tǒng)計(jì)

2020-12-07 06:08:03盛樂標(biāo)游偉倩張予倩周慶林
計(jì)算機(jī)時(shí)代 2020年11期

盛樂標(biāo) 游偉倩 張予倩 周慶林

摘? 要: 近年來GPU的使用越來越廣泛,更多的高性能計(jì)算集群采用CPU和GPU的異構(gòu)架構(gòu)。準(zhǔn)確的GPU計(jì)算機(jī)時(shí)統(tǒng)計(jì),是大型計(jì)算機(jī)集群執(zhí)行計(jì)費(fèi)政策的基礎(chǔ),但作業(yè)調(diào)度軟件LSF并未提供簡(jiǎn)便直觀的GPU計(jì)算機(jī)時(shí)統(tǒng)計(jì)功能。文章提出利用LSF API結(jié)合C語言、MPI和Shell腳本語言等進(jìn)行編程來解決,實(shí)現(xiàn)多樣化、可定制的GPU計(jì)算機(jī)時(shí)統(tǒng)計(jì)和報(bào)表制作,為高性能計(jì)算中心和超級(jí)計(jì)算中心的管理帶來便利。

關(guān)鍵詞: 高性能計(jì)算; 集群管理; GPU集群; 機(jī)時(shí)統(tǒng)計(jì)

中圖分類號(hào):G482? ? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A? ? ? 文章編號(hào):1006-8228(2020)11-63-03

Abstract: In recent years, GPUs have become more and more widely used, and more high-performance computing clusters have adopted heterogeneous architectures of CPU and GPU. Accurate GPU computation time accounting are the basis for large computer clusters to implement billing policies, but the job scheduling software LSF does not provide simple and intuitive methods for GPU computation time accounting. By using LSF API, programming with C language combined with MPI and Shell scripting language etc. is a good resolution, which can realize diverse and customizable GPU computation time statistics and make corresponding reports, so as to bring convenience to the management of high-performance computing centers and supercomputing centers.

Key words: high performance computing; cluster management; GPU cluster; computation time accounting

0 引言

高性能計(jì)算在科學(xué)研究、國防建設(shè)以及科技發(fā)展中發(fā)揮著重要作用,人們對(duì)此已經(jīng)取得廣泛共識(shí)[1]。隨著計(jì)算需求的不斷增長,國內(nèi)外對(duì)高性能計(jì)算集群的建設(shè)興趣也有增無減,歐美、日本、中國等在E級(jí)超級(jí)計(jì)算機(jī)的研發(fā)和建設(shè)方面更是投資巨大。在國內(nèi),除了建設(shè)多個(gè)國家超級(jí)計(jì)算中心,高校和科研院所也不斷地增加高性能計(jì)算方面的投入[2-4]。近年來,隨著人工智能的迅速發(fā)展,對(duì)GPU服務(wù)器的需求急劇增加,新建的大型集群往往都采用CPU和GPU的混合架構(gòu)。由于各地高性能計(jì)算中心或超級(jí)計(jì)算中心都采取收費(fèi)政策,因此,準(zhǔn)確的CPU和GPU計(jì)算機(jī)時(shí)統(tǒng)計(jì)數(shù)據(jù)是超算中心或高性能計(jì)算中心進(jìn)行計(jì)費(fèi)的前提,并且可以為管理者提供可靠的分析數(shù)據(jù),輔助管理者進(jìn)行相關(guān)決策。目前,LSF、PBS Pro等作業(yè)調(diào)度軟件所提供的計(jì)算機(jī)時(shí)統(tǒng)計(jì)功能還不太完善,并不適合高性能計(jì)算中心的個(gè)性化需求[5-7]。以IBM公司的Spectrum LSF 10.1為例,其提供的bacct命令只能查詢某段時(shí)間內(nèi)用戶累計(jì)使用的CPU time,而不能提供對(duì)應(yīng)的wall time,同時(shí)也無法直觀獲取計(jì)算作業(yè)使用的GPU卡數(shù)量。因此,對(duì)GPU機(jī)時(shí)的統(tǒng)計(jì)會(huì)遇到諸多困難,但高性能計(jì)算中心又的確在這方面有切實(shí)的需求。之前,我們?cè)O(shè)計(jì)過利用LSF API實(shí)行CPU機(jī)時(shí)的統(tǒng)計(jì)[7],在前面工作的基礎(chǔ)上,本文將探討一種利用LSF API實(shí)現(xiàn)對(duì)GPU計(jì)算機(jī)時(shí)進(jìn)行高效統(tǒng)計(jì)的并行程序設(shè)計(jì)方法。

1 GPU計(jì)算機(jī)時(shí)統(tǒng)計(jì)策略

超算中心對(duì)計(jì)算資源的計(jì)費(fèi),往往是依據(jù)用戶對(duì)計(jì)算資源的實(shí)際占用時(shí)間,這樣比較客觀和公平。GPU服務(wù)器的計(jì)算機(jī)時(shí),主要分為兩部分,即CPU計(jì)算機(jī)時(shí)和GPU計(jì)算機(jī)時(shí)。CPU計(jì)算機(jī)時(shí)一般采用wall-clock time(簡(jiǎn)稱wall time)與所用CPU核數(shù)的乘積進(jìn)行CPU計(jì)算資源使用量統(tǒng)計(jì),單位為核時(shí);GPU計(jì)算機(jī)時(shí)與此類似,也可采用wall time與所用GPU卡數(shù)量的乘積進(jìn)行GPU計(jì)算資源使用量統(tǒng)計(jì),單位為卡時(shí)。CPU計(jì)算機(jī)時(shí)的統(tǒng)計(jì)方法,我們?cè)谥暗奈恼轮幸延谐浞株U述[7],本文重點(diǎn)闡述的 GPU 計(jì)算機(jī)時(shí)的統(tǒng)計(jì),主要解決兩方面的問題:一是獲得作業(yè)占用的GPU卡的數(shù)量;二是機(jī)時(shí)統(tǒng)計(jì)程序的并行化。這里需要特別提醒的是,不宜大范圍使用CPU time作為作業(yè)CPU機(jī)時(shí)的統(tǒng)計(jì),因?yàn)镃PU time忽略了I/O和系統(tǒng)開銷等對(duì)計(jì)算資源的實(shí)際占用時(shí)間;在過去一些不支持CGROUP的舊版操作系統(tǒng)和舊版LSF,有些多線程程序在實(shí)際運(yùn)行時(shí)會(huì)占用節(jié)點(diǎn)內(nèi)比申請(qǐng)數(shù)更多的CPU核資源,這時(shí)CPU time會(huì)高于wall time與所用CPU核數(shù)的乘積,出現(xiàn)這種情況時(shí)使用CPU time是對(duì)機(jī)時(shí)損失的一種補(bǔ)償。隨著虛擬化技術(shù)的不斷進(jìn)步,新的Linux操作系統(tǒng)內(nèi)核已支持CGROUP資源隔離,新版LSF也加入了相應(yīng)支持,計(jì)算節(jié)點(diǎn)和LSF同時(shí)啟用CGROUP功能,則可以規(guī)避上述問題。

2 軟件設(shè)計(jì)

由于IBM Spectrum LSF 10.1的計(jì)算機(jī)時(shí)統(tǒng)計(jì)程序bacct本身并不包含對(duì)作業(yè)wall time和GPU機(jī)時(shí)的統(tǒng)計(jì),因此我們必須通過編程手段來實(shí)現(xiàn)相關(guān)統(tǒng)計(jì)。Spectrum LSF提供了應(yīng)用程序接口API,方便我們靈活地通過編程實(shí)現(xiàn)一些個(gè)性化的需求。本文中介紹的GPU計(jì)算機(jī)時(shí)統(tǒng)計(jì)軟件主要由一個(gè)C語言程序和一個(gè)Shell腳本程序構(gòu)成,軟件框架圖見圖1。

C語言程序負(fù)責(zé)調(diào)用LSF API庫函數(shù)進(jìn)行作業(yè)wall time統(tǒng)計(jì)和作業(yè)使用的gpu卡數(shù)量的統(tǒng)計(jì),是整個(gè)軟件的核心部分;MPI相關(guān)語句實(shí)現(xiàn)核心計(jì)算部分的并行化;腳本語言則在調(diào)用C語言程序的基礎(chǔ)上分析出各個(gè)用戶在不同隊(duì)列不同時(shí)間段的計(jì)算資源使用量。

2.1 LSF API

Spectrum LSF API主要包含兩種類型的庫:一種是LSLIB,這是LSF的基礎(chǔ)庫,為外部應(yīng)用使用LSF的基礎(chǔ)服務(wù)提供支持;另一種是LSBLIB,LSF的批處理庫,為外部應(yīng)用提供作業(yè)查詢、提交、控制、操作等的批量處理服務(wù)接口,也可實(shí)現(xiàn)對(duì)批量日志文件的讀取與分析。本文中介紹的程序主要涉及LSBLIB庫中的兩個(gè)數(shù)據(jù)結(jié)構(gòu)eventRec、jobFinishLog和一個(gè)函數(shù)lsb_geteventrec()。lsb_geteventrec()函數(shù)需要讀取LSF的lsb.events或lsb.acct文件,這些文件記錄了與用戶作業(yè)有關(guān)的關(guān)鍵信息。在使用LSF API的LSBLIB庫函數(shù)前,需要調(diào)用lsb_init()函數(shù)進(jìn)行LSBLIB的初始化。

2.2 C語言編程

此部分主要是利用lsb_geteventrec()函數(shù)來實(shí)現(xiàn)對(duì)作業(yè)從開始到結(jié)束的所用時(shí)間進(jìn)行統(tǒng)計(jì),程序設(shè)計(jì)時(shí)涉及到多個(gè)C語言頭文件,包括:stdio.h、stdlib.h、string.h、time.h;另外還包括兩個(gè)LSF軟件所提供的頭文件:lsf.h和lsbatch.h。

2.2.1 時(shí)間格式轉(zhuǎn)換

由于該程序操作的主要對(duì)象就是時(shí)間,然而LSF的bacct程序?qū)r(shí)間有一定的格式要求,為了程序設(shè)計(jì)的統(tǒng)一,我們將此C程序所需讀入的時(shí)間參數(shù)格式確定為“年/月/日/小時(shí):分鐘:秒”,如“2020/7/10/0:0:0”。另外,由于歷史原因,計(jì)算機(jī)的計(jì)時(shí)系統(tǒng)存在一個(gè)千年問題,因此也需要在時(shí)間格式轉(zhuǎn)換時(shí)加以考慮。時(shí)間格式轉(zhuǎn)換的具體實(shí)現(xiàn)方法可以參考我們之前的相關(guān)工作[7]。

2.2.2 獲取作業(yè)wall time

該部分需要實(shí)現(xiàn)對(duì)某段時(shí)間范圍內(nèi)某用戶在某個(gè)隊(duì)列或某些隊(duì)列中的作業(yè)使用的wall time、CPU核數(shù)和GPU卡數(shù)進(jìn)行統(tǒng)計(jì)。Wall time可以通過作業(yè)結(jié)束時(shí)間減去作業(yè)開始時(shí)間獲得,作業(yè)所用的CPU核數(shù)也可以通過finishJob->numExHosts獲得,但是LSBLIB的jobFinishLog函數(shù)中并未直接提供作業(yè)所用GPU卡數(shù)量的相關(guān)變量,這就給我們提取GPU卡數(shù)量帶來了困難。不過,jobFinishLog函數(shù)提供了gRusage結(jié)構(gòu)化數(shù)據(jù),在該結(jié)構(gòu)化數(shù)據(jù)中包含了GPU_ALLOC、GPU Models、GPU Factors等信息,這些信息經(jīng)過處理,可以分析出實(shí)際使用的GPU卡數(shù)量。以GPU Models為例,在gRusage的結(jié)構(gòu)化數(shù)據(jù)中,通過提取JOB_GPU_ALLOC鍵值對(duì),可以獲得類似GPU_MODELS="TeslaK40c-11441{0[0,1]1[0,1]}"這樣的信息,該信息明確了作業(yè)使用了哪些GPU計(jì)算節(jié)點(diǎn)的哪些GPU卡,而GPU卡的計(jì)數(shù)通過上述信息則很容易統(tǒng)計(jì)。

程序的關(guān)鍵部分如下(省去了變量聲明、參數(shù)檢查、lsb.events/lsb.acct文件檢查等部分):

/* gpu_s為gRusage中獲取的結(jié)構(gòu)化數(shù)據(jù),gpu_np為

GPU_FACTORS字符串的長度*/

for (;;) {

record=lsb_geteventrec(fp, &lineNum);

finishJob=&(record->eventLog.jobFinishLog);

if (strcmp(finishJob->userName, userName)==0 &&

strcmp(finishJob->queue, queue)==0) {

np2=finishJob->numExHosts;

if (finishJob->endTime>startt && finishJob->

endTime<=endt) {

walltime=walltime+(finishJob->endTime-

finishJob->startTime)*np2;

if(gpu_s) {

strncpy(gpufactors, gpu_s, gpu_np);

strtok(gpufactors, delim3);

while((numchar=strtok(NULL, delim3))) {

ngpus++; }

gpuwalltime=gpuwalltime+(st2-st1)*ngpus; }

cput=cput+finishJob->cpuTime; }}

else {

continue;}}

2.3 代碼的并行化

基于上一節(jié)的內(nèi)容,我們獲得了某用戶在某段時(shí)間內(nèi)某個(gè)隊(duì)列的計(jì)算資源占用時(shí)間;然而,隨著集群規(guī)模的不斷增大、集群用戶數(shù)的增多和完成作業(yè)數(shù)的急速增長,如果沿用串行的編程方法進(jìn)行一次完整的計(jì)算機(jī)時(shí)統(tǒng)計(jì)就相當(dāng)費(fèi)時(shí)。因此,對(duì)串行代碼的并行化變得非常必要。為了實(shí)現(xiàn)并行化,我們需要在某個(gè)或某些維度,對(duì)串行程序進(jìn)行切分,比如用戶維度、作業(yè)隊(duì)列維度等;但是,由于不同用戶在不同隊(duì)列的計(jì)算作業(yè)數(shù)是個(gè)動(dòng)態(tài)變化的量,因此,通過用戶維度或隊(duì)列維度并不能有效地使計(jì)算量均衡分布于各個(gè)計(jì)算節(jié)點(diǎn)。另外,通過進(jìn)一步研究LSF API處理事件日志的工作機(jī)制發(fā)現(xiàn),其并未提供批量的事件文件和記賬文件的讀取方法,但LSF基礎(chǔ)配置中可以對(duì)事件文件和記賬文件按文件大小或記錄時(shí)間進(jìn)行存檔。在我們的并行化方案中,選擇按文件大小來進(jìn)行事件文件和記賬文件的存檔,然后通過不同計(jì)算節(jié)點(diǎn)計(jì)算不同存檔文件,實(shí)現(xiàn)程序的并行化。除了最新的未存檔文件,每個(gè)存檔文件的大小相同,在存檔文件足夠多的情況下,這也將使計(jì)算負(fù)載可以較為均衡地分布于各個(gè)計(jì)算節(jié)點(diǎn)。

主站蜘蛛池模板: 2024av在线无码中文最新| 精品视频福利| 一级不卡毛片| 国产欧美日韩精品综合在线| 久久夜夜视频| 午夜视频免费试看| 欧美成人区| 就去吻亚洲精品国产欧美| 国产区免费精品视频| 91精品专区国产盗摄| 欧美在线一二区| 日韩福利在线观看| 亚洲a免费| 特级精品毛片免费观看| 日韩欧美中文字幕在线精品| 国产网友愉拍精品| 亚洲小视频网站| 国产91丝袜在线播放动漫| 三上悠亚精品二区在线观看| 91亚洲精品第一| 在线国产三级| 久久久无码人妻精品无码| 午夜毛片福利| 欧美精品aⅴ在线视频| 国产色婷婷| 国产精品99r8在线观看| 国产95在线 | 国产综合精品日本亚洲777| 在线观看欧美国产| 亚洲成年人网| 99精品高清在线播放| 欧美另类图片视频无弹跳第一页| 国产成人一级| 亚洲综合18p| 999国内精品久久免费视频| 国内毛片视频| 国产www网站| 久久精品国产91久久综合麻豆自制| 日本亚洲国产一区二区三区| 无码AV高清毛片中国一级毛片| 国产福利一区在线| 无码一区二区三区视频在线播放| 中文一级毛片| 91视频99| 999在线免费视频| 亚洲视频在线青青| 永久免费精品视频| 亚洲人精品亚洲人成在线| 亚洲av无码久久无遮挡| 尤物亚洲最大AV无码网站| 成人伊人色一区二区三区| 精品国产91爱| 久久美女精品| 亚洲婷婷六月| 成年看免费观看视频拍拍| 91年精品国产福利线观看久久 | 欧美日本在线观看| 中文字幕在线永久在线视频2020| 欧美日韩在线观看一区二区三区| 亚洲日本中文综合在线| 成人无码一区二区三区视频在线观看| 91成人在线免费视频| 日韩小视频网站hq| 91麻豆精品国产高清在线| 99re这里只有国产中文精品国产精品 | 国产91熟女高潮一区二区| 亚洲欧洲日韩久久狠狠爱| 四虎国产精品永久一区| jizz在线免费播放| 无码在线激情片| 在线国产欧美| 99久久精彩视频| 欧美在线国产| 精品国产香蕉在线播出| 极品性荡少妇一区二区色欲| 国产欧美日韩资源在线观看| 久久精品视频亚洲| 日韩欧美中文| 最新亚洲av女人的天堂| 久久这里只有精品2| 亚洲乱码在线播放| 午夜不卡视频|