亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于虛擬化的多GPU深度神經(jīng)網(wǎng)絡訓練框架

        2018-03-02 09:22:12楊志剛吳俊敏2a
        計算機工程 2018年2期
        關鍵詞:深度資源環(huán)境

        楊志剛,吳俊敏,2a,,徐 恒,尹 燕

        (1.中國科學技術大學 計算機科學與技術學院,合肥 230022;2.中國科學技術大學 a.蘇州研究院; b.軟件學院,江蘇 蘇州 215123)

        0 概述

        由于GPU設備的特殊性,對GPU虛擬化的研究尚處于起步階段。而且在分布式環(huán)境下,如何有效使用集群中所有的GPU資源成為一大難題。將GPU本身的并行加速計算與GPU虛擬化技術有效結合在一起,可以有效地調用遠程計算機的GPU資源,甚至可以將分布式集群環(huán)境中的GPU資源集中起來,更好地提高計算效率。

        深度神經(jīng)網(wǎng)絡的GPU加速是當下的研究熱點。在多GPU上的加速方法一般有數(shù)據(jù)并行和模型并行,但是與單機多GPU相比,如何在多機多GPU上部署模型加速訓練,除了單個GPU的加速之外,分布式環(huán)境中的通信和接口也是需要重點解決的問題。

        本文針對分布式環(huán)境中的多機多GPU的深度神經(jīng)網(wǎng)絡訓練的問題,提出一種基于虛擬化的遠程GPU調用的解決方案,并將該方案與單機多GPU的情況進行對比,以分析其優(yōu)缺點。

        1 研究背景

        1.1 GPU虛擬化

        GPU虛擬化的實現(xiàn)比CPU要復雜。CPU處理器自帶分時機制可以有效地實現(xiàn)上下文進程間的迅速切換,同時分時機制支持不同虛擬化CPU之間的進程切換。但是GPU本身并不支持分時機制,不能有效支持上下文之間的進程切換,而且在相同的時間段內只能單一地支持同一個任務。同時,GPU制造商如NVIDIA,閉源關于GPU的驅動源代碼,因此,其驅動程序并不能由其他系統(tǒng)方案支持和控制,這也給GPU虛擬化造成很大的影響。迄今為止,GPU虛擬化還沒有一套完善的處理方案。

        API重定向虛擬化的方法集中在在通用計算方面,主要是基于CUDA的解決方案[1]。目前比較成熟的框架有gVirtus、vCUDA[2]、rCUDA[3]、GViM等。這些框架都是采用類似的訪問機制,支持在虛擬機環(huán)境或者沒有GPU資源的環(huán)境中能夠訪問遠程GPU資源。這種類似的訪問機制就是以支持前后端通信鏈路為基礎,在虛擬機或者沒有GPU資源的環(huán)境中截獲CUDA API的函數(shù)調用,然后利用不同的通信方法,將調用的函數(shù)和參數(shù)轉發(fā)到被調用GPU資源的主機后端,主機后端執(zhí)行相應的函數(shù)調用,并將執(zhí)行的結果通過通信方法返回給前端。這是圖形方法虛擬化的一種常見方法。與這些虛擬化框架不同的是在虛擬機和特權域之間的通信方式,vCUDA采用RPC的遠程過程調用,GViM是基于XEN系統(tǒng),gVirtus提供多種不同類型的通信方式,rCUDA主要采用的是TCP/IP的通信方式。

        利用TCP/IP通信實現(xiàn)的GPU虛擬化,可以使一臺沒有GPU資源的計算機調用通用網(wǎng)絡中其他的GPU資源進行有效的CUDA加速計算。同樣,如果重新修改通信模式,讓沒有GPU資源的計算機同時調用分布式環(huán)境中的多個遠程GPU資源,可以有效地實現(xiàn)分布式GPU資源的抽象。本文即是按照這樣的思路,實現(xiàn)分布式環(huán)境中多機多GPU的深度神經(jīng)網(wǎng)絡加速計算。在分布式多機多GPU的環(huán)境中,利用虛擬化的方法在不影響CUDA編程接口的情況下實現(xiàn)對多個遠程GPU的并發(fā)調用,使得在虛擬機的節(jié)點或者沒有GPU的設備節(jié)點上具備集群中所有其他機器上GPU的計算能力[4]。這也是將GPU虛擬化和分布式深度神經(jīng)網(wǎng)絡訓練結合起來的有效出發(fā)點。

        1.2 深度神經(jīng)網(wǎng)絡的多GPU加速

        雖然深度學習已經(jīng)有數(shù)十年的歷史,但是2個較為先進的趨勢進一步促進了深度學習的廣泛應用:海量訓練數(shù)據(jù)的出現(xiàn)以及GPU計算所提供的強大而高效的并行計算。人們利用GPU來訓練這些深度神經(jīng)網(wǎng)絡所使用的訓練集大得多,所耗費的時間大幅縮短,占用的數(shù)據(jù)中心基礎設施也少得多[5]。但是單個GPU的加速環(huán)境已經(jīng)漸漸不能滿足人們的需求。訓練更大規(guī)模的數(shù)據(jù)量,更大規(guī)模的網(wǎng)絡結構是隨著訓練數(shù)據(jù)的急劇增長與模型復雜度的不斷提高而提出的必然要求。但是采用單個GPU加速,在訓練海量數(shù)據(jù)及超大規(guī)模的網(wǎng)絡時存在很嚴重的性能問題,模型需要很長的時間,甚至超過人類的容忍范圍的時間中才能夠達到模型的收斂[6]。因此,多個GPU的并行加速已經(jīng)成為一個必然趨勢。常見的方法就是在服務器上部署多個GPU卡或者部署分布式GPU集群。多GPU卡的并行加速,不斷提高并行加速的程序性能,訓練過程中有效存儲更大規(guī)模的網(wǎng)絡都是多GPU環(huán)境下發(fā)展的熱門方向[7]。

        對于深度神經(jīng)網(wǎng)絡的單機多GPU并行訓練,目前比較多的處理方法有數(shù)據(jù)并行和模型并行2種方式[8]。數(shù)據(jù)并行是在不同的GPU卡上部署相同的訓練模型實例,然后將訓練的數(shù)據(jù)有效切分到不同GPU卡上,對多GPU卡上的模型進行并行訓練,并在合理的時間進行參數(shù)同步,保證最終只訓練出一個模型。與之相對應的是模型并行,模型并行并不劃分數(shù)據(jù)塊,而是將大規(guī)模的網(wǎng)絡結構進行合理劃分,劃分的子結構由不同的GPU資源擁有,最后不同的GPU資源共同協(xié)作,完成一個完整網(wǎng)絡結構的有效訓練。數(shù)據(jù)并行的通信開銷來自于參數(shù)同步,而模型并行的通信開銷來自于不同GPU上神經(jīng)元的依賴關系。無論是數(shù)據(jù)并行還是模型并行都可以有效地將深度神經(jīng)網(wǎng)絡的訓練部署到多個GPU卡上,以達到訓練時間加速的目的[9]。

        另外在深度神經(jīng)網(wǎng)絡的多GPU訓練過程中,需要處理一臺機器多GPU卡和多臺機器多GPU卡的情況。由于后者的延遲和帶寬遠差于前者,因此需要對這2種情況做不同的技術考慮。單機多GPU是采用P2P拷貝到內存,用stream開始多線程。在分布式環(huán)境下的多機多GPU是采用parameter server[10]或者MPI還是部署一個新的框架,2個場景都有很多可選擇的方案。設計一個分布式代碼的困難是如何將并行的接口自然地獨立出來,使其不會影響GPU編碼和其他部分的實現(xiàn)。

        本文利用虛擬化的方法,將單機多GPU和多機多GPU2種不同環(huán)境下的編程模式有效地統(tǒng)一起來。不管是單機多GPU還是多機多GPU,這2種情況中多GPU的CUDA編程模塊都是相似的,不同的是基于不同環(huán)境的通信模式和通信框架。利用虛擬化的方法可以將通信模式,通信框架和CUDA本身的編碼內容分開,使得基于單機多GPU的CUDA代碼不需要修改,或者進行少量的修改就可以直接執(zhí)行在分布式環(huán)境的多機多GPU上,從而實現(xiàn)兩者在編程模式上的統(tǒng)一。

        2 基于遠程GPU的深度神經(jīng)網(wǎng)絡訓練

        為實現(xiàn)單機多GPU和多機多GPU環(huán)境下訓練深度神經(jīng)網(wǎng)絡編程模式上的統(tǒng)一,首先討論在虛擬化環(huán)境下如何實現(xiàn)深度神經(jīng)網(wǎng)絡調用遠程GPU資源加速訓練的方法。

        在常見的GPU虛擬化方案中始終貫徹著3個重要的設計目標:高效性,普適性,透明性。高效性是減少虛擬化所帶來的開銷,普適性是為了讓虛擬化方案能夠適應不同的虛擬化平臺。而透明性是指虛擬化的平臺方案能夠有效地支持CUDA程序的有效移植移植。在虛擬機環(huán)境中,用戶并不知道GPU資源是物理的還是虛擬的,因此,所有的CUDA程序不需要進行修改或者重新編譯就能運行在虛擬GPU的資源上。這種機制中透明性的設計目標將始終貫徹本文,也是能實現(xiàn)不同多GPU平臺編程模式統(tǒng)一的設計理念的出發(fā)點。

        本節(jié)重點討論在單個GPU虛擬化中,如何將深度神經(jīng)網(wǎng)絡訓練和虛擬化通信兩部分的內容隔離,并以此類推得到多GPU中深度神經(jīng)網(wǎng)絡訓練的平臺和方法。

        在利用API重定向的GPU虛擬化方案中,以gVirtus為例,在虛擬機端或者沒有GPU資源的客戶端建立一個新的CUDA加速庫libcudart.so,替換原生CUDA中的原始庫,并具備和CUDA相同的接口。其作用就是當出現(xiàn)CUDA API的函數(shù)調用時,新的加速庫libcudart.so會攔截函數(shù)調用,并通過合理的通信方式,如TCP/IP,將函數(shù)調用的函數(shù)名和函數(shù)參數(shù)發(fā)送到服務器端。在服務器端使用物理GPU進行計算,最終將計算結果利用Socket返回給虛擬機,以此達到虛擬化的目的。具體實現(xiàn)框圖如圖1所示。

        圖1 API重定向的虛擬化框圖

        這種GPU虛擬化方案針對NVIDIA CUDA框架,是目前應用最廣泛的GPU虛擬化框架。該API重定向的虛擬化框架可以在虛擬機平臺下有效運行,最終能夠使沒有GPU資源的虛擬機調用遠程GPU資源進行高性能的并行加速計算。這種方案不僅可以應用在虛擬機中,同時對于沒有GPU資源或者擁有缺少CUDA支持GPU資源的計算機,可以利用通用網(wǎng)絡的Socket通信來調用遠程機器上的GPU資源。利用這種方法來調用遠程的GPU資源訓練本地機器上的深度神經(jīng)網(wǎng)絡。

        使用遠程GPU的調用方法和基于API重定向的GPU虛擬化方法并沒有本質上的差異。唯一的區(qū)別在于通信方式在遠程GPU中只能選擇通用網(wǎng)絡中的TCP/IP模式,而不能使用其他虛擬機和本地機器之間的通信方式。

        如圖2所示,可以得到基于遠程GPU的深度神經(jīng)網(wǎng)絡訓練的基本方案:首先利用虛擬化的方法得到遠程GPU的計算資源,然后上層可以直接利用通用的CUDA編程進行深度學習的加速訓練。兩者能夠互相獨立并且有效地結合在一起,主要是由于在虛擬化方案設計中的透明性。深度神經(jīng)網(wǎng)絡的CUDA加速代碼不需要進行修改或者重新編譯,就可以直接運行在虛擬化的遠程GPU上。

        圖2 深度神經(jīng)網(wǎng)絡的遠程GPU調用流程

        關于深度神經(jīng)網(wǎng)絡的CUDA加速訓練是目前的研究熱點。單GPU的神經(jīng)網(wǎng)絡訓練加速已經(jīng)有成熟的研究成果,本文不再贅述。這里主要考察基于遠程GPU的深度神經(jīng)網(wǎng)絡的訓練加速的性能。實驗采用的環(huán)境是Intel(R) Core(TM) i5-4590 CPU,7.8 GHz的內存,ubuntu14.04的操作系統(tǒng),配置一塊GeForce GTX 750的GPU卡。在虛擬環(huán)境或者沒有GPU資源的環(huán)境中,采用ubuntu14.04的操作系統(tǒng),除了顯卡外其他資源相同。

        本文所采用的深度神經(jīng)網(wǎng)絡結構如圖3所示,其中訓練的數(shù)據(jù)為mnist手寫數(shù)字識別的數(shù)據(jù),訓練方法采用隨機梯度下降,每一個batch的大小為200。

        圖3 深度神經(jīng)網(wǎng)絡結構

        根據(jù)訓練的實驗結果,重點比較沒有GPU資源、調用遠程GPU資源和調用本地GPU資源3種不同情況下的加速深度神經(jīng)網(wǎng)絡的訓練效果。如圖4所示,其中橫坐標代表訓練1 000個batch的次數(shù),縱坐標代表每訓練1 000個batch需要的時間。

        圖4 不同情況下的訓練時間對比

        通過計算,訓練1 000個batch在沒有GPU的情況下平均需要3 451.02 s,而本地GPU和遠程GPU平均所需要的時間分別為18.16 s和44.31 s。本地GPU的加速比可以達到190倍的加速比,而遠程GPU的加速比也能達到78倍的加速比。最終本地GPU和遠程GPU訓練的正確率都能達到99.06%左右。說明這種遠程GPU的方法并不對正確率和訓練結果造成影響。

        由于在遠程GPU的調用過程中,采用的GPU虛擬化方案涉及到通用網(wǎng)絡的TCP/IP傳輸,有大量的訓練數(shù)據(jù)和API參數(shù)數(shù)據(jù)交換。這里GPU并行加速不僅需要掩蓋CPU和GPU之間的傳輸時間,同時還要掩蓋CPU和CPU之間的傳輸時間。因此,遠程GPU的加速訓練神經(jīng)網(wǎng)絡的效果一定比不上本地GPU的加速效果,同時收斂速度也比本地GPU慢,但與傳統(tǒng)的不利用GPU加速的訓練效果相比,優(yōu)勢還是很明顯的。

        這就說明遠程GPU資源的調用仍然可以對加速神經(jīng)網(wǎng)絡的訓練達到一定效果。那么如果遠程調用多個GPU資源環(huán)境,或者是在使用通用網(wǎng)絡連接的分布式環(huán)境中,這種方案是否可行。

        3 多GPU深度神經(jīng)網(wǎng)絡訓練框架

        與單GPU的遠程調用類似,在討論多GPU深度神經(jīng)網(wǎng)絡訓練的過程中,重點研究如何利用虛擬化方案調用多個遠程GPU資源和深度神經(jīng)網(wǎng)絡如何在多GPU上加速訓練。

        在多GPU平臺上主要有2種類型:一種是單機多GPU;另一種是多機多GPU(也就是GPU集群),如圖5所示。兩者的不同之處在于:單機多GPU的環(huán)境可以直接利用CUDA編程進行處理。在多機多GPU的環(huán)境中需要重點考慮分布式通信框架,同時分布式框架如何為CUDA編程提供有效的底層通信接口,將通信和CUDA代碼隔離開也是需要深入研究的問題。在目前常見的處理多GPU的方案中,一般是將2種情況區(qū)別對待,單機多GPU的CUDA代碼需要進行較大的修改才能移植到多機多GPU卡上,這種做法是可以被改進的。

        圖5 單機多GPU和多機多GPU

        3.1 基于虛擬化的多GPU遠程調用

        采用虛擬化的方法進行遠程GPU調用,可以有效地將分布式環(huán)境中多機多GPU資源映射成單機多GPU的環(huán)境。在多機多GPU的分布式環(huán)境中,需要考慮的各種分布式通信問題可以放在虛擬化的過程中解決,同時利用虛擬化可以為用戶提供一個和單機多GPU相似的編程環(huán)境。這樣可以將2種不同的多GPU環(huán)境有效地結合在一起,進行CUDA編程的程序員只需要考慮一種情況的編程模式,單機多GPU的CUDA代碼不需要進行修改或者只需要進行少量的修改就可以移植到多機多GPU上。傳統(tǒng)的虛擬化方法,如gVirtus、vCUDA、GVim只能支持一對一的虛擬化,而rCUDA源碼并不公開,不利于做分布式深度學習的進一步改進。

        一個典型的分布式集群系統(tǒng)中存在多個有計算能力的分布式節(jié)點,在每個分布式節(jié)點上部署不同計算能力的GPU資源,分布式節(jié)點之間采用一定的通信方式互相連接[11]。在虛擬化的過程中,將需要重定向轉發(fā)的API數(shù)據(jù)分別轉發(fā)到能夠使用網(wǎng)絡通信的所有其他機器上,在這些機器上執(zhí)行相應的GPU計算并將結果返回給本地[12]。程序轉發(fā)流程如圖6所示。同時使用不同機器的IP地址,將機器的GPU節(jié)點唯一標識,強制命名為GPU0、GPU1、GPU2、……來區(qū)分不同的GPU。所有分布式通信需要解決的容錯性、冗余性等問題都可以放在虛擬化中解決。

        圖6 虛擬化GPU計算平臺軟件層次結構

        以gVirtus為例,這里的改進主要包括2個方面:一方面是將gVirtus的一對一形式改成一對多的形式;另一方面是根據(jù)深度神經(jīng)網(wǎng)絡的訓練,改進虛擬化過程中的一些缺陷。

        首先gVirtus實現(xiàn)的一對一的虛擬GPU只是真實GPU的邏輯映像,在虛擬機或者遠程GPU調用的過程中并不能直接使用。改進一對一到一對多的具體方法可以是利用MPI、MapReduce、多線程、Hadoop等[13]。

        在本文中,當一個本地上的CUDA需要調用多個遠程GPU時,采用多線程的方法進行控制。每一個線程控制一個GPU虛擬化和數(shù)據(jù)傳輸?shù)倪^程,線程和線程之間以及多個GPU之間是互相獨立互補影響的。這也將和本文后面處理深度神經(jīng)網(wǎng)絡需要解決的問題相關。每一個多GPU程序在運行的過程中,首先將數(shù)據(jù)分解到不同的線程上,由線程控制不同的GPU上的數(shù)據(jù)傳輸。同時可以根據(jù)不同GPU的計算能力實現(xiàn)數(shù)據(jù)分解上的負載均衡。數(shù)據(jù)計算過程中不同GPU之間是松耦合、互不相干的。計算的結果最終返回到主機CPU,CPU有時需要同步所有GPU的計算結果,這是緊耦合的[14]。這一部分和深度學習的多GPU訓練是密切相關的,因此,在實驗過程中仍然會著重闡述。

        最終通過虛擬化的方法,可以將GPU集群中的所有GPU資源,集中虛擬化到一個GPU池中,同時集群中的每臺機器都可以訪問這個GPU池,充分利用網(wǎng)絡中的所有GPU資源,如圖7所示。

        圖7 多機多GPU的邏輯配置

        3.2 基于多個遠程GPU深度神經(jīng)網(wǎng)絡訓練框架

        通過虛擬化的方法可以實現(xiàn)多GPU的遠程調用,將分布式多機多GPU的環(huán)境映射成單機多GPU的環(huán)境,為上層程序員提供一個相同的CUDA編程環(huán)境,實現(xiàn)2個不同環(huán)境下編程模式的統(tǒng)一。

        基于多GPU的深度神經(jīng)網(wǎng)絡的訓練主要有數(shù)據(jù)并行和模型并行2種不同的方式。數(shù)據(jù)并行是在不同的GPU卡上部署相同的訓練模型實例,然后將訓練的數(shù)據(jù)有效切分到不同GPU卡上,對多GPU卡上的模型進行并行訓練,并在合理的時間進行參數(shù)同步,保證最終只訓練出一個模型。與之相對應的是模型并行,模型并行并不劃分數(shù)據(jù)塊,而是將大規(guī)模的網(wǎng)絡結構進行合理的劃分,劃分的子結構由不同的GPU資源擁有,最后不同的GPU資源共同協(xié)作,完成一個完整網(wǎng)絡結構的有效訓練。數(shù)據(jù)并行的通信開銷來自于參數(shù)同步,而模型并行的通信開銷來自于不同GPU上神經(jīng)元的依賴關系。本文實驗主要采用的是數(shù)據(jù)并行的方法,數(shù)據(jù)并行的內容如圖8所示。

        圖8 數(shù)據(jù)并行

        在數(shù)據(jù)并行中,每一張GPU顯卡采用隨機梯度下降(SGD)的方法進行訓練,在每一張顯卡的一個mini-batch計算完成之后需要進行一次不同GPU卡上的參數(shù)同步。每一塊GPU卡將每一個mini-batch計算得到梯度Δw同步到參數(shù)服務器W上,常用的梯度參數(shù)同步更新的公式為:

        Wi+1=Wi-ε·Δw

        其中,i是參數(shù)更新的次數(shù),W是同步后的梯度參數(shù),ε是有效的學習速率,Δw是每個mini-batch BP計算出的梯度[15]。如圖8所示,參數(shù)服務器即為更新W。

        以數(shù)據(jù)并行為例,將多GPU深度神經(jīng)網(wǎng)絡的訓練和虛擬化的遠程GPU結合在一起,將在單機多GPU上執(zhí)行的訓練程序,在不需要修改或者進行少量修改的情況下直接移植到多機多GPU的環(huán)境下。一般情況下只需要修改單機多GPU程序的編譯方式,將libcudart.so的調用方式變成動態(tài)鏈接庫而不需要修改原來的代碼。但因為虛擬化出來的GPU畢竟不是真實的GPU,而且CPU-GPU的匹配隊并不在同一臺機器上,所以很多與CPU相關的特定內存訪問模型并不支持。而且現(xiàn)在的GPU虛擬化不支持統(tǒng)一內存管理、模塊管理等。最后因為網(wǎng)絡延時的問題,與事件管理功能的時序功能可能不正確。與出現(xiàn)上述幾種情況有關的GPU代碼進行分布式擴展時,就會遇到問題,需要修改原來的代碼才能繼續(xù)操作。擴展執(zhí)行的邏輯框圖如圖9所示。

        圖9 基于遠程GPU調用的數(shù)據(jù)并行訓練框圖

        與傳統(tǒng)的數(shù)據(jù)并行不同的是,本文的數(shù)據(jù)并行在參數(shù)同步的過程上稍有差別。這是由于基于虛擬化的遠程GPU調用的方法部署分布式GPU的遺留問題。雖然多機多GPU可以通過這種方法映射成單機多GPU的形式,但是兩者還是有一些差異的。單機多GPU中不同的GPU卡可以通過PCI-e相連,同時在CUDA中支持P2P的方法來進行不同GPU卡之間的數(shù)據(jù)交換[16]。然而,通過本文部署分布式GPU集群映射出來的單機多GPU卻不具備這種屬性。原因是通用網(wǎng)絡中不同節(jié)點的GPU本身不具備互連的性質,在虛擬化之后,映射出來的GPU仍然不能夠互連。與此相關的問題主要有2種解決方案:第1種是改變CUDA虛擬化中與P2P相關的服務器端執(zhí)行接口,取代原來接口一致性的實現(xiàn)方法;第2種則是改變數(shù)據(jù)并行的實現(xiàn)流程。本文采用第2種方法。

        具體的不同是在于,傳統(tǒng)數(shù)據(jù)并行在不同GPU上訓練的參數(shù)在同步時可以選擇一個GPU作為GPU server,其他GPU卡上的參數(shù)可以通過P2P拷貝到GPU server上進行參數(shù)同步。本文的數(shù)據(jù)并行依賴于通用網(wǎng)絡且不同GPU之間并不能互連,因此,在參數(shù)同步的過程中,需要將所有GPU上的數(shù)據(jù)傳輸?shù)奖镜谻PU上執(zhí)行,執(zhí)行完后再將同步結果利用cudaMemcpy等方法再分發(fā)到不同GPU上。同理,基于通用網(wǎng)絡的分布式環(huán)境中的模型并行,也需要進行這方面的改進。

        深度神經(jīng)網(wǎng)絡的數(shù)據(jù)并行在遠程GPU上的執(zhí)行流程為:首先要對所有需要訓練的數(shù)據(jù)進行有效的、合理的劃分,劃分的依據(jù)為不同GPU設備的計算能力。數(shù)據(jù)并行根據(jù)不同GPU的計算能力,將數(shù)據(jù)合理劃分到不同的GPU顯卡設備上進行計算。然后使用一個或者多個CPU線程分別控制不同的GPU卡,利用普通的顯存拷貝方式或者異步的數(shù)據(jù)拷貝方式將數(shù)據(jù)轉移到虛擬GPU上。接著虛擬GPU將需要執(zhí)行的API數(shù)據(jù)和訓練數(shù)據(jù)轉發(fā)到多個遠程GPU上,遠程GPU完成執(zhí)行之后,將計算結果返回給客戶端的虛擬GPU。由于P2P的緣故,在迭代更新的過程中,上層用戶只可以在本地CPU上執(zhí)行不同GPU訓練的參數(shù)同步。最后用戶可以接收到來自虛擬GPU返回的計算結果,進行下一步計算,而不需要考慮底層虛擬化的遠程GPU調用過程。

        4 實驗與結果分析

        4.1 實驗環(huán)境

        實驗采用的環(huán)境是4臺Intel(R) Core(TM) i5-4590 CPU,7.8 GHz內存,ubuntu14.04操作系統(tǒng),分別配置相同的一塊GeForce GTX 750的GPU卡。

        在虛擬環(huán)境或者沒有GPU資源的環(huán)境中,采用ubuntu14.04的操作系統(tǒng),除了顯卡外其他資源相同。所有CUDA的版本為7.5,這里的GPU加速暫時沒有使用CUDNN,所以不涉及CUDNN的版本。

        4.2 實驗方案

        這里訓練的深度神經(jīng)網(wǎng)絡和第3節(jié)中的模型相同,訓練的數(shù)據(jù)集以mnist手寫數(shù)字識別為例,采用隨機梯度下降的訓練方法。分別在虛擬環(huán)境或者沒有GPU資源環(huán)境外配置1個遠程GPU、2個遠程GPU、4個遠程GPU。由于每個GPU都是相同的,因此每種情況下的每個GPU仍然采用相同的batch size,即為200。最后得到訓練的結果。分別比較1個遠程GPU、2個遠程GPU和4個遠程GPU的訓練1 000個batch size所需要的平均時間和收斂速度。

        由圖10和圖11中的訓練時間和收斂速度可以發(fā)現(xiàn),相對于1個遠程GPU,2個遠程GPU和4個遠程GPU可以分別達到1.6倍和2.2倍的加速比。同時和一個本地GPU相比,2個遠程GPU和4個遠程GPU也能分別達到0.6倍和1.0倍的加速比。也就是說,在mnist數(shù)據(jù)集上,4個遠程GPU的加速性能基本上就可以覆蓋普通網(wǎng)絡通信帶來的延遲。分布式環(huán)境中的深度神經(jīng)網(wǎng)絡的平均訓練時間是隨著GPU的增加而減小的,但并不能達到線性的加速比,甚至比線性的加速比效果還差很多。這是因為在多GPU訓練的過程中涉及到更多的數(shù)據(jù)交換。每個固定的時間或者迭代次數(shù)之后需要進行參數(shù)同步,這是與單個GPU有區(qū)別的地方。頻繁的數(shù)據(jù)交換只能在通用網(wǎng)絡中進行,這將會很大程度上影響到最終訓練的時間。

        圖10 不同個數(shù)GPU訓練1 000個batch size的平均時間

        圖11 不同個數(shù)GPU訓練錯誤率的收斂速度

        圖11表明,隨著GPU數(shù)量的增加,訓練錯誤率的收斂速度加快。這一點從原理上并不難理解,但是由于mnist數(shù)據(jù)集偏小,因此訓練過程中到達收斂值的時間較短,所以,圖11中看起來差距并不是特別明顯。在2個GPU和4個GPU的訓練結果表明,錯誤率收斂在1%左右。

        4.3 實驗結果

        基于虛擬化的多個遠程GPU調用平臺的實現(xiàn),在解決深度神經(jīng)網(wǎng)絡的GPU加速問題上具有一定的先進性。一方面在沒有GPU資源的節(jié)點上可以有效地調用分布式多機多GPU環(huán)境中的所有其他計算節(jié)點上的GPU資源,遠程調用的GPU資源可以有效地提高本節(jié)點高性能計算的能力。另一方面,由于基于虛擬化的遠程GPU調用采用的API重定向方法,重定向過程中涉及到很多的額外通信開銷,在一定程度上限制了多個遠程GPU調用的分布式平臺的整體性能。但是在損失一點性能的基礎上,有效實現(xiàn)了單機多GPU和多機多GPU2種不同環(huán)境下編程模式的統(tǒng)一。

        分布式環(huán)境中深度神經(jīng)網(wǎng)絡的加速訓練可以采用基于虛擬化的遠程GPU調用的方法來實現(xiàn),這種方法最大優(yōu)點是可以將分布式通信和多GPU的CUDA編程進行隔離,實現(xiàn)CUDA并行接口的自然獨立。

        利用基于虛擬化的遠程GPU調用的方法布置通用網(wǎng)絡中的分布式GPU集群,不僅簡單易行,同時提供的編程接口與傳統(tǒng)CUDA相比,具有一致性和先進性。

        5 結束語

        本文提出基于虛擬化方法的多GPU遠程調用的解決方案,并利用該解決方案搭建分布式深度神經(jīng)網(wǎng)絡的訓練平臺。使用多線程的方法控制多個GPU,將單機多GPU的深度神經(jīng)網(wǎng)絡的訓練代碼,無需進行大幅度修改即可拓展到分布式環(huán)境中的多機多GPU上。在以較少通信性能為代價的基礎上,實現(xiàn)單機多GPU和多機多GPU在編程模式上的統(tǒng)一。最終通過實驗驗證了該方法的有效性和可行性。隨著現(xiàn)代技術的發(fā)展,普通網(wǎng)絡的通信方式得到進一步改進,如InfiniBand網(wǎng)絡、GPU Direct RDMA等通信技術[13]。同時在深度神經(jīng)網(wǎng)絡的CUDA加速上,如CUDNN、Caffe、mxnet等都在加速性能上有很大程度上的提高。因此,把普通網(wǎng)絡的多GPU訓練框架推廣到新的網(wǎng)絡模型和網(wǎng)絡結構上,同時能將更多的訓練框架移植到該平臺上將是下一步的目標。

        [1] 張玉潔,呂相文,張云洲.GPU虛擬化環(huán)境下的數(shù)據(jù)通信策略研究[J].計算機技術與發(fā)展,2015,25(8):24-28.

        [2] SHI L,CHEN H,SUN J,et al.vCUDA:GPU-accelerated High-performance Computing in Virtual Machines[J].IEEE Transactions on Computers,2012,61(6):804-816.

        [3] DUATO J,PENA A J,SILLA F,et al.rCUDA:Reducing the Number of GPU-based Accelerators in High Performance Clusters[C]//Proceedings of 2010 IEEE International Conference on High Performance Computing and Simulation.Washington D.C.,USA:IEEE Press,2010:224-231.

        [4] 楊經(jīng)緯,馬 凱,龍 翔.面向集群環(huán)境的虛擬化GPU計算平臺[J].北京航空航天大學學報,2016,42(11):2340-2348.

        [5] 盛沖沖,胡新明,李佳佳,等.面向節(jié)點異構 GPU 集群的編程框架[J].計算機工程,2015,41(2):292-297.

        [6] HINTON G E,SALAKHUTDINOV R R.Reducing the Dimensionality of Data with Neural Networks[J].Science,2006,313(5786):504-507.

        [7] DEAN J,CORRADO G,MONGA R,et al.Large Scale Distributed Deep Networks[C]//Proceedings of IEEE ANIPS’12.Washington D.C.,USA:IEEE Press,2012:1223-1231.

        [8] ZOU Y,JIN X,LI Y,et al.Mariana:Tencent Deep Learning Platform and Its Applications[J].Proceedings of the VLDB Endowment,2014,7(13):1772-1777.

        [9] YADAN O,ADAMS K,TAIGMAN Y,et al.Multi-gpu Training of Convnets[EB/OL].(2013-05-23).https://wenku.baidu.com/view/c2121ee0aaea998fcd220e95.html.

        [10] POVEY D,ZHANG X,KHUDANPUR S.Parallel Training of DNNs with Natural Gradient and Parameter Averaging[EB/OL].(2014-05-21).http://www.itsoc.org/publications/arxiv/arxiv-faq.

        [11] SOUROURI M,GILLBERG T,BADEN S B,et al.Effective Multi-GPU Communication Using Multiple CUDA Streams and Threads[C]//Proceedings of the 20th IEEE International Conference on Parallel and Distributed Systems.Washington D.C.,USA:IEEE Press,2014:981-986.

        [12] 王 剛,唐 杰,武港山.基于多 GPU 集群的編程框架[J].計算機技術與發(fā)展,2014,24(1):9-13.

        [13] 閔 芳,張志先,張玉潔.虛擬化環(huán)境下多 GPU 并行計算研究[J].微電子學與計算機,2016,33(3):69-75.

        [14] 張玉潔.基于多 GPGPU 并行計算的虛擬化技術研究[D].南京:南京航空航天大學,2015.

        [15] ELLIOTT G A,WARD B C,ANDERSON J H.GPUSync:A Framework for Real-time GPU Management[C]//Proceed-ings of RTSS’13.Washington D.C.,USA:IEEE Press,2013:33-44.

        [16] STUART J A,OWENS J D.Multi-GPU MapReduce on GPU Clusters[C]//Proceedings of IEEE International on Parallel & Distributed Processing Symposium.Washington D.C.,USA:IEEE Press,2011:1068-1079.

        猜你喜歡
        深度資源環(huán)境
        基礎教育資源展示
        長期鍛煉創(chuàng)造體內抑癌環(huán)境
        一種用于自主學習的虛擬仿真環(huán)境
        深度理解一元一次方程
        一樣的資源,不一樣的收獲
        孕期遠離容易致畸的環(huán)境
        深度觀察
        深度觀察
        環(huán)境
        資源回收
        成熟的女人毛茸茸色视频| 国产免费专区| 国产精品亚洲专区无码不卡 | 亚洲羞羞视频| 国产高潮精品一区二区三区av | 厨房人妻hd中文字幕| 国产成人精品日本亚洲11| 精品国产av无码一道| 国产一区二区三区涩涩涩| 色婷婷精品久久二区二区蜜桃| 帮老师解开蕾丝奶罩吸乳视频| 国产a级午夜毛片| 中文少妇一区二区三区| 国内精品少妇高潮视频| 99国产精品人妻噜啊噜| 国产色噜噜| 亚洲一区二区三区新视频| 电驱蚊液可以插一晚上吗 | 成人免费自拍视频在线观看| 国内精品自在自线视频| 91产精品无码无套在线| 亚洲发给我的在线视频| 高清午夜福利电影在线| 人妻少妇精品视频一区二区三区| 亚洲九九九| 亚洲中文字幕一区二区在线| 日韩精品无码一本二本三本色| 国产成人亚洲不卡在线观看| 女同性恋亚洲一区二区| 亚洲人成在久久综合网站| 国产一区二区三精品久久久无广告| 亚洲成a人片在线播放观看国产| 久久久精品少妇—二区| 国产a√无码专区亚洲av| 中文字幕无码免费久久| 中文乱码字慕人妻熟女人妻| 欧美日韩性视频| 中文字幕精品乱码一区| 蜜臀久久99精品久久久久久| 亚洲 暴爽 av人人爽日日碰| 久久久久亚洲AV无码去区首|