• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      面向CPU-GPU集群的分布式機器學習資源調度框架研究

      2021-07-12 12:24:34朱紫鈺湯小春趙全
      西北工業(yè)大學學報 2021年3期
      關鍵詞:分片計算資源執(zhí)行器

      朱紫鈺, 湯小春, 趙全

      (西北工業(yè)大學 計算機學院, 陜西 西安 710072)

      分布式機器學習[1-3]在數(shù)據(jù)挖掘、醫(yī)學影像、股票市場分析、計算機視覺、市場分析等領域被大規(guī)模使用。但是訓練機器學習模型通常需要大量的時間和計算資源。隨著數(shù)據(jù)中心開始大規(guī)模使用GPU設備,CPU-GPU混合的異構資源集群已經成為一種通用基礎設施[4-5]。企業(yè)界為了提高分布式機器學習的效率,也逐漸將這類應用移植到異構集群平臺上運行。但是,CPU-GPU集群上面臨的一個基本挑戰(zhàn)是如何高效地調度分布式機器學習作業(yè)中的任務。特別是當GPU計算資源較為珍貴時,如何最大程度地利用CPU-GPU計算資源進行模型訓練已成為異構集群上面臨的基本挑戰(zhàn)。

      分布式機器學習初期,由于硬件限制,主要采用CPU集群來進行,針對一批訓練數(shù)據(jù),計算框架把數(shù)據(jù)分成很多個片段,然后根據(jù)集群節(jié)點上CPU的數(shù)量,將每一個片段作為一個單獨的任務分配到計算節(jié)點的不同CPU上,進行局部梯度計算。當所有的任務完成計算后,參數(shù)服務器收集各個任務的梯度誤差進行匯總,然后發(fā)送新的參數(shù)用于下一次迭代。由于數(shù)據(jù)分片大小相同,CPU性能相同,所以每個任務在CPU上的執(zhí)行時間大致相同,這能夠保證每一次迭代的同步。

      近幾年來,隨著GPU硬件設施的廣泛應用,分布式機器學習開始使用GPU計算資源。在分布式機器學習的訓練過程中,一部分任務可能運行在GPU上,一部分任務可能運行在CPU上。GPU用于單純的梯度計算,CPU用于初始化、節(jié)點之間通信、數(shù)據(jù)加載、主機內存到設備內存之間拷貝以及啟動GPU的kernel函數(shù)等。

      面對同構的集群環(huán)境,分布式機器學習采用大小相同的數(shù)據(jù)分片策略,這樣可以保證任務在CPU或者GPU上執(zhí)行時間相同。面對異構集群環(huán)境,分布式機器學習存在學習過程中不能保證CPU和GPU資源合理利用的問題:如果只考慮使用異構集群中的CPU計算資源,則沒有考慮到GPU計算資源帶來的計算優(yōu)勢;如果只考慮使用異構集群中的GPU計算資源,則在GPU設備執(zhí)行任務時,CPU資源往往被閑置。無論是在異構集群中只使用CPU資源還是只使用GPU資源,都無法充分利用異構集群資源。因此,一種合理使用異構集群計算資源的方式為:當CPU資源存在空閑時,將任務分配到CPU上執(zhí)行,當GPU資源存在空閑時,將任務分配到GPU上運行。這種資源分配方案的優(yōu)點是最大限度地利用了CPU計算資源和GPU計算資源。但是上述任務分配方式的最大挑戰(zhàn)在于:(1)由于GPU和CPU具有不同的運算能力(FLOPS),導致同樣的任務在GPU上執(zhí)行比在CPU上執(zhí)行消耗的時間更短;(2)類似于聚類分析的迭代過程,只有當全部工作節(jié)點上的任務完成后,誤差聚合操作才能進行參數(shù)的更新,并發(fā)布下一次的迭代過程。因此,如果把每一次迭代過程中的計算任務均勻地分配給CPU和GPU資源,就會造成CPU任務嚴重滯后,迭代過程不能同步,從而導致誤差聚合操作的推遲,影響下一次迭代的開始時間。

      針對分布式機器學習作業(yè)如何提高資源利用率的問題,有相當多的研究者進行了研究。文獻[6]從分布式機器學習訓練過程出發(fā),詳細說明了訓練過程中各個階段使用CPU和GPU資源帶來的性能提升,同時也說明了使用GPU設備的瓶頸。文獻[7-14]主要針對GPU計算資源的調度策略,忽略CPU計算資源的調度。文獻[7]介紹了跨作業(yè)共享GPU資源帶來的一些挑戰(zhàn)性問題。文獻[8]描述了一種大規(guī)??焖偬荻认陆邓惴ǖ膽脠鼍?提出了大規(guī)模數(shù)據(jù)集在多個GPU之間的調度策略。文獻[9]提供了與分布式機器學習相關的資源管理模型和以及任務調度策略。文獻[10]提供了一種任務執(zhí)行過程的控制算法,保證機器學習作業(yè)的質量。文獻[11]提出了一種針對異構資源的混合DRF算法,能夠有效提高集群資源利用率。文獻[12]提出了一種支持向量機的任務分類算法,任務根據(jù)類型劃分并投入相應的設備進行計算,可以改善集群資源利用情況,但是該算法獲得數(shù)據(jù)存在一定的時間延遲,并不能準確獲得集群資源變化。這些研究在最大化資源利用率、最小化作業(yè)的平均完成時間以及任務調度質量等方面都有一定的借鑒意義。但是,上述文獻對CPU和GPU搭配使用的研究不全面,即要么只考慮CPU資源,要么只考慮GPU資源,不考慮CPU資源與GPU資源混合分配和調度的價值,也不關注CPU和GPU資源混合調度的利用率。文獻[13-14]主要任務是解決多個機器學習作業(yè)共享GPU集群時,如何分配資源,減少迭代過程的延遲。它解決了不同作業(yè)之間的資源共享問題,但沒有解決CPU-GPU資源之間的合理分配問題。文獻[15]介紹了一種通用的CPU-GPU計算資源管理系統(tǒng),它不涉及具體的應用,而是根據(jù)任務類型(例如工作節(jié)點程序,參數(shù)服務器程序)執(zhí)行啟發(fā)式靜態(tài)資源分配,因此無法提高機器學習中CPU-GPU資源的利用率。文獻[16]通過預估任務的執(zhí)行時間來調度資源,但是它的核心在于確定參數(shù)服務器與計算節(jié)點之間的分配關系,不太關注CPU資源與GPU資源分配問題。文獻[17]介紹了一種通過MapReduce來加速K-Means的算法,其按照CPU處理能力和GPU處理能力將Map任務分成2個部分,這種方式可以利用CPU資源和GPU資源,但是它對CPU任務和GPU任務的不敏感,導致迭代過程中CPU任務的延遲,增加了整個作業(yè)的響應時間。文獻[18]中的理論框架產生了一個最佳整數(shù)規(guī)劃解決方案,根據(jù)CPU數(shù)量、CPU與GPU之間計算能力的不同,少部分任務由CPU承擔,大部分任務由GPU承擔,提高了CPU和GPU的利用率,但是由于CPU任務的數(shù)據(jù)大小與GPU任務的數(shù)據(jù)大小相同,當數(shù)據(jù)分片較大時,存在任務延遲問題。

      為了提高CPU和GPU資源利用率,同時也減少每次迭代中的任務延遲,本文提出了一種不均勻數(shù)據(jù)分片方法。在每一次迭代過程中,根據(jù)集群系統(tǒng)可以使用的CPU核數(shù)量和GPU數(shù)量,以及CPU和GPU的計算能力,將數(shù)據(jù)塊分解成大小不同的分片,小分片數(shù)據(jù)應用于CPU資源,大分片數(shù)據(jù)應用于GPU資源,在所有GPU任務執(zhí)行結束前,保證CPU任務也能夠結束,從而減少2類不同任務之間的同步等待問題,進而降低分布式學習的訓練時間,且提高系統(tǒng)的資源使用率。

      論文的主要創(chuàng)新點是提出了一種面向CPU-GPU混合集群的分布式機器學習調度框架,即在機器學習模型參數(shù)的訓練過程中,對于每個任務,系統(tǒng)都包含2個版本——GPU版本和CPU版本。在每一次迭代操作開始前,首先得到可以使用的CPU設備數(shù)量m以及GPU設備數(shù)量n,再根據(jù)任務的歷史統(tǒng)計數(shù)據(jù),確定CPU和GPU上運行時間的比值(這個比值相當于CPU和GPU執(zhí)行效率比),根據(jù)比值可將任務分解為p和q個;然后將GPU任務提交到GPU計算資源,CPU任務提交到CPU計算資源。最后,采用線性規(guī)劃的思想,保證分配的CPU任務與GPU任務之間的同步執(zhí)行,即CPU任務與GPU任務之間不存在嚴重滯后的情況。

      1 分布式機器學習的資源調度框架

      1.1 CPU-GPU資源分配模型

      通常情況下,當使用GPU計算資源計算不同數(shù)據(jù)分片的梯度時,CPU被用來初始化參數(shù),啟動kernel函數(shù)的運行。在GPU的kernel函數(shù)執(zhí)行過程中,CPU就不再被使用。這會導致CPU處于閑置狀態(tài),降低系統(tǒng)資源利用效率。但是,如果所有的CPU資源都處于“忙”狀態(tài)時,也會造成GPU任務等待CPU資源而不能被迅速執(zhí)行的情況,這會浪費GPU資源。

      在機器學習訓練中,要想CPU資源和GPU資源充分被利用,就需要考慮為GPU綁定一定的CPU資源,方便GPU任務的啟動。在面向CPU-GPU的異構集群系統(tǒng)中,圖1給出了CPU與GPU之間的資源分配關系。圖中的c0、c1等代表CPU設備,GPU1、GPU2等代表GPU設備。在每次的迭代過程中,將CPU和GPU進行捆綁,即為每個GPU搭配一定數(shù)量的CPU。訓練開始后,對于GPU任務,綁定的CPU只負責加載參數(shù)以及啟動GPU的kernel函數(shù),一旦開始在GPU上進行誤差的計算,CPU會處于閑置狀態(tài),直到完成所有的局部誤差計算。之后在指定的CPU或者GPU上進行誤差聚合運算,產生新的模型參數(shù)。上述過程相當于完成一次迭代,如果誤差未達到模型精度要求,則會進行重復的迭代過程,直到滿足精度要求。

      圖1 CPU-GPU異構集群系統(tǒng)資源分配方式

      1.2 GPU任務與CPU任務的資源需求

      CPU-GPU異構集群要求任務的二進制程序既能夠在CPU上運行,也能夠在GPU上運行。當一個機器學習作業(yè)準備執(zhí)行時,可以指定哪些任務運行在CPU設備上,哪些任務運行在GPU設備上。任務調度器會查看集群資源中是否有設備處于空閑狀態(tài),如果有GPU空閑,則提交GPU任務,如果有CPU空閑,則提交CPU任務。任務調度器對任務進行資源分配時,如果需要使用GPU資源,那么任務就與GPU二進制程序綁定;如果需要使用CPU資源,那么任務就與CPU二進制程序綁定。之后,任務調度器會將任務及信息發(fā)送給工作節(jié)點的CPU執(zhí)行器或GPU執(zhí)行器,由執(zhí)行器啟動并執(zhí)行任務。在設計CPU二進制程序和GPU二進制程序時,任務的輸入數(shù)據(jù)格式和輸出數(shù)據(jù)格式要求完全一樣。這樣一來,2種任務的輸入輸出能夠正確獲得下一次迭代時新的訓練參數(shù),且不會影響機器學習作業(yè)的參數(shù)更新效果。

      1.3 數(shù)據(jù)分片策略

      數(shù)據(jù)分片策略包含2個目的:①面向分布式機器學習,通過數(shù)據(jù)分片,可以并行執(zhí)行多個梯度計算過程,從而減少機器學習的訓練時間,快速地完成模型的訓練;②面向CPU-GPU異構集群環(huán)境,進行數(shù)據(jù)分片的目的是充分利用CPU資源和GPU資源。

      為了達到上述目的,依據(jù)CPU任務和GPU任務的運行時間,對數(shù)據(jù)進行大小不等的分片。通過統(tǒng)計CPU任務和GPU任務在各自設備上的運行時間,得到任務運行效率的比值,從而確定數(shù)據(jù)分片的大小。由于機器學習聚合操作更新參數(shù)前要求本批次數(shù)據(jù)全部計算完成,因此分片大小決定了CPU任務和GPU任務的同步快慢問題,這是本文算法的關鍵所在。

      1.4 分片方法

      減少機器學習迭代過程中運行時間的核心是保證CPU任務與GPU任務的同步完成。假設N是整個數(shù)據(jù)規(guī)模的大小,n是CPU核數(shù)量,m是GPU設備數(shù)量,對于同樣大小的一塊數(shù)據(jù)B,CPU運行時間與GPU運行時間的比值是α,稱α為加速系數(shù)。其含義是如果使用一個GPU設備完成數(shù)據(jù)的計算需要時間為t,那么使用一個CPU完成數(shù)據(jù)的計算需要α·t的時間。如果可以將數(shù)據(jù)分割成B/α的大小,那么一個CPU完成B/α數(shù)據(jù)的計算就只需要時間t,這樣對于GPU任務和CPU任務的計算就不存在執(zhí)行時間差別的問題,很容易通過調度滿足迭代過程的同步。

      對于機器學習中的數(shù)據(jù)N,現(xiàn)在需要進行數(shù)據(jù)的分片,分片后的每一個數(shù)據(jù)塊對應一個任務。為了保證計算性能的無差異,根據(jù)數(shù)據(jù)分片的大小決定任務由CPU執(zhí)行還是由GPU執(zhí)行。假設數(shù)據(jù)被分割后,有x個CPU任務和y個GPU任務。在n個CPU核上運行x個任務的完成時間記為tC,在m個GPU上完成y任務的時間為tG,理想狀態(tài)下,數(shù)據(jù)分割計劃的目的是|tC-tG|=0。因此,任務同步時間差如下所示

      (1)

      使用以上參數(shù),需要確定CPU任務的個數(shù)x和GPU任務的個數(shù)y,目的是要減少CPU任務的執(zhí)行結束時間與GPU任務執(zhí)行結束時間的差值。所以給出以下的規(guī)劃條件,其目標是

      min|f(x,y)|

      (2)

      同時要滿足條件

      x·B1+y·B2≥N

      (3)

      |B2-αB1|<η

      (4)

      B1,B2,x,y≥0

      (5)

      公式(2)給出了目標函數(shù),即減少CPU任務與GPU任務之間的不同步。其物理意義是,假設tp代表p個任務中第一個任務開始到最后一個任務結束的時間區(qū)間,而tq代表q個任務中第一個任務開始到最后一個任務結束的時間區(qū)間。調度的目的是滿足|tp-tq|<ε,ε∈?(0,1),即GPU任務的完成時間和CPU任務的完成時間相當。公式(3)是按數(shù)據(jù)分片要求,將CPU任務的數(shù)據(jù)分片大小為B1,GPU任務的數(shù)據(jù)分片大小為B2,公式(3)要求x+y個任務要處理完全部的訓練數(shù)據(jù)。公式(4)描述了CPU和GPU任務數(shù)據(jù)規(guī)模之間的關系,其數(shù)據(jù)要滿足加速系數(shù)要求,η表示數(shù)據(jù)分割誤差。公式(5)對所有變量的取值范圍進行了約束。

      對于每一個數(shù)據(jù)分片,都會產生一個任務,分片小的數(shù)據(jù)綁定CPU任務,分片大的數(shù)據(jù)綁定GPU任務。整個數(shù)據(jù)分片完成后,將任務及數(shù)據(jù)信息分別插入到CPU任務隊列和GPU任務隊列中,等待調度器調度。根據(jù)數(shù)據(jù)分片產生的任務,只能用于機器學習中的局部梯度計算,即gi值的計算?;贑PU任務和GPU任務的數(shù)量,調度器安排CPU資源以及GPU資源執(zhí)行任務。

      1.5 算法分析

      迭代計算過程中,CPU負責內存到設備內存的輸入和輸出,GPU負責計算。當GPU計算時,CPU空閑,因此,利用這些CPU時間是可行的,但是前提是不能影響GPU執(zhí)行前后對CPU的需求;另外,GPU數(shù)量一般較少,CPU核數(shù)量眾多,部分CPU核就可以承擔GPU計算前后的輸入和輸出工作,多余的CPU核就可以參與計算,因此CPU-GPU混合的算法是可行的。

      為了利用這些CPU核,就需要對數(shù)據(jù)進行合理的分片,避免部分任務滯后導致的作業(yè)響應時間延遲。所以,論文采用整數(shù)規(guī)劃算法來計算分片的數(shù)量和分片的大小。

      在時間復雜度方面,在公式(3)中,定義了2類變量B1和B2,設其可取最大值為N,由公式(4)可知2類變量滿足比例關系α。設x,y和N可取最大值為a,那么分片規(guī)模循環(huán)次數(shù)為a,任務數(shù)作為內層循環(huán)也為a,則公式(3)時間復雜度為O(a2),該時間復雜度為算法時間復雜度,因此本算法可行。在空間復雜度方面,算法使用的主要變量共8個,涉及的數(shù)量較少,因此占用內存較少,算法具有較好的空間復雜度。

      1.6 機器學習作業(yè)的任務調度框架

      機器學習作業(yè)的任務調度框架由3個主要部分組成(ML框架、工作節(jié)點和數(shù)據(jù)分片)。ML框架是主控節(jié)點,工作節(jié)點是由CPU-GPU資源組成的集群節(jié)點,數(shù)據(jù)分片是對整個訓練數(shù)據(jù)的劃分,其分片大小與計算資源的計算能力相關。整個框架如圖2所示。

      ML框架:ML框架主要功能有①聚合各個工作節(jié)點執(zhí)行器上發(fā)送的局部梯度值;②根據(jù)梯度值更新模型參數(shù);③對訓練數(shù)據(jù)進行分片,并依據(jù)分片創(chuàng)建CPU任務和GPU任務的描述;④對上述任務進行調度。

      工作節(jié)點:工作節(jié)點的主要功能是依據(jù)CPU資源和GPU資源的不同,啟動CPU執(zhí)行器以及GPU執(zhí)行器。CPU執(zhí)行器接收CPU任務描述,使用CPU資源來計算指定分片數(shù)據(jù)的局部梯度值;GPU執(zhí)行器接收GPU任務描述,采用GPU資源來計算指定分片數(shù)據(jù)的局部梯度值。

      數(shù)據(jù)分片:數(shù)據(jù)分片是按照CPU資源和GPU資源的數(shù)量和計算能力,將整個訓練數(shù)據(jù)分割成大小不等的CPU數(shù)據(jù)塊以及GPU數(shù)據(jù)塊。

      整個作業(yè)任務調度框架的運行過程按照以下步驟完成(以下的步驟序號與圖2中序號對應)。

      圖2 面向CPU-GPU集群的機器學習調度框架

      ①ML框架執(zhí)行梯度值的聚集運算。如果是第一次迭代,隨機給出梯度值;如果不是第一次迭代,當所有的執(zhí)行器全部將局部梯度值發(fā)送到ML框架后,ML框架再進行聚集計算;

      ②根據(jù)聚集的梯度值,ML框架計算出新的權重系數(shù),即模型的參數(shù)值;

      ③ML框架將新的模型參數(shù)發(fā)布到各個工作節(jié)點的CPU執(zhí)行器和GPU執(zhí)行器;

      ④ML框架根據(jù)訓練數(shù)據(jù)的大小以及CPU和GPU資源數(shù)量,按照第1.4節(jié)的方式進行數(shù)據(jù)分片,將數(shù)據(jù)分為2類,CPU數(shù)據(jù)分片和GPU數(shù)據(jù)分片。每個分片包含訓練數(shù)據(jù)的編號、開始位置、數(shù)據(jù)塊大小和數(shù)據(jù)所在的IP地址信息等。每個數(shù)據(jù)分片按照一定數(shù)據(jù)格式構成一個任務描述,并添加到各自的排隊隊列中;

      ⑤ML框架的任務調度器從CPU隊列和GPU隊列中取得任務描述,并根據(jù)任務描述及調度算法,確定每個任務將要發(fā)送的執(zhí)行器;

      ⑥調度器將任務發(fā)送到各個工作節(jié)點的CPU執(zhí)行器和GPU執(zhí)行器隊列中;

      ⑦各個工作節(jié)點的CPU執(zhí)行器以及GPU執(zhí)行器開始按照FIFO的方式執(zhí)行機器學習中的局部訓練任務,計算局部梯度值;

      ⑧CPU執(zhí)行器以及GPU執(zhí)行器執(zhí)行計算前,根據(jù)任務描述中的數(shù)據(jù)分片信息,從訓練數(shù)據(jù)中獲取采樣數(shù)據(jù);

      ⑨各個工作節(jié)點的執(zhí)行器完成任務的運行后,將所有計算出的局部梯度值發(fā)送到ML框架;

      ML框架收到全部的梯度值后,檢查誤差是否達到訓練模型的精度要求或者是否滿足迭代次數(shù)的要求。如果滿足要求,停止訓練;否則,繼續(xù)執(zhí)行①,進行新一輪的迭代計算。這樣不斷地進行迭代訓練過程,最終得到模型參數(shù);

      2 調度算法的實現(xiàn)

      機器學習是一個不斷迭代的過程,每一次迭代都需要計算梯度誤差的變化,然后收集這些變化,為下一次的迭代做準備。分布式機器學習中,采用數(shù)據(jù)并行的計算模型,各個計算節(jié)點上只計算整個數(shù)據(jù)的一個分片,然后將計算結果發(fā)送到PS服務器進行聚合。如果數(shù)據(jù)分片大小不合適,可能會出現(xiàn)某個工作節(jié)點嚴重滯后的情況,導致下一次迭代的延遲,因此數(shù)據(jù)分片是本調度算法的核心。對于CPU-GPU混合的集群系統(tǒng),根據(jù)CPU執(zhí)行時間和GPU執(zhí)行時間來決定分片的數(shù)據(jù)大小,使一個分片對應一個計算任務,從而產生大量的任務。這些任務在執(zhí)行過程中,會根據(jù)各自的分片信息,讀取相應的數(shù)據(jù),按照各自的類別在相應的計算資源上進行計算。其計算過程如算法1所示。

      ML-FrameWork 是ML框架的主函數(shù),也是PS服務器所在的節(jié)點。ML-FrameWork首先得到CPU-GPU集群中的CPU資源數(shù)量和GPU資源數(shù)量(s1),然后進入迭代過程中(s2~s8)。(s3)獲得各個數(shù)據(jù)分片任務計算的梯度值,進行聚合計算;(s4)根據(jù)CPU和GPU數(shù)量、訓練數(shù)據(jù)大小以及CPU任務與GPU任務之間的加速系數(shù),將數(shù)據(jù)劃分為大小不同的數(shù)據(jù)塊;(s5)對于較小的數(shù)據(jù)塊,產生CPU任務描述,放入CPU執(zhí)行隊列;(s6)對于較大的數(shù)據(jù)塊,產生GPU任務描述,放入GPU執(zhí)行隊列;(s7)是ML-FrameWork等待CPU任務隊列和GPU任務隊列的執(zhí)行同步。

      WorkerIterate運行在各個工作節(jié)點的執(zhí)行器上,是計算局部梯度的函數(shù)。它可以使用CPU資源或GPU資源進行局部梯度計算。(s1)更新并保存來自PS服務器的新的模型參數(shù);(s2)計算梯度值,其中最為關鍵的是獲得數(shù)據(jù)的分片信息,然后讀取對應的訓練數(shù)據(jù),通過分片信息中包含的計算資源信息,使用不同的計算資源計算出新的局部梯度值;(s3)將計算出的局部梯度值按照一定的標準格式組織起來并返回給ML-FrameWork。

      算法1梯度優(yōu)化的分布式機器學習框架算法

      Begin ML-FrameWork:

      (s1)x=cpus,y=gpus

      (s2) for iterationt=0,1,…,Tdo

      (s7) sync

      (s8) end for

      End ML-FrameWork

      Begin WorkerIterate(t):

      End WorkerIterate

      Schedule函數(shù)描述從隊列中取出任務并提交到工作節(jié)點的過程,如算法2所示。任務調度器從隊列取出一個任務描述,根據(jù)任務的類型,如果是GPU任務,執(zhí)行(s1),根據(jù)任務描述中的IP地址,將任務的分片ID、數(shù)據(jù)分片的起始位置和數(shù)據(jù)長度發(fā)送到對應工作節(jié)點的GPU執(zhí)行器(s2),請求GPU執(zhí)行器執(zhí)行;反之,執(zhí)行(s3),發(fā)送任務到CPU執(zhí)行器(s4)。

      算法2任務調度算法

      Begin Schedule

      (s1) while(Task=gpu-queue.deque())

      (s2) launchTask to GPU

      (s3) while(Task=cpu-queue.deque())

      (s4) launchTask to CPU

      End Schedule

      3 實驗評價

      系統(tǒng)在一個集群上進行實驗,集群中包含6臺NF5468M5服務器,作為計算節(jié)點;1臺中科曙光服務器620/420,作為參數(shù)服務器節(jié)點。每個服務器節(jié)點包含2顆Xeon2.1處理器,每個處理器包含8個核(相當于一個服務器節(jié)點具有16個CPU核),32 GB DDR4內存,2塊RTX2080TI GPU卡,10 GB顯存。集群包含1臺AS2150G2磁盤陣列。服務器操作系統(tǒng)為Ubuntu 7.5.0,CUDA版本為10.1.105,采用C++11作為編程語言,軟件編寫采用NVIDIA CUDA工具和C++。

      3.1 實驗任務

      考慮使用一種通用的數(shù)據(jù)分析算法K-Means進行實驗驗證和分析。K-Means算法是一個迭代求解的聚類算法,是實驗分析中常用算法,且具有代表性。實現(xiàn)了一個CPU版本和GPU版本的K-Means程序,使用C++語言來編寫程序的CPU版本,NVIDIA CUDA來編寫程序的GPU版本。調度框架和執(zhí)行器使用C++語言編寫。調度框架和執(zhí)行器通過實現(xiàn)上述算法,完成對K-Means分布式機器學習作業(yè)的執(zhí)行。

      3.2 算法執(zhí)行效率評價分析

      使用3種資源分配策略來比較K-Means算法的梯度計算的過程,圖3為使用3種策略的作業(yè)執(zhí)行時間比較。

      圖3 使用不同調度算法的K-Means作業(yè)執(zhí)行時間

      1) 每個計算節(jié)點采用16個CPU核來計算數(shù)據(jù)的梯度,在任務調度過程中,數(shù)據(jù)均勻分片,1個任務綁定1個CPU核,即當1個計算節(jié)點有1個CPU核處于空閑狀態(tài)時,分配1個數(shù)據(jù)分片對應的任務到該空閑CPU核。稱該算法為CPU算法(KM-CPU)。

      2) 每個計算節(jié)點使用1個CPU核以及1個GPU設備,GPU設備綁定該CPU核。這時稱被綁定的CPU核處于非自由狀態(tài),反之為自由狀態(tài)。在任務調度過程中,數(shù)據(jù)均勻分片,1個任務綁定1個GPU設備,即當該節(jié)點GPU設備空閑時,分配1個數(shù)據(jù)分片對應的任務到該空閑GPU設備,稱該算法為GPU算法(KM-GPU)。

      3) 每個計算節(jié)點使用16個CPU核及1個GPU設備,將每個節(jié)點中的GPU設備綁定1個CPU核。這時,1個計算節(jié)點上擁有1個非自由狀態(tài)的CPU核和15個自由狀態(tài)的CPU核。ML框架按照本文提出的算法進行數(shù)據(jù)的不均勻分片,1個分片對應的任務綁定1個自由狀態(tài)的CPU核或者1個GPU設備,當自由狀態(tài)的CPU核空閑時,提交1個具有較小的數(shù)據(jù)分片的任務,當GPU設備空閑時,提交1個具有較大的數(shù)據(jù)分片的任務。該算法稱為混合資源調度算法(KM-Hybrid)。

      圖3包含3組數(shù)據(jù),分別代表使用KM-CPU算法、KM-GPU算法和KM-Hybrid算法對應的作業(yè)執(zhí)行時間。每個節(jié)點測試3次,取平均值進行統(tǒng)計。其中,橫坐標代表集群節(jié)點數(shù)目,縱坐標代表使用各算法的作業(yè)執(zhí)行時間。從實驗中可以得到2個結論:①使用KM-GPU和KM-Hybrid算法的作業(yè)執(zhí)行時間明顯少于KM-CPU算法,這是因為GPU設備的運算能力遠高于CPU設備,說明使用GPU計算資源可以明顯降低K-Means作業(yè)的執(zhí)行時間;②隨著節(jié)點增加,計算設備增加,3種算法用時逐漸減少,性能提升逐漸變慢,這是由于每一個分片包含的數(shù)據(jù)量變少,且當節(jié)點數(shù)目過多時,節(jié)點通信開銷成為影響算法性能提升的重要因素。因此,使用本文提出的算法執(zhí)行分布式機器學習作業(yè),能夠加快作業(yè)的執(zhí)行,且能夠有效提高CPU-GPU集群中CPU計算資源的利用率,不再只是將CPU計算資源閑置。

      考慮到上述實驗并未說明KM-Hybrid相較于KM-GPU算法的具體優(yōu)勢,下面探究隨著節(jié)點增加,KM-GPU和KM-Hybrid算法加速比。加速比是衡量算法性能常用指標,表示為s(n,p)=Tserial(n)/Tparallel(n,p),其中n表示數(shù)據(jù)處理規(guī)模,Tserial(n)表示作業(yè)串行計算用時,Tparallel(n,p)表示作業(yè)并行計算用時。圖4為KM-GPU和KM-Hybrid加速比對比情況。其中橫坐標代表節(jié)點個數(shù),縱坐標代表加速比。比值越大,說明并行計算加速效果越好。在圖4中可以得出結論:隨著節(jié)點數(shù)目增加,2種算法均表現(xiàn)出較好的加速;但隨著節(jié)點數(shù)目增加,KM-GPU加速比增長逐漸緩慢,KM-Hybrid加速比增長緩慢并出現(xiàn)回落現(xiàn)象,分析后得出原因:隨著節(jié)點增加,通信延遲和調度處理開銷增加,2種算法的加速比增長緩慢,且KM-Hybrid算法對通信和調度延遲更敏感。

      圖4 KM-GPU和KM-Hybrid加速比

      為了進一步探究本文中提出的不均勻數(shù)據(jù)分片策略為分布式機器學習作業(yè)帶來的性能提升情況,現(xiàn)對KM-GPU和KM-Hybrid算法單次梯度計算時間進行了統(tǒng)計,其結果如圖5所示。在圖5中,橫坐標為集群節(jié)點數(shù)目,縱坐標為單次梯度計算平均值。隨著計算節(jié)點增加,2種算法單次梯度計算任務的平均時間均呈現(xiàn)非線性減少,主要原因是:①數(shù)據(jù)分片規(guī)模對梯度計算用時有很大的影響。隨著節(jié)點增加,并行任務數(shù)目增加,單個分片數(shù)據(jù)量變少,計算設備計算時間減少;②節(jié)點的增加會造成分布式機器學習中I/O通信開銷增加,特別是通過網絡傳輸?shù)拇鷥r會增加,導致單次梯度計算用時減少的速度越來越緩慢?;谝陨蟽牲c,KM-GPU算法和KM-Hybrid算法單次梯度計算的平均時間會呈非線性減少。

      圖5 梯度計算任務平均時間

      上述實驗過程主要探究了集群內CPU計算設備和GPU計算設備之間對作業(yè)調度的影響,但是還沒有探究集群中不同數(shù)量GPU對作業(yè)調度的影響。為了更加明確GPU數(shù)量對分布式機器學習作業(yè)的影響,針對不同數(shù)量的GPU進行了K-Means算法附加實驗,實驗共測試4種不同情況:

      1) 每個節(jié)點使用1個GPU設備和1個CPU核,GPU設備綁定該CPU核,該算法記為KM-1-GPU,相當于上述KM-GPU算法。

      2) 每個節(jié)點使用2個GPU設備和2個CPU核,1個GPU設備綁定1個CPU核。該算法記為KM-2-GPU,其任務分配方式與步驟1)中相同,但計算資源量是步驟1)的2倍。

      3) 每個節(jié)點使用1個GPU設備和16個CPU核,16個CPU核中有1個非自由狀態(tài)核和15個自由狀態(tài)核,數(shù)據(jù)按照自由狀態(tài)的CPU核以及GPU處理能力來分片,將較大的數(shù)據(jù)分片分配給GPU,較小的數(shù)據(jù)分片分給CPU。該算法記為KM-1-Hybrid,相當于上述KM-Hybrid算法。

      4) 每個節(jié)點使用2個GPU設備和16個CPU核,16個CPU核中包含2個非自由狀態(tài)核和14個自由狀態(tài)核。任務分配方式同步驟3)。該算法記為KM-2-Hybrid。

      圖6為不同GPU數(shù)量下K-Means算法作業(yè)執(zhí)行時間的測試結果??梢缘玫饺缦陆Y論:①由于節(jié)點數(shù)目增加,CPU和GPU計算資源增多,4種算法性能均有提升。②KM-2-GPU比KM-1-GPU算法作業(yè)執(zhí)行時間少,KM-2-Hybrid比KM-1-Hybrid算法作業(yè)執(zhí)行時間少,即GPU設備越多,作業(yè)執(zhí)行越快,算法性能越好。③KM-1-Hybrid比KM-2-GPU算法作業(yè)執(zhí)行時間少,說明集群內單純增加GPU計算資源帶來的作業(yè)性能提升不如將集群中已有的閑置CPU利用起來對作業(yè)的性能提升大,因此可以考慮使用不均勻數(shù)據(jù)分片策略,將集群中空閑或部分空閑的CPU利用起來。

      圖6 不同GPU數(shù)量時的作業(yè)執(zhí)行時間對比

      為了進一步驗證論文提出的不均勻數(shù)據(jù)分片策略對分布式學習帶來的性能提升,使用Rodinia[19]基準測試套件驗證實驗效果,該套件包含huffman、K-Means等單節(jié)點基準程序。圖7為Rodinia K-Means基準測試用時和KM-Hybrid用時對比情況,橫坐標表示實驗次數(shù),縱坐標表示作業(yè)運行時間。如圖所示,R-16-CPU表示在單節(jié)點上使用16個線程進行K-Means計算,R-1-GPU表示在單節(jié)點上使用1塊GPU進行K-Means計算,KM-Hrbrid表示在單節(jié)點上使用1塊GPU,15塊CPU進行K-Means計算。數(shù)據(jù)規(guī)模為819 200×100,3組數(shù)據(jù)平均值分別為:33.87,29.83,23.8 s,方差分別為1.079,0.224,3.443??梢缘玫饺缦陆Y論:①使用GPU進行加速的效果比使用多線程加速的效果好;②KM-Hybrid算法比上述2種算法效果更好,這是由于在節(jié)點上既使用了GPU進行計算加速,又利用了閑置的CPU;③KM-Hybrid算法的穩(wěn)定性不如Rodinia基準測試,這和數(shù)據(jù)規(guī)模及程序運行時CPU、GPU設備的性能相關,可以對其進一步探究。

      圖7 基準測試用時對比

      3.3 算法執(zhí)行質量評價分析

      上述實驗可以得出,本文提出的算法可以實現(xiàn)對作業(yè)的加速并提高異構集群資源利用率,但是其執(zhí)行效果受到CPU和GPU實時性能的影響,穩(wěn)定性較差。

      為了進一步分析算法對作業(yè)質量的影響,使用輪廓系數(shù)[20]作為衡量KM-Hybrid作業(yè)質量的標準。數(shù)據(jù)規(guī)模為8 192×100,每項測試進行10次,取平均值作為作業(yè)質量評估值。輪廓系數(shù)越接近1,算法執(zhí)行質量越好。經計算,R-16-CPU算法輪廓系數(shù)均值為0.567 996,R-1-GPU算法輪廓系數(shù)均值為0.540 185,KM-Hybrid算法輪廓系數(shù)均值為0.538 466,3種算法輪廓系數(shù)相近,由此可以得出結論:本文基于不均勻數(shù)據(jù)分片策略的機器學習方法對作業(yè)質量沒有顯著影響。

      4 結 論

      通過CPU-GPU混合異構集群進行分布式機器學習訓練已經成為一個趨勢,但是在這個過程中經常存在集群資源得不到充分利用的現(xiàn)象。為此,論文提出了一種不均勻分片的資源調度算法,并證實該算法能夠加快分布式機器學習訓練,提高集群系統(tǒng)資源利用率。但是,考慮到算法受制于CPU和GPU資源的任務分配方式,如何更加精確合理地對CPU與GPU任務進行資源分配,是今后的研究方向。

      猜你喜歡
      分片計算資源執(zhí)行器
      上下分片與詞的時空佈局
      詞學(2022年1期)2022-10-27 08:06:12
      基于模糊規(guī)劃理論的云計算資源調度研究
      分片光滑邊值問題的再生核方法
      CDN存量MP4視頻播放優(yōu)化方法
      改進快速稀疏算法的云計算資源負載均衡
      基于模糊二分查找的幀分片算法設計與實現(xiàn)
      測控技術(2018年12期)2018-11-25 09:37:50
      基于Wi-Fi與Web的云計算資源調度算法研究
      耦合分布式系統(tǒng)多任務動態(tài)調度算法
      飛機裝配預連接緊固件自動化安裝末端執(zhí)行器設計
      磐石市| 姜堰市| 桂阳县| 平泉县| 阿拉善右旗| 中超| 岐山县| 双牌县| 南昌市| 永定县| 浦江县| 五家渠市| 锦屏县| 杂多县| 壶关县| 石柱| 甘德县| 荆门市| 武鸣县| 洞口县| 兴城市| 融水| 济南市| 左云县| 思南县| 崇州市| 涟源市| 莒南县| 邢台县| 双城市| 南丹县| 平潭县| 丽水市| 大同县| 都安| 开平市| 格尔木市| 红安县| 金塔县| 伊川县| 六盘水市|