并行運(yùn)行g(shù)pu運(yùn)算程序的實(shí)現(xiàn)方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及GPU運(yùn)算程序管理技術(shù)領(lǐng)域,特別是涉及一種在一臺(tái)物理主機(jī)上運(yùn)行不同GPU運(yùn)算程序的實(shí)現(xiàn)方法及裝置。
【背景技術(shù)】
[0002]虛擬化技術(shù)目前在計(jì)算機(jī)體系結(jié)構(gòu)、操作系統(tǒng)、編譯器和編程語言等領(lǐng)域得到了廣泛應(yīng)用。該技術(shù)實(shí)現(xiàn)了資源的邏輯抽象和統(tǒng)一表示,在服務(wù)器、網(wǎng)絡(luò)及存儲(chǔ)管理等方面都有著突出的優(yōu)勢,降低了管理復(fù)雜度,提高了資源利用率和運(yùn)營效率,有效地控制了成本。目前的虛擬化技術(shù)已經(jīng)能很好的支持CPU、內(nèi)存、網(wǎng)卡等計(jì)算資源的虛擬化,但是對于一些特定的設(shè)備,比如顯卡、聲卡等多媒體設(shè)備的支持并不完善。
[0003]近幾年GPU的出現(xiàn),對高性能計(jì)算領(lǐng)域發(fā)展起到了不可估量的推動(dòng)作用,GPU相對于CPU在硬件架構(gòu)上具有計(jì)算單元優(yōu)勢,但GPU本身在虛擬化驅(qū)動(dòng)支持程度相比成熟的CPU技術(shù)有較大的差距,例如:目前的物理主機(jī)的GPU硬件只能串行處理,即同一時(shí)間段內(nèi)只能運(yùn)行一個(gè)GPU運(yùn)算程序。無法將一臺(tái)物理主機(jī)上的GPU硬件虛擬化為多個(gè)能夠單獨(dú)運(yùn)行GPU運(yùn)算程序的GPU資源,也就是說,無法實(shí)現(xiàn)在一臺(tái)物理機(jī)上并行運(yùn)行不同的GPU運(yùn)算程序。
【發(fā)明內(nèi)容】
[0004]本發(fā)明實(shí)施例的目的在于提供一種在一臺(tái)物理主機(jī)上并行運(yùn)行GPU運(yùn)算程序的實(shí)現(xiàn)方法及裝置,以提高虛擬化技術(shù)對GPU的支持程度。
[0005]為達(dá)到上述目的,本發(fā)明實(shí)施例公開了一種在一臺(tái)物理機(jī)上運(yùn)行不同GHJ運(yùn)算程序的實(shí)現(xiàn)方法,所述方法包括:
[0006]獲得待運(yùn)行的至少一個(gè)GPU運(yùn)算程序;
[0007]分別獲得每個(gè)待運(yùn)行的GPU運(yùn)算程序適用的容器鏡像;所述容器鏡像為依據(jù)所述物理主機(jī)已安裝的GPU的相關(guān)信息預(yù)先構(gòu)建的;所述GPU的相關(guān)信息至少包括:已安裝的各個(gè)GPU的硬件型號、每種型號GPU的驅(qū)動(dòng)程序及每種型號GPU的運(yùn)算框架;
[0008]根據(jù)每個(gè)待運(yùn)行的GPU運(yùn)算程序適用的容器鏡像,為每個(gè)待運(yùn)行的GPU運(yùn)算程序創(chuàng)建對應(yīng)的容器;
[0009]為每個(gè)容器配置非GPU的硬件資源;
[0010]按照預(yù)設(shè)的綁定粒度為每個(gè)容器綁定GPU硬件資源;
[0011]將各個(gè)GPU運(yùn)算程序提交給對應(yīng)的容器;
[0012]各個(gè)容器利用自身被配置的非GPU的硬件資源和綁定的GPU硬件資源,運(yùn)行GPU運(yùn)算程序。
[0013]優(yōu)選的,所述獲得待運(yùn)行的至少一個(gè)GPU運(yùn)算程序,包括:
[0014]獲得存儲(chǔ)在所述物理主機(jī)中的GPU運(yùn)算程序;
[0015]和/或
[0016]通過網(wǎng)絡(luò)接收GPU運(yùn)算程序。
[0017]優(yōu)選的,所述的GPU運(yùn)算程序中包含有與GPU相關(guān)的描述信息;所述描述信息中包括:該GPU運(yùn)算程序所需要的GPU的硬件型號、該GPU的驅(qū)動(dòng)程序及該GPU的運(yùn)算框架;
[0018]所述分別獲得每個(gè)待運(yùn)行的GPU運(yùn)算程序適用的容器鏡像,包括:
[0019]獲得每個(gè)待運(yùn)行的GPU運(yùn)算程序中的與GPU相關(guān)的描述信息;
[0020]將獲得的每個(gè)待運(yùn)行的GPU運(yùn)算程序的所述描述信息,與預(yù)先構(gòu)建的各個(gè)容器鏡像的GPU的相關(guān)信息進(jìn)行匹配;
[0021]將匹配成功的容器鏡像,確定為待運(yùn)行的GPU運(yùn)算程序適用的容器鏡像。
[0022]優(yōu)選的,所述容器鏡像保存在所述物理主機(jī)中或預(yù)先設(shè)置的容器鏡像服務(wù)器中;
[0023]所述分別獲得每個(gè)待運(yùn)行的GPU運(yùn)算程序適用的容器鏡像,包括:
[0024]分別從所述物理主機(jī)中保存的容器鏡像中或容器鏡像服務(wù)器中儲(chǔ)存的容器鏡像中獲得每個(gè)待運(yùn)行的GPU運(yùn)算程序使用的容器鏡像。
[0025]優(yōu)選的,所述非GPU的硬件資源,至少包括:
[0026]CPU核心的使用數(shù)量、CPU的占用比、內(nèi)存容量和磁盤容量。
[0027]優(yōu)選的,所述預(yù)設(shè)的綁定粒度,包括:
[0028]物理顯卡中至少一個(gè)芯片或GPU芯片中至少一個(gè)計(jì)算單元。
[0029]優(yōu)選的,所述的容器鏡像為利用Linux容器鏡像構(gòu)建指令,或者通過容器鏡像構(gòu)建工具構(gòu)建的。
[0030]優(yōu)選的,所述根據(jù)每個(gè)待運(yùn)行的GHJ運(yùn)算程序適用的容器鏡像,為每個(gè)待運(yùn)行的GHJ運(yùn)算程序創(chuàng)建對應(yīng)的容器,包括:
[0031 ]調(diào)用Linux容器構(gòu)建指令或通過容器構(gòu)建工具創(chuàng)建容器。
[0032]優(yōu)選的,還包括:在運(yùn)行完GPU運(yùn)算程序后,保存為該GPU運(yùn)算程序創(chuàng)建的容器,繼續(xù)執(zhí)行所述獲得待運(yùn)行的至少一個(gè)GHJ運(yùn)算程序;
[0033]針對所獲得的每個(gè)GPU運(yùn)算程序,從已保存的容器中查找與所述再次獲得的GPU運(yùn)算程序相匹配的容器;
[0034]如查找到與該GPU運(yùn)算程序相匹配的容器,則將該GPU運(yùn)算程序提交給與其相匹配的容器,與該GPU運(yùn)算程序相匹配的容器利用自身被配置的非GPU的硬件資源和綁定的GPU硬件資源,運(yùn)行該GPU運(yùn)算程序;
[0035]如未查找到與該GPU運(yùn)算程序相匹配的容器,則獲得該GPU運(yùn)算程序使用的容器鏡像;根據(jù)該容器鏡像,創(chuàng)建該GPU運(yùn)算程序?qū)?yīng)的容器;為該容器配置非GPU的硬件資源;按照預(yù)設(shè)的綁定粒度為該容器綁定GHJ硬件資源;將該GPU運(yùn)算程序提交給該容器;該容器利用自身被配置的非GHJ的硬件資源和綁定的GPU硬件資源,運(yùn)行該GPU運(yùn)算程序。
[0036]為達(dá)到上述目的,本發(fā)明實(shí)施例還提供了一種在一臺(tái)物理主機(jī)上并行運(yùn)行GPU運(yùn)算程序的實(shí)現(xiàn)裝置,所述裝置包括:
[0037]GPU運(yùn)算程序獲得單元,用于獲得待運(yùn)行的至少一個(gè)GPU運(yùn)算程序;
[0038]容器鏡像獲得單元,用于分別獲得每個(gè)待運(yùn)行的GPU運(yùn)算程序適用的容器鏡像;所述的容器鏡像為依據(jù)所述物理主機(jī)已安裝的GHJ的相關(guān)信息預(yù)先構(gòu)建的;所述GPU的相關(guān)信息至少包括:已安裝的各個(gè)GPU的硬件型號、每種型號GPU的驅(qū)動(dòng)程序及每種型號GPU的運(yùn)算框架;
[0039]容器創(chuàng)建單元,用于根據(jù)每個(gè)待運(yùn)行的GPU運(yùn)算程序適用的容器鏡像,為每個(gè)待運(yùn)行的GPU運(yùn)算程序創(chuàng)建對應(yīng)的容器;
[0040]非GPU的硬件資源配置單元,用于為每個(gè)容器配置非GPU的硬件資源;
[0041]GPU硬件資源綁定單元,用于按照預(yù)設(shè)的綁定粒度為每個(gè)容器綁定GPU硬件資源;
[0042]程序提交單元,用于將各個(gè)GPU運(yùn)算程序提交給對應(yīng)的容器;
[0043]容器運(yùn)行單元,用于各個(gè)容器利用自身被配置的非GPU的硬件資源和綁定的GPU硬件資源,運(yùn)行GPU運(yùn)算程序。
[0044]優(yōu)選的,所述GPU運(yùn)算程序獲得單元,具體用于:
[0045]獲得存儲(chǔ)在所述物理主機(jī)中的GPU運(yùn)算程序;和/或通過網(wǎng)絡(luò)接收GPU運(yùn)算程序。
[0046]優(yōu)選的,所述的GPU運(yùn)算程序中包含有與GPU相關(guān)的描述信息;所述描述信息中包含:該GPU運(yùn)算程序所需要的GPU的硬件型號、該GPU驅(qū)動(dòng)程序及該GPU的運(yùn)算框架;
[0047]所述的容器鏡像獲得單元包括:描述信息獲得子單元、匹配子單元和確定子單元;
[0048]所述描述信息獲得子單元,用于獲得每個(gè)待運(yùn)行的GPU運(yùn)算程序中的與GPU相關(guān)的描述信息;
[0049]所述匹配子單元,用于將獲得的每個(gè)待運(yùn)行的GPU運(yùn)算程序的所述描述信息,與預(yù)先構(gòu)建的各個(gè)容器鏡像的GHJ的相關(guān)信息進(jìn)行匹配;
[0050]所述確定子單元,用于將匹配成功的容器鏡像,確定為待運(yùn)行的GPU運(yùn)算程序適用的容器鏡像。
[0051 ]優(yōu)選的,所述容器鏡像保存在所述物理主機(jī)中或預(yù)先設(shè)置的容器鏡像服務(wù)器中;
[0052]所述容器鏡像獲得單元,具體用于:
[0053]分別從所述物理主機(jī)中保存的容器鏡像中或容器鏡像服務(wù)器中存儲(chǔ)的容器鏡像中獲得每個(gè)待運(yùn)行的GPU運(yùn)算程序適用的容器鏡像。
[0054]優(yōu)選的,還包括:容器存儲(chǔ)單元和容器匹配單元;
[0055]所述容器存儲(chǔ)單元,用于在運(yùn)行完GPU運(yùn)算程序后,保存為該GPU運(yùn)算程序創(chuàng)建的容器,觸發(fā)所述GPU運(yùn)算程序獲得單元;
[0056]所述