隨著人工智能在工業(yè)和學(xué)術(shù)界大規(guī)模的應(yīng)用,深度學(xué)習(xí)訓(xùn)練需求日益迫切。各組織機(jī)構(gòu)投入大量資金購(gòu)置和搭建配置GPU和InfiniBand網(wǎng)卡異構(gòu)計(jì)算集群。集群管理系統(tǒng)(也稱(chēng)平臺(tái))支持模型訓(xùn)練,提供作業(yè)、數(shù)據(jù)和模型管理,并提供資源隔離。資源管理系統(tǒng)是深度學(xué)習(xí)系統(tǒng)的基礎(chǔ),企業(yè)級(jí)場(chǎng)景下,上層框架和應(yīng)用通常在資源管理系統(tǒng)提供的資源上運(yùn)行。
異構(gòu)計(jì)算的主要驅(qū)動(dòng)力來(lái)自于暗硅和異構(gòu)硬件的發(fā)展趨勢(shì)。數(shù)據(jù)中心硬件日益多樣化,用戶以多租共享的方式使用硬件。因此,統(tǒng)一管理需求逐漸產(chǎn)生。為管理計(jì)算和存儲(chǔ)異構(gòu)硬件,通常需要在統(tǒng)一空間內(nèi)對(duì)其進(jìn)行抽象和管理,最終實(shí)現(xiàn)用戶對(duì)硬件透明化的使用。異構(gòu)計(jì)算集群調(diào)度和資源管理系統(tǒng)在人工智能系統(tǒng)中類(lèi)似于傳統(tǒng)操作系統(tǒng),對(duì)底層異構(gòu)資源(如GPU、CPU等)進(jìn)行抽象,對(duì)上調(diào)度深度學(xué)習(xí)作業(yè)并分配資源。在啟動(dòng)作業(yè)后,還需進(jìn)行資源隔離、環(huán)境隔離和作業(yè)生命周期管理。
異構(gòu)計(jì)算集群管理系統(tǒng)簡(jiǎn)介
異構(gòu)計(jì)算集群管理系統(tǒng)是一種系統(tǒng)軟件,負(fù)責(zé)管理計(jì)算機(jī)集群內(nèi)的多個(gè)節(jié)點(diǎn)的硬件(如GPU、CPU、內(nèi)存、磁盤(pán)等)和軟件資源(如框架、作業(yè)、鏡像等),并為計(jì)算機(jī)程序(通常是深度學(xué)習(xí)訓(xùn)練作業(yè))提供通用服務(wù)(如作業(yè)提交、調(diào)試、監(jiān)控、克隆等)。簡(jiǎn)而言之,異構(gòu)計(jì)算集群管理系統(tǒng)是一種管理和優(yōu)化計(jì)算機(jī)集群內(nèi)硬件和軟件資源的系統(tǒng)軟件,旨在為深度學(xué)習(xí)訓(xùn)練提供通用服務(wù)。
一、多租環(huán)境運(yùn)行的訓(xùn)練作業(yè)
多租環(huán)境提交運(yùn)行作業(yè)
在企業(yè)級(jí)深度學(xué)習(xí)場(chǎng)景中,大型企業(yè)通常擁有許多機(jī)器學(xué)習(xí)科學(xué)家和工程師,并且擁有大量GPU服務(wù)器。為提高效率和資源共享,面向深度學(xué)習(xí)場(chǎng)景設(shè)計(jì)的多租戶平臺(tái)系統(tǒng)備受青睞。如上圖所示,在企業(yè)環(huán)境下,不同用戶會(huì)提交不同框架(如PyTorch、TensorFlow等)的深度學(xué)習(xí)作業(yè),具有不同的資源需求(如單GPU卡、多GPU卡),共享一個(gè)物理集群以減少硬件資源的浪費(fèi)。
當(dāng)前深度學(xué)習(xí)場(chǎng)景下,平臺(tái)系統(tǒng)管理的資源是異構(gòu)的(如CPU、GPU等)。與深度學(xué)習(xí)開(kāi)發(fā)者獨(dú)占服務(wù)器進(jìn)行模型訓(xùn)練相比,多用戶共享多GPU服務(wù)器有很大的不同。這也為異構(gòu)計(jì)算集群管理系統(tǒng)(簡(jiǎn)稱(chēng)平臺(tái)或深度學(xué)習(xí)平臺(tái))的設(shè)計(jì)帶來(lái)相應(yīng)需求,主要體現(xiàn)在以下幾個(gè)方面:
1、多作業(yè)(Job)和多用戶
1)每個(gè)用戶為不斷改進(jìn)模型、超參數(shù)調(diào)優(yōu)、調(diào)試和優(yōu)化作業(yè)向平臺(tái)提交大量作業(yè)。
2)不同人工智能團(tuán)隊(duì)(如計(jì)算機(jī)視覺(jué)、自然語(yǔ)言處理、語(yǔ)音識(shí)別等)都使用平臺(tái)。每個(gè)團(tuán)隊(duì)很多工程師會(huì)在同一時(shí)間段內(nèi)向平臺(tái)申請(qǐng)資源來(lái)執(zhí)行作業(yè)。
2、作業(yè)環(huán)境需求多樣
當(dāng)前深度學(xué)習(xí)技術(shù)棧不夠統(tǒng)一,不同的用戶可能使用不同的框架和庫(kù),如TensorFlow、PyTorch、Hugging Face等。用戶可能使用開(kāi)源項(xiàng)目,其中有些項(xiàng)目較老舊,有些則使用最新的框架。用戶不希望頻繁地進(jìn)行版本適配。此外,開(kāi)源框架的版本也可能不一致,導(dǎo)致底層依賴(lài)如NVIDIA CUDA的版本也不同。在共享機(jī)器的情況下,需要確保環(huán)境相互獨(dú)立,不受其他用戶安裝的Python、PyTorch等版本的影響。
3、作業(yè)資源需求多樣
用戶提交的深度學(xué)習(xí)作業(yè)包括分布式訓(xùn)練作業(yè)、單機(jī)訓(xùn)練或調(diào)試任務(wù)以及大規(guī)模分布式訓(xùn)練任務(wù)。這些作業(yè)的需求資源量各不相同,有些需要更多的資源,有些則需要較少的資源。即使申請(qǐng)的GPU數(shù)量相同,不同的作業(yè)和模型也會(huì)導(dǎo)致資源利用率的差異。平臺(tái)需要按需分配資源,以減少資源的碎片化。用戶希望作業(yè)能夠像使用獨(dú)占資源一樣運(yùn)行,不受其他作業(yè)的資源和命名空間沖突的干擾,以便盡快完成模型訓(xùn)練。平臺(tái)需要實(shí)現(xiàn)作業(yè)運(yùn)行期間的資源隔離,以確保服務(wù)質(zhì)量。
4、服務(wù)器軟件環(huán)境單一
平臺(tái)方在購(gòu)買(mǎi)和部署資源時(shí),難以預(yù)測(cè)和規(guī)劃用戶未來(lái)的軟件和版本需求,這主要是因?yàn)橛脩羰褂玫目蚣芎蛶?kù)多種多樣,而且版本也不盡相同。為了簡(jiǎn)化運(yùn)維,平臺(tái)方通常會(huì)統(tǒng)一操作系統(tǒng)和驅(qū)動(dòng),并保持版本一致,以減少兼容性問(wèn)題。但這與用戶多樣化的環(huán)境需求相矛盾。即使部署不同系統(tǒng)和環(huán)境,也難以精確地適配用戶不斷變化的需求。
5、服務(wù)器空閑資源組合多樣
盡管平臺(tái)批量購(gòu)買(mǎi)同型號(hào)機(jī)器,但因用戶申請(qǐng)資源和作業(yè)生命周期不同,資源釋放后平臺(tái)空閑資源組合非常多樣,需要設(shè)計(jì)調(diào)度策略提高資源利用率。
從上述問(wèn)題可以看出,需要統(tǒng)一的平臺(tái)系統(tǒng)來(lái)支撐調(diào)度和資源管理。其在底層抽象和管理計(jì)算資源,在上層為應(yīng)用提供隔離且易用的作業(yè)運(yùn)行環(huán)境。簡(jiǎn)而言之,是支持深度學(xué)習(xí)應(yīng)用管理分布式GPU服務(wù)器集群的操作系統(tǒng)。
二、作業(yè)生命周期
在展開(kāi)平臺(tái)組件與功能前,先了解一下深度學(xué)習(xí)作業(yè)(作業(yè)的生命周期)在平臺(tái)上是如何提交和執(zhí)行。
GPU 集群
1、平臺(tái)上作業(yè)生命周期
1)作業(yè)提交與排隊(duì)
用戶首先在本地測(cè)試作業(yè)依賴(lài)環(huán)境,并將其打包為鏡像,然后上傳到公共鏡像中心。接著,將代碼和數(shù)據(jù)等上傳到平臺(tái)的文件系統(tǒng)中。之后,通過(guò)提交工具(如Web、命令行、API)填寫(xiě)資源申請(qǐng)、啟動(dòng)命令、部署方式、鏡像、代碼和數(shù)據(jù)路徑等信息(在提交時(shí)需要權(quán)衡資源需求和排隊(duì)時(shí)間)。
2)作業(yè)資源分配與調(diào)度
平臺(tái)在收到資源申請(qǐng)后會(huì)將其排隊(duì),等待調(diào)度器的輪詢(xún)。當(dāng)調(diào)度器輪詢(xún)到該作業(yè)時(shí),會(huì)根據(jù)集群的空閑資源狀況和調(diào)度算法決定在哪些有空閑資源的節(jié)點(diǎn)上啟動(dòng)該作業(yè)。如果無(wú)法滿足作業(yè)的資源需求,作業(yè)將繼續(xù)排隊(duì)等待。如果提交作業(yè)失敗或超時(shí),用戶需要調(diào)整作業(yè)信息后重新提交。
3)作業(yè)執(zhí)行完成與釋放
作業(yè)被調(diào)度后,平臺(tái)會(huì)在有空閑資源的節(jié)點(diǎn)上啟動(dòng)作業(yè),下載鏡像,掛載代碼和數(shù)據(jù),進(jìn)行資源限制與隔離,然后啟動(dòng)執(zhí)行。平臺(tái)在執(zhí)行中收集運(yùn)行指標(biāo)和日志以供調(diào)試。作業(yè)完成后平臺(tái)釋放資源,繼續(xù)分配給其他作業(yè)使用。
2、可以將作業(yè)在平臺(tái)上的狀態(tài)抽象為以下?tīng)顟B(tài)機(jī)
1)作業(yè)準(zhǔn)備與提交:觸發(fā)作業(yè)提交動(dòng)作
●提交成功
●提交失?。褐匦麻_(kāi)始提交
2)作業(yè)排隊(duì):觸發(fā)作業(yè)調(diào)度動(dòng)作
●調(diào)度成功
●調(diào)度失敗:重新開(kāi)始提交
3)作業(yè)部署運(yùn)行:觸發(fā)作業(yè)執(zhí)行動(dòng)作
●執(zhí)行成功
●作業(yè)失敗,重試次數(shù)<=N:重新開(kāi)始提交
●作業(yè)失敗,重試次數(shù)>N:作業(yè)失敗退出
用戶的操作實(shí)際上是在這些狀態(tài)之間不斷切換,最終達(dá)到作業(yè)成功執(zhí)行或失敗。如果執(zhí)行成功,用戶可以在完成后獲取結(jié)果和模型。
三、集群管理系統(tǒng)架構(gòu)
異構(gòu)集群管理系統(tǒng)架構(gòu)
異構(gòu)集群管理系統(tǒng)通常包含多個(gè)組件。其中,調(diào)度器負(fù)責(zé)資源與作業(yè)的管理,監(jiān)控系統(tǒng)負(fù)責(zé)監(jiān)控系統(tǒng)的健康狀態(tài)并發(fā)出警報(bào),Web界面提供用戶交互接口,存儲(chǔ)系統(tǒng)則用于存儲(chǔ)數(shù)據(jù)、模型和代碼。
1、平臺(tái)的主要組件包括
1)集群調(diào)度與資源管理模塊
統(tǒng)一管理集群資源,調(diào)度作業(yè)到空閑資源上,回收已完成作業(yè)的資源。控制平面可以選擇Kubernetes、Mesos等系統(tǒng),也可以使用面向深度學(xué)習(xí)作業(yè)的定制調(diào)度器。
2)鏡像中心
存儲(chǔ)Docker鏡像,供用戶提交和共享鏡像,作業(yè)下載鏡像??梢允褂霉仓行娜鏒ocker Hub,也可以構(gòu)建私有中心或使用云鏡像中心。
3)存儲(chǔ)模塊
扮演數(shù)據(jù)平面角色,存儲(chǔ)數(shù)據(jù)、模型和代碼。用戶上傳和作業(yè)下載數(shù)據(jù)。
4)作業(yè)生命周期管理器
部署、監(jiān)控、重試作業(yè)以及診斷錯(cuò)誤是單作業(yè)的控制平面所涉及的任務(wù)。在這個(gè)平面上,可以構(gòu)建自動(dòng)機(jī)器學(xué)習(xí)系統(tǒng),而不需要考慮其他作業(yè)。在平臺(tái)接口的基礎(chǔ)上,可以選擇使用K8S Operator、Framework Controller或YARN AppMaster等工具來(lái)實(shí)現(xiàn)這些功能。
5)集群監(jiān)控與報(bào)警
監(jiān)控硬件、服務(wù)和作業(yè)狀態(tài)并進(jìn)行報(bào)警是監(jiān)控系統(tǒng)的一項(xiàng)重要任務(wù)。在這個(gè)過(guò)程中,可以選擇使用Prometheus、Grafana、AlertManager等開(kāi)源系統(tǒng)來(lái)實(shí)現(xiàn)監(jiān)控和報(bào)警功能。此外,也可以開(kāi)發(fā)自定義監(jiān)控指標(biāo)來(lái)滿足特定需求。
6)集成開(kāi)發(fā)環(huán)境
為用戶提供Web門(mén)戶、REST API、IDE(如VS Code、Jupyter Notebook)等,用于作業(yè)提交、管理、監(jiān)控和調(diào)試。
7)測(cè)試集群
為隔離生產(chǎn)環(huán)境,可以部署一個(gè)小規(guī)模的測(cè)試集群,用于開(kāi)發(fā)和測(cè)試。
2、平臺(tái)部署模式
1)本地部署
一些公司出于數(shù)據(jù)合規(guī)等需求,選擇使用開(kāi)源平臺(tái)或自研平臺(tái)進(jìn)行本地部署,保證數(shù)據(jù)和鏡像在自有數(shù)據(jù)中心,這對(duì)運(yùn)維和開(kāi)發(fā)工程師要求較高。需要自建數(shù)據(jù)中心或在已有基礎(chǔ)設(shè)施上部署,初始投資大且需資源規(guī)劃。需要全職運(yùn)維團(tuán)隊(duì)維護(hù)軟件、監(jiān)控等,且需要平臺(tái)服務(wù)軟件的定制開(kāi)發(fā)能力。硬件迭代速度快,經(jīng)過(guò)一段時(shí)間后容易淘汰,更新又需要高成本。
2)公有云部署
一些公司購(gòu)買(mǎi)云的IaaS或PaaS服務(wù)來(lái)搭建平臺(tái),減輕運(yùn)維壓力,利用云平臺(tái)的最新技術(shù),實(shí)現(xiàn)彈性擴(kuò)縮容,但數(shù)據(jù)和代碼需上云,長(zhǎng)期成本高。初期投資小,按用量付費(fèi),大部分運(yùn)維由云供應(yīng)商完成,適合初期使用。但一些公司出于數(shù)據(jù)合規(guī)無(wú)法全部上云。成本隨規(guī)模增長(zhǎng)可能無(wú)法承擔(dān)。
3)混合云
一些公司采用敏感數(shù)據(jù)在本地,非敏感數(shù)據(jù)和彈性資源在云端的方案。
4)多云
一些公司為防云供應(yīng)商鎖定或綜合選擇性?xún)r(jià)比,會(huì)采用多云方案和工具。
本地與云部署成本趨勢(shì)
訓(xùn)練作業(yè),鏡像與容器
平臺(tái)作業(yè)與開(kāi)發(fā)體驗(yàn)
集群管理系統(tǒng)需要面對(duì)多個(gè)用戶的作業(yè)共享服務(wù)器資源,為解決環(huán)境依賴(lài)和資源隔離問(wèn)題,需要采用鏡像和運(yùn)行時(shí)資源隔離等機(jī)制。下面將從作業(yè)在集群管理系統(tǒng)上的依賴(lài)隔離、運(yùn)行時(shí)資源隔離以及人工智能作業(yè)開(kāi)發(fā)體驗(yàn)幾個(gè)方面進(jìn)行介紹。
一、深度學(xué)習(xí)作業(yè)
在本地機(jī)器或獨(dú)占服務(wù)器上開(kāi)發(fā)訓(xùn)練模型時(shí),環(huán)境問(wèn)題較少,還未暴露更多挑戰(zhàn)。獨(dú)占環(huán)境的情況如下:
●無(wú)需考慮依賴(lài)環(huán)境和資源隔離問(wèn)題
●Python環(huán)境依賴(lài)路徑在本地,通過(guò)包管理器或環(huán)境變量隔離
●GPU環(huán)境依賴(lài)路徑固定在本地,通過(guò)環(huán)境變量切換
●數(shù)據(jù)直接上傳到本地磁盤(pán),帶寬高
●直接在磁盤(pán)執(zhí)行啟動(dòng)腳本,修改調(diào)試方便
如果環(huán)境準(zhǔn)備好,可以通過(guò)下面的腳本啟動(dòng)訓(xùn)練:
python train.py --batch_size=256 --model_name=resnet50
{
// 作業(yè)名稱(chēng)
"jobName": "resnet",
// 鏡像名稱(chēng)
"image": "example.tensorflow:stable",
// 輸入數(shù)據(jù)存儲(chǔ)路徑
"dataDir": "/tmp/data",
// 數(shù)據(jù)結(jié)果存儲(chǔ)路徑
"outputDir": "/tmp/output",
...
// 任務(wù)規(guī)格:資源需求、啟動(dòng)腳本等
"taskRoles": [
{ ... "taskNumber": 1, "cpuNumber": 8, "memoryMB": 32768, "gpuNumber": 1, "command": "python train.py --batch_size=256 --model_name=resnet50" }
]
}
從作業(yè)提交規(guī)格示例可以看出,當(dāng)用戶將作業(yè)提交到有4塊GPU服務(wù)器時(shí),平臺(tái)需要提供以下支持:
1、環(huán)境依賴(lài)
1)問(wèn)題
平臺(tái)集群中的機(jī)器系統(tǒng)和環(huán)境都相同,如何支持用戶使用不同的深度學(xué)習(xí)框架(如TensorFlow和PyTorch)、庫(kù)和版本?
2)解決方法
通過(guò)指定的"image"鏡像名稱(chēng)解決環(huán)境依賴(lài)問(wèn)題。用戶需要提前將依賴(lài)打包構(gòu)建為Docker鏡像,提交到指定的鏡像中心,供作業(yè)下載使用。
2、數(shù)據(jù)與代碼
1)問(wèn)題
平臺(tái)上運(yùn)行的是深度學(xué)習(xí)訓(xùn)練作業(yè),每個(gè)作業(yè)需要輸入數(shù)據(jù)和代碼。如果直接上傳到服務(wù)器會(huì)造成過(guò)大負(fù)載,則無(wú)法復(fù)用數(shù)據(jù)和代碼。
2)解決方法
通過(guò)指定"dataDir"和"outputDir"路徑來(lái)處理作業(yè)的輸入數(shù)據(jù)和輸出結(jié)果。用戶提前上傳數(shù)據(jù)和代碼到平臺(tái)指定的文件系統(tǒng)路徑下,未來(lái)平臺(tái)會(huì)將網(wǎng)絡(luò)文件系統(tǒng)中的數(shù)據(jù)和代碼掛載到運(yùn)行作業(yè)的機(jī)器上。
3、資源申請(qǐng)量
1)問(wèn)題
用戶提交單GPU、多GPU或分布式作業(yè),平臺(tái)無(wú)法靜態(tài)分析作業(yè)資源需求,如果不明確配置會(huì)導(dǎo)致資源浪費(fèi)或不足。
2)解決方法
用戶明確聲明所需GPU、CPU和內(nèi)存資源,平臺(tái)根據(jù)策略分配匹配的空閑資源。
4、資源隔離
1)問(wèn)題
同一服務(wù)器上運(yùn)行多個(gè)作業(yè)時(shí),如何避免作業(yè)間互相干擾?
2)解決方法
平臺(tái)可以通過(guò)容器cgroup等技術(shù)對(duì)進(jìn)程進(jìn)行資源限定和隔離。
5、任務(wù)部署模式
1)問(wèn)題
對(duì)于分布式作業(yè),如果用戶不說(shuō)明,平臺(tái)無(wú)法知道需要啟動(dòng)的任務(wù)數(shù)。
2)解決方法
用戶明確告知需要啟動(dòng)的任務(wù)數(shù)量,平臺(tái)啟動(dòng)多個(gè)任務(wù)副本進(jìn)行訓(xùn)練。
6、作業(yè)啟動(dòng)命令
1)問(wèn)題
平臺(tái)需要知道作業(yè)的啟動(dòng)命令來(lái)啟動(dòng)和執(zhí)行代碼。
2)解決方法
用戶在作業(yè)中明確描述啟動(dòng)入口命令,啟動(dòng)并執(zhí)行代碼。
二、環(huán)境依賴(lài):鏡像(Image)
當(dāng)用戶在平臺(tái)上執(zhí)行作業(yè)時(shí),首要問(wèn)題是本地環(huán)境與集群環(huán)境差異:
●服務(wù)器沒(méi)有預(yù)裝所需個(gè)性化環(huán)境
●不同作業(yè)需要不同框架、依賴(lài)和版本,安裝繁瑣且重復(fù)
●服務(wù)器上有大量重復(fù)安裝的庫(kù),占用空間
●深度學(xué)習(xí)特有問(wèn)題:需要安裝CUDA、框架等
平臺(tái)需要采用以下技術(shù)方案來(lái)解決:
利用鏡像隔離整體環(huán)境并在之上創(chuàng)建新環(huán)境,以層級(jí)構(gòu)建的方式復(fù)用每一個(gè)層級(jí),此方法既保證個(gè)性化環(huán)境,同時(shí)也確保性能和資源消耗最小。此方法主要依賴(lài)主流平臺(tái)通過(guò)Docker鏡像來(lái)實(shí)現(xiàn),而Docker鏡像則通過(guò)Union文件系統(tǒng)等機(jī)制實(shí)現(xiàn)高效存儲(chǔ)。
Union文件系統(tǒng)聯(lián)合掛載多個(gè)目錄以形成一個(gè)合并的視圖,而Docker則利用此機(jī)制以更高效地存儲(chǔ)文件和包。Docker支持多種Unionfs,例如下一層的AUFS和更上層的OverlayFS。
下面將通過(guò)一個(gè)實(shí)例來(lái)理解和構(gòu)建鏡像以及使用方法。用戶編寫(xiě)的Dockerfile可通過(guò)其中的命令構(gòu)建和打包鏡像,構(gòu)建成功后可上傳到鏡像中心。平臺(tái)在啟動(dòng)作業(yè)時(shí)會(huì)下載鏡像到服務(wù)器,并使用它來(lái)配置作業(yè)環(huán)境。
PyTorch 鏡像文件中包含的依賴(lài)
三、運(yùn)行時(shí)資源隔離:容器
當(dāng)用戶在平臺(tái)上執(zhí)行作業(yè)時(shí),如何避免作業(yè)間的資源爭(zhēng)用干擾,實(shí)現(xiàn)資源隔離:
●集群資源被共享,如何確保作業(yè)進(jìn)程不相互干擾和搶占資源?
●如何讓不同作業(yè)在同一臺(tái)機(jī)器上運(yùn)行在獨(dú)立的命名空間避免沖突?
●如何在保證隔離的同時(shí)使作業(yè)啟動(dòng)越快越好?
●深度學(xué)習(xí)的特殊問(wèn)題:如何隔離GPU的核和內(nèi)存?
●平臺(tái)通常使用容器技術(shù)解決運(yùn)行時(shí)的資源隔離。容器主要通過(guò)兩種機(jī)制實(shí)現(xiàn)資源隔離:
控制組Cgroups:可以控制、統(tǒng)計(jì)和隔離一組進(jìn)程的資源(如CPU、內(nèi)存等)。
命名空間Namespaces:將系統(tǒng)資源包裝在抽象中,使每個(gè)命名空間中的進(jìn)程擁有獨(dú)立的資源,實(shí)現(xiàn)命名空間隔離。
由于深度學(xué)習(xí)目前依賴(lài)GPU進(jìn)行訓(xùn)練,為讓容器支持掛載GPU,GPU廠商通常會(huì)提供針對(duì)Docker的特殊支持。例如NVIDIA提供nvidia-docker。用戶可以參考其文檔進(jìn)行環(huán)境配置。
但由于GPU等加速器虛擬化支持不如CPU成熟,目前主流是以加速器為粒度進(jìn)行掛載和隔離,無(wú)法像CPU那樣進(jìn)行細(xì)粒度的時(shí)分復(fù)用、內(nèi)存隔離和動(dòng)態(tài)遷移。
環(huán)境配置完成后,用戶可以運(yùn)行掛載特定數(shù)量GPU的容器。例如通過(guò)以下NVIDIA Docker命令在容器中掛載2個(gè)GPU:
nvidia-docker run --gpus 2 --rm nvidia/cuda nvidia-smi此命令會(huì)啟動(dòng)一個(gè)容器,并掛載2個(gè)GPU進(jìn)容器,容器內(nèi)可以看到這2個(gè)GPU。
四、從操作系統(tǒng)視角看 GPU 技術(shù)棧
操作系統(tǒng)通常負(fù)責(zé)進(jìn)程的資源管理和多任務(wù)調(diào)度。在計(jì)算機(jī)中,GPU被抽象為設(shè)備,操作系統(tǒng)通過(guò)ioctl系統(tǒng)調(diào)用進(jìn)行設(shè)備控制。有兩種主要思路試圖將GPU技術(shù)納入操作系統(tǒng)的管理,并提供多租戶、虛擬化等功能支持:
1、修改內(nèi)核
將GPU設(shè)備驅(qū)動(dòng)和調(diào)度邏輯集成到內(nèi)核中,通過(guò)擴(kuò)展內(nèi)核實(shí)現(xiàn)GPU的虛擬化和調(diào)度。但這種方法需要修改內(nèi)核,代價(jià)較大。
2、在用戶空間實(shí)現(xiàn)資源管理組件
通過(guò)封裝內(nèi)核接口提供調(diào)度和虛擬化支持。這種方法兼容性較好,也更容易迭代。已經(jīng)有一些相關(guān)工作實(shí)現(xiàn)了用戶級(jí)的GPU虛擬化管理。
將GPU納入操作系統(tǒng)統(tǒng)一資源管理的目的是讓GPU能夠像CPU一樣被多任務(wù)調(diào)度,這是實(shí)現(xiàn)GPU多租戶和自動(dòng)化管理的基礎(chǔ)。
CPU和GPU技術(shù)棧與操作系統(tǒng)抽象
從圖中可以看出,操作系統(tǒng)能夠?yàn)镃PU程序提供大量的系統(tǒng)調(diào)用支持,同時(shí)也能對(duì)各種硬件進(jìn)行抽象管理,并支持用戶的多進(jìn)程與多租戶。然而在GPU程序的情況下,當(dāng)前的模型更像是客戶端與服務(wù)器之間的抽象,GPU被視為一種設(shè)備,CPU程序會(huì)向GPU提交作業(yè)并從其獲取響應(yīng)結(jié)果。然而,操作系統(tǒng)對(duì)GPU本身的操作通常只能通過(guò)有限的交互與控制來(lái)實(shí)現(xiàn),通常使用的交互方式是ioctl。
五、人工智能作業(yè)開(kāi)發(fā)體驗(yàn)(Development Experience)
在使用集群管理系統(tǒng)時(shí),人工智能算法工程師通常會(huì)使用以下工具進(jìn)行人工智能作業(yè)與Python腳本的開(kāi)發(fā):
1、客戶端集成開(kāi)發(fā)環(huán)境(IDE)
這種工具提供完整的開(kāi)發(fā)環(huán)境,可以進(jìn)行Python開(kāi)發(fā)、調(diào)試、語(yǔ)法高亮等功能,例如Visual Studio Code。在人工智能場(chǎng)景下,算法工程師主要使用VS Code進(jìn)行Python程序開(kāi)發(fā)、調(diào)試、語(yǔ)法高亮、智能代碼完成、預(yù)裝代碼片段和版本管理Git的支持。用戶可以根據(jù)自身需求更改主題、鍵盤(pán)快捷鍵、首選項(xiàng),并安裝添加額外功能的擴(kuò)展。
2、一站式人工智能開(kāi)發(fā)插件
Tools for AI當(dāng)前已改名為Visual Studio Code Azure機(jī)器學(xué)習(xí)擴(kuò)展。此工具提供部署到云端或邊緣的支持、常用深度學(xué)習(xí)庫(kù)的支持、本地實(shí)驗(yàn)再部署到大規(guī)模集群、集成自動(dòng)化機(jī)器學(xué)習(xí),以及通過(guò)CI/CD工具跟蹤實(shí)驗(yàn)和管理模型。
3、代碼完成工具
Kite for VS Code適用于VS Code的各種語(yǔ)言,通過(guò)海量代碼庫(kù)訓(xùn)練人工智能模型,提供智能代碼完成服務(wù),包括智能感知、代碼片段和光標(biāo)跟隨的文檔AI代碼完成。Kite支持Python等文件類(lèi)型,代碼補(bǔ)全將大幅提升開(kāi)發(fā)生產(chǎn)力,這也是集成開(kāi)發(fā)環(huán)境的優(yōu)勢(shì)。同時(shí),OpenAI也開(kāi)源了Copilot進(jìn)行常見(jiàn)語(yǔ)言和通用程序的智能化代碼提示和程序合成(Program Synthesis)。使用VS Code等類(lèi)似的客戶端IDE進(jìn)行開(kāi)發(fā)的特點(diǎn)是功能強(qiáng)大,調(diào)試、補(bǔ)全等功能完善。
通過(guò)Web界面提交作業(yè)到集群
開(kāi)發(fā)者在提交作業(yè)到集群之前通常會(huì)經(jīng)歷三個(gè)階段的開(kāi)發(fā)。首先,會(huì)在自己的開(kāi)發(fā)環(huán)境中進(jìn)行編程和測(cè)試,確保程序沒(méi)有錯(cuò)誤后才會(huì)提交到集群平臺(tái)。
Python人工智能程序的編寫(xiě)可以在本地使用VS Code等工具進(jìn)行。VS Code通過(guò)插件方便了本地調(diào)試、代碼靜態(tài)檢測(cè)和代碼完成,這能夠顯著提升開(kāi)發(fā)效率,同時(shí)不需要等待平臺(tái)資源的排隊(duì)。對(duì)于快速開(kāi)發(fā)初始程序,這種方法非常方便。如果本地設(shè)備沒(méi)有GPU,可以考慮安裝CPU版本的深度學(xué)習(xí)框架進(jìn)行開(kāi)發(fā)和測(cè)試。
如果有可用的測(cè)試服務(wù)器掛載有GPU,開(kāi)發(fā)者可以在第二個(gè)階段將作業(yè)提交到測(cè)試服務(wù)器進(jìn)行測(cè)試。對(duì)于小規(guī)模作業(yè),也可以在服務(wù)器上完成一定程度的訓(xùn)練。然而,GPU無(wú)法滿足大規(guī)模多卡和分布式訓(xùn)練,或者搜索空間巨大的超參數(shù)搜索需求。因此,調(diào)試完成的程序可以在測(cè)試服務(wù)器上構(gòu)建Docker鏡像或上傳數(shù)據(jù)等。在此階段,使用VS Code配合Remote SSH插件進(jìn)行遠(yuǎn)程開(kāi)發(fā)比較適合。
當(dāng)用戶確保程序開(kāi)發(fā)完成時(shí),可以將作業(yè)提交到平臺(tái)進(jìn)行批處理作業(yè)的執(zhí)行(用戶可以選擇使用命令行工具、Web或REST API進(jìn)行作業(yè)提交)。由于GPU是稀缺資源,可能會(huì)經(jīng)歷一定的排隊(duì)流程(例如數(shù)小時(shí))。在這種情況下,用戶可以利用閑暇時(shí)間繼續(xù)開(kāi)發(fā)新的作業(yè)或閱讀論文,尋找新的優(yōu)化點(diǎn)或調(diào)試其他作業(yè)和模型。提交作業(yè)后,可以參考下圖的流程,進(jìn)行作業(yè)的完整執(zhí)行。這個(gè)過(guò)程更適合通過(guò)Web訪問(wèn)作業(yè)監(jiān)控界面、SSH登錄到作業(yè)進(jìn)行調(diào)試,或者通過(guò)作業(yè)容器部署啟動(dòng)Jupyter進(jìn)行交互式開(kāi)發(fā)。
人工智能作業(yè)的不同開(kāi)發(fā)環(huán)境
如圖所示,開(kāi)發(fā)者通常會(huì)經(jīng)歷以下三個(gè)階段:本地開(kāi)發(fā)、測(cè)試服務(wù)器開(kāi)發(fā)和打包程序提交到平臺(tái)執(zhí)行。在每個(gè)階段,都會(huì)進(jìn)行相應(yīng)的操作。首先,在本地開(kāi)發(fā)階段,開(kāi)發(fā)者會(huì)在自己的計(jì)算機(jī)上編寫(xiě)和測(cè)試程序。然后,在測(cè)試服務(wù)器開(kāi)發(fā)階段,會(huì)對(duì)程序進(jìn)行更嚴(yán)格的測(cè)試,以確保其能夠在生產(chǎn)環(huán)境中正常運(yùn)行。最后,在打包程序提交到平臺(tái)執(zhí)行階段,開(kāi)發(fā)者會(huì)將程序打包并提交到集群管理系統(tǒng)進(jìn)行批處理。在執(zhí)行作業(yè)的過(guò)程中,開(kāi)發(fā)者需要監(jiān)控作業(yè)狀態(tài)并進(jìn)行調(diào)試,以確保程序能夠順利執(zhí)行并返回正確的結(jié)果。根據(jù)訓(xùn)練結(jié)果,開(kāi)發(fā)者可以調(diào)整和優(yōu)化程序,然后開(kāi)始下一次的作業(yè)提交。
人工智能作業(yè)開(kāi)發(fā)體驗(yàn)時(shí)序圖
如下圖所示,當(dāng)作業(yè)已經(jīng)調(diào)試完成,用戶會(huì)經(jīng)歷以下的步驟與平臺(tái)交互完成訓(xùn)練過(guò)程:
●用戶首先上傳數(shù)據(jù)到存儲(chǔ)
●上傳鏡像到鏡像中心
●提交作業(yè)規(guī)格。填寫(xiě)數(shù)據(jù),鏡像路徑,資源需求和啟動(dòng)命令行
●集群調(diào)度器調(diào)度作業(yè)
●空閑 GPU 節(jié)點(diǎn)拉?。≒ull)鏡像
●空閑 GPU 節(jié)點(diǎn)啟動(dòng)作業(yè)
●掛載文件系統(tǒng)
●作業(yè)運(yùn)行啟動(dòng)
●作業(yè)監(jiān)控不斷匯報(bào)性能指標(biāo)和日志用于觀測(cè)與調(diào)試
●訓(xùn)練完成作業(yè)保存結(jié)果
提交到集群的作業(yè)生命周期
調(diào)度
平臺(tái)調(diào)度器
在作業(yè)進(jìn)程啟動(dòng)之前,平臺(tái)需要進(jìn)行決策,確定當(dāng)前作業(yè)應(yīng)該在哪些服務(wù)器和GPU上運(yùn)行,以及哪個(gè)作業(yè)可以?xún)?yōu)先執(zhí)行,進(jìn)而進(jìn)行調(diào)度決策。下面將圍繞調(diào)度問(wèn)題的抽象和優(yōu)化目標(biāo),以及可用于深度學(xué)習(xí)作業(yè)調(diào)度的傳統(tǒng)調(diào)度算法進(jìn)行介紹,了解作業(yè)調(diào)度的經(jīng)典問(wèn)題和解決方法。
一、調(diào)度問(wèn)題優(yōu)化目標(biāo)
調(diào)度是分配資源以執(zhí)行任務(wù)的過(guò)程。在深度學(xué)習(xí)平臺(tái)中,資源包括處理器、GPU、內(nèi)存等,而任務(wù)則是用戶提交的作業(yè)。調(diào)度活動(dòng)由稱(chēng)為調(diào)度器的進(jìn)程執(zhí)行。調(diào)度器的算法通常旨在使所有計(jì)算機(jī)資源保持忙碌,讓多個(gè)用戶高效地共享系統(tǒng)資源實(shí)現(xiàn)目標(biāo)服務(wù)質(zhì)量。
在運(yùn)行深度學(xué)習(xí)作業(yè)的集群服務(wù)器上,會(huì)部署一個(gè)操作系統(tǒng)進(jìn)行作業(yè)管理與調(diào)度,即異構(gòu)資源管理系統(tǒng)也稱(chēng)作深度學(xué)習(xí)平臺(tái)。該系統(tǒng)不同于傳統(tǒng)操作系統(tǒng),其特點(diǎn)是運(yùn)行的“進(jìn)程”一般為深度學(xué)習(xí)作業(yè)。
每臺(tái)服務(wù)器掛載多塊商用 GPU,InfiniBand 網(wǎng)卡等異構(gòu)硬件。深度學(xué)習(xí)平臺(tái)也要在整體上對(duì)作業(yè)提供所管理的硬件的“一定抽象層次”上的多路復(fù)用。同時(shí),由于整個(gè)系統(tǒng)不僅一個(gè)用戶會(huì)提交多個(gè)作業(yè),整個(gè)資源池被多個(gè)公司內(nèi)部組和用戶共享,這就是多租(Multi-Tenancy)系統(tǒng)。
1、作業(yè)延遲與吞吐相關(guān)指標(biāo)
1)排隊(duì)延遲
描述作業(yè)在調(diào)度器隊(duì)列中等待資源分配所花費(fèi)的時(shí)間。排隊(duì)延遲越低,代表用戶作業(yè)需要等待的時(shí)間越短越高效。其主要受兩個(gè)因素影響:
●公平性
用戶作業(yè)是否能夠公平地分配到所需的資源
●局部性和資源碎片化問(wèn)題
可能導(dǎo)致資源無(wú)法分配和等待
2)平均響應(yīng)時(shí)間
從提交請(qǐng)求到產(chǎn)生第一個(gè)響應(yīng)的時(shí)間量的平均值。
3)平均作業(yè)完成時(shí)間
一批作業(yè)的平均完成時(shí)間(該指標(biāo)能夠代表系統(tǒng)性能)。如考慮分布式作業(yè)的局部性,影響通信時(shí)間,進(jìn)而影響平均作業(yè)完成時(shí)間。
4)完工時(shí)間
一批作業(yè)中,第一個(gè)作業(yè)到最后一個(gè)作業(yè)整體完成時(shí)間(時(shí)間越小越好)。有些調(diào)度算法也考慮所有作業(yè)的整體完工時(shí)間作為優(yōu)化目標(biāo),因?yàn)樽钚』旯r(shí)間等價(jià)于最大化資源效率。
5)吞吐
單位時(shí)間能完成的作業(yè)數(shù)量(吞吐量越大越好)。
2、平臺(tái)資源利用率相關(guān)指標(biāo)
1)資源利用率
描述用于作業(yè)的資源占總資源的百分比(利用率越高越好)。
2)資源碎片
作業(yè)分配后造成個(gè)別節(jié)點(diǎn)資源無(wú)法被再分配,產(chǎn)生碎片問(wèn)題。碎片越少,代表資源浪費(fèi)越少。也是和資源利用率相關(guān)的指標(biāo)。
3、公平與服務(wù)水平相關(guān)指標(biāo)
1)公平性
資源使用在平臺(tái)用戶或組之間平均或按指定配額比例分配。
2)服務(wù)水平協(xié)議
服務(wù)級(jí)別協(xié)議是平臺(tái)和用戶之間的承諾。如平臺(tái)服務(wù)的公平性、質(zhì)量、可用性、責(zé)任等在平臺(tái)和用戶之間進(jìn)行約定和達(dá)成一致。
如下圖所示,平臺(tái)中包含以下集群與作業(yè)的包含層級(jí)關(guān)系,不同層次中蘊(yùn)含不同的調(diào)度問(wèn)題,可以將之后涉及的面向深度學(xué)習(xí)調(diào)度算法也映射到其中的層級(jí)問(wèn)題的解決方法。
平臺(tái)中的作業(yè)調(diào)度問(wèn)題總覽
二、單作業(yè)調(diào)度—群調(diào)度
群調(diào)度是一種在并行系統(tǒng)中使用的調(diào)度算法,用于調(diào)度相關(guān)的線程或進(jìn)程在不同的處理器上同時(shí)啟動(dòng)和運(yùn)行。深度學(xué)習(xí)作業(yè)通常需要群調(diào)度,以確保所有必需的加速設(shè)備都準(zhǔn)備好后才開(kāi)始訓(xùn)練過(guò)程。如果沒(méi)有使用群調(diào)度,可能會(huì)導(dǎo)致問(wèn)題的出現(xiàn)。因?yàn)樯疃葘W(xué)習(xí)作業(yè)通常需要同時(shí)執(zhí)行多個(gè)任務(wù),如果有依賴(lài)任務(wù)沒(méi)有啟動(dòng),已啟動(dòng)的任務(wù)可能會(huì)在等待同步點(diǎn)或頻繁切換上下文而無(wú)法繼續(xù)運(yùn)行,進(jìn)而導(dǎo)致訓(xùn)練任務(wù)無(wú)法進(jìn)行。
同時(shí),已啟動(dòng)的任務(wù)如果不釋放資源,可能會(huì)導(dǎo)致資源的浪費(fèi),產(chǎn)生死鎖現(xiàn)象。如下圖所示,兩個(gè)作業(yè)都申請(qǐng)了部分資源,但還需要其他資源才能啟動(dòng),這就產(chǎn)生了死鎖現(xiàn)象。
并行啟動(dòng)執(zhí)行作業(yè)可能產(chǎn)生的問(wèn)題
通過(guò)利用群調(diào)度技術(shù),可以同時(shí)啟動(dòng)深度學(xué)習(xí)任務(wù)進(jìn)程,以解決之前提到的例子中的問(wèn)題。如下圖所示,可以讓作業(yè)A、B和C交替執(zhí)行,以確保所有任務(wù)能夠順利完成。這種方式讓已啟動(dòng)的任務(wù)能夠繼續(xù)運(yùn)行,而不會(huì)因等待其他未啟動(dòng)的任務(wù)而造成訓(xùn)練中斷或資源浪費(fèi)。
并行執(zhí)行作業(yè)可能產(chǎn)生的問(wèn)題
當(dāng)然群調(diào)度也存在一定的局限性。比如可能會(huì)增加資源碎片化的風(fēng)險(xiǎn),并且在共享集群中的利用率較低。如圖中的t1和t2時(shí)間段,GPU 7和8就處于空閑狀態(tài),造成了資源浪費(fèi)。
三、作業(yè)間調(diào)度—主導(dǎo)資源公平 DRF(Dominant Resource Fairness)調(diào)度
在包含多種異構(gòu)資源的系統(tǒng)中,實(shí)現(xiàn)多作業(yè)公平的資源調(diào)度是一項(xiàng)挑戰(zhàn)。深度學(xué)習(xí)作業(yè)需要使用CPU、GPU和內(nèi)存等多種資源,因此需要一種考慮多種資源的公平調(diào)度策略。DRF(Dominant Resource Fairness)是一種用于多資源公平調(diào)度的算法,通過(guò)使用主導(dǎo)份額的概念來(lái)比較多種資源的分配。
與其他策略不同,DRF滿足幾個(gè)理想的屬性。首先,鼓勵(lì)用戶共享資源,從而保證公平性。其次,DRF是防策略的,即用戶沒(méi)有動(dòng)力通過(guò)謊報(bào)需求來(lái)增加作業(yè)資源的分配。用戶基于最大最小公平,謊報(bào)更多的資源則需要更多的排隊(duì)時(shí)間。同時(shí),DRF是無(wú)嫉妒的,即用戶不羨慕其他用戶的分配。最后,DRF分配是帕累托有效的,即不可能在不損害某些人利益的前提下使另一些人獲益。
DRF調(diào)度策略的簡(jiǎn)要總結(jié)是:通過(guò)同類(lèi)型資源在集群整體資源中的份額確定主導(dǎo)資源?;谧畲笞钚」降尼槍?duì)多資源類(lèi)型(例如GPU、CPU)的調(diào)度算法。
2個(gè)作業(yè)的DRF調(diào)度實(shí)例
以下的資源申請(qǐng)需求中,主導(dǎo)資源是內(nèi)存。
以下的資源申請(qǐng)需求中,主導(dǎo)資源是GPU。
四、組間作業(yè)調(diào)度—容量調(diào)度(Capacity Scheduling)
除能夠公平地分配多個(gè)作業(yè)外,平臺(tái)管理員還需要考慮如何讓多個(gè)小組共享集群,以及如何為多個(gè)組織共享集群資源。在共享集群資源的同時(shí),還需要為每個(gè)組織提供最小容量保證,以確保能夠獲得所需的資源??臻e資源應(yīng)該能夠彈性地供其他組織利用,以提高資源利用率和減少資源浪費(fèi)。
相比傳統(tǒng)容量調(diào)度調(diào)度,深度學(xué)習(xí)作業(yè)也需要考慮調(diào)度 GPU 及 GPU 顯存容量。Capacity Scheduler是大數(shù)據(jù)平臺(tái)中常用的主流調(diào)度器,可以將深度學(xué)習(xí)訓(xùn)練作業(yè)和大數(shù)據(jù)作業(yè)都視為批處理作業(yè)。允許多個(gè)租戶安全地共享一個(gè)大型集群,并在分配容量的限制下及時(shí)為應(yīng)用程序分配資源。
以下圖為例,Team A、B、C共享集群,每個(gè)組都有多個(gè)用戶,每個(gè)用戶都會(huì)提交作業(yè)使用集群資源。如果不考慮組間公平性,Team A即使再申請(qǐng)45的資源,如果沒(méi)有使用完畢也會(huì)造成浪費(fèi),同時(shí)也會(huì)讓Team C無(wú)法申請(qǐng)資源,產(chǎn)生饑餓現(xiàn)象。
資源占用過(guò)多造成其他組無(wú)法分配資源問(wèn)題
所以,容量調(diào)度為支持多租(Multi-Tenant)資源共享設(shè)計(jì)了以下的策略集合:
1、提高利用率(Utilization)
1)虛擬集群(Virtual Cluster)組能夠看到的是虛擬資源視圖,并不綁定具體機(jī)器,作業(yè)啟動(dòng)后才會(huì)分配相應(yīng)的資源,這樣有助于提高資源利用率。
2)層級(jí)隊(duì)列(Hierarchical Queues)支持隊(duì)列的分層結(jié)構(gòu),以確保在允許其他隊(duì)列使用空閑資源之前,在組織的子隊(duì)列之間共享資源,從而提供更多的控制和可預(yù)測(cè)性。
3)隊(duì)列內(nèi)可以正交組合其他作業(yè)間調(diào)度算法,如先進(jìn)先出(FIFO),DRF等。在異構(gòu)計(jì)算場(chǎng)景中,仍然可以采用適合多維資源調(diào)度的其他自定義調(diào)度器。
2、多租與提升公平性(Fairness)
1)從某種意義上說(shuō),隊(duì)列將分配到網(wǎng)格容量的一小部分,因?yàn)樗鼈兛梢允褂靡欢ㄈ萘康馁Y源。提交到隊(duì)列的所有應(yīng)用程序都可以訪問(wèn)分配給隊(duì)列的容量。管理員可以對(duì)分配給每個(gè)隊(duì)列的容量配置軟限制和可選的硬限制。
2)允許多用戶以多租形式使用集群??刂茊斡脩舻目梢韵牡淖畲筚Y源,防止其占用過(guò)多資源,導(dǎo)致其他進(jìn)程無(wú)法申請(qǐng)資源。
3、彈性和SLA
1)獎(jiǎng)勵(lì)資源(Bonus Resource)
對(duì)于其他組沒(méi)有使用的資源,可以臨時(shí)免費(fèi)出讓給有需要的團(tuán)隊(duì),但當(dāng)資源持有者需要時(shí),則需要搶占資源歸還給持有者。
2)搶占(Preemption)配合獎(jiǎng)勵(lì)資源使用,保證對(duì)用戶提供的服務(wù)等級(jí)協(xié)議(SLA)
如下圖所示,當(dāng)管理員配置最小和最大的組使用資源限額,這樣能夠確保組與組之間都有可用的資源。
容量調(diào)度
五、虛擬集群(Virtual Cluster)機(jī)制
在集群內(nèi),組和用戶所看到的的資源配額一般情況下,并沒(méi)有綁定到具體的物理機(jī)器,而是在調(diào)度后決定作業(yè)部署的物理機(jī)器。這背后是通過(guò)虛擬集群 (Virtual Cluster) 映射所實(shí)現(xiàn)的。而虛擬集群和之前介紹的控制組(Cgroups)的設(shè)計(jì)較為類(lèi)似。在此會(huì)看到很多集群產(chǎn)生的問(wèn)題,在傳統(tǒng)的操作系統(tǒng)中都能找到類(lèi)似的設(shè)計(jì)問(wèn)題與原則。
如下圖所示,虛擬集群會(huì)配置用戶組的配額和視圖,物理集群是在調(diào)度后在運(yùn)行時(shí)綁定的。這樣可以大幅提升資源利用率,減少資源碎片。
虛擬集群和物理集群映射與綁定
六、搶占式調(diào)度
一些集群管理員希望通過(guò)策略共享虛擬集群內(nèi)的空閑資源,以減少組內(nèi)資源的浪費(fèi),但單純出讓資源并不能保證原有用戶能夠隨時(shí)回收對(duì)應(yīng)的配額資源,從而無(wú)法保證對(duì)原用戶的SLA(服務(wù)等級(jí)協(xié)議)。這個(gè)問(wèn)題可以通過(guò)搶占調(diào)度來(lái)解決,也就是當(dāng)資源的原有用戶需要資源時(shí),終止使用獎(jiǎng)勵(lì)資源的作業(yè)進(jìn)程,回收資源給原配額用戶。搶占調(diào)度通常用于以下場(chǎng)景:
1、讓資源饑餓的作業(yè)或短作業(yè)搶占一定資源,以降低作業(yè)的平均響應(yīng)時(shí)間
由于深度學(xué)習(xí)作業(yè)的韌性并不完善,因此一般不會(huì)為此類(lèi)需求使用搶占調(diào)度。如下圖所示,APP2長(zhǎng)時(shí)間無(wú)法得到資源,就無(wú)法執(zhí)行,而其執(zhí)行時(shí)間實(shí)際上很短。這就需要通過(guò)搶占機(jī)制進(jìn)行調(diào)度,讓APP2獲取一定資源執(zhí)行,以保證降低平均響應(yīng)時(shí)間。
作業(yè)等待時(shí)間過(guò)長(zhǎng)問(wèn)題
2、出讓虛擬集群的空閑資源形成獎(jiǎng)勵(lì)資源,供其他虛擬集群中的作業(yè)使用,從而提高整體資源利用率。
在深度學(xué)習(xí)中,通常出于這個(gè)原因使用搶占調(diào)度。如下圖所示,A隊(duì)列中配置10個(gè)可用資源,但由于集群有空閑資源,多提供20個(gè)獎(jiǎng)勵(lì)資源給C6和C7。此時(shí),如果C隊(duì)列需要使用20個(gè)資源,集群應(yīng)該保證能夠觸發(fā)搶占。當(dāng)APP1的C6和C7使用的資源被標(biāo)記為可以被搶占后,其資源可以通過(guò)以下步驟被搶占:
1)從過(guò)度使用的隊(duì)列中獲取需要被搶占的容器(即隊(duì)列A的C6和C7)。
2)通知作業(yè)(即隊(duì)列A)控制器即將觸發(fā)搶占。
3)等待直到被搶占作業(yè)運(yùn)行終止。
搶占強(qiáng)度
搶占式調(diào)度對(duì)深度學(xué)習(xí)作業(yè)帶來(lái)挑戰(zhàn),因?yàn)樯疃葘W(xué)習(xí)作業(yè)在被搶占時(shí)只能失敗,而在默認(rèn)情況下無(wú)法像傳統(tǒng)操作系統(tǒng)一樣進(jìn)行上下文切換。目前有些工作通過(guò)提供框架或設(shè)備驅(qū)動(dòng)庫(kù)層的檢查點(diǎn)機(jī)制,配合調(diào)度器實(shí)現(xiàn)搶占與恢復(fù),但由于并非原生支持,因此存在一定的開(kāi)銷(xiāo),且支持的框架與場(chǎng)景有限,尚未得到廣泛應(yīng)用。未來(lái)可以設(shè)計(jì)更好的深度學(xué)習(xí)檢查點(diǎn)和恢復(fù)技術(shù),以減少搶占后作業(yè)失效造成的被強(qiáng)占作業(yè)資源無(wú)效使用的問(wèn)題。
數(shù)據(jù)進(jìn)行模擬,看能否提升當(dāng)前目標(biāo)并超越基準(zhǔn)算法。最后,對(duì)結(jié)果進(jìn)行分析,并形成分析報(bào)告或論文。
面向深度學(xué)習(xí)的集群管理系統(tǒng)
下面將介紹針對(duì)深度學(xué)習(xí)負(fù)載和GPU服務(wù)器特點(diǎn)而設(shè)計(jì)的平臺(tái)調(diào)度算法,以更好地滿足新負(fù)載和硬件的需求,并提高資源利用率等指標(biāo)。
一、深度學(xué)習(xí)工作負(fù)載的需求
1、深度學(xué)習(xí)訓(xùn)練作業(yè) vs. 傳統(tǒng)的數(shù)據(jù)中心批處理作業(yè)
1)執(zhí)行時(shí)間長(zhǎng)
訓(xùn)練時(shí)間持續(xù)數(shù)小時(shí)甚至幾天
2)迭代計(jì)算
作業(yè)主干部分是迭代的計(jì)算,每輪迭代可以切分為小時(shí)間窗口的任務(wù)
3)內(nèi)存數(shù)據(jù)量動(dòng)態(tài)變化
在訓(xùn)練過(guò)程中不同的時(shí)間點(diǎn)做檢查點(diǎn)有不同的內(nèi)存數(shù)據(jù)量
4)性能可預(yù)測(cè)性
資源消耗可預(yù)測(cè)性,可以通過(guò)運(yùn)行時(shí)監(jiān)控獲取
2、分布式深度學(xué)習(xí)訓(xùn)練作業(yè)的特點(diǎn)
1)對(duì)GPU拓?fù)浣Y(jié)構(gòu)敏感
數(shù)據(jù)并行策略通信傳遞梯度,模型并行策略通信傳遞中間結(jié)果張量,GPU與GPU之間傳輸帶寬容易形成瓶頸。所以考慮GPU親和性的任務(wù)放置策略,對(duì)降低分布式訓(xùn)練作業(yè)的完工時(shí)間有幫助。
2)反饋驅(qū)動(dòng)探索
在自動(dòng)化機(jī)器學(xué)習(xí)場(chǎng)景下,用戶會(huì)一次性提交大量的深度學(xué)習(xí)作業(yè)。這些作業(yè)的特點(diǎn)是反饋驅(qū)動(dòng)探索。用戶通常會(huì)嘗試多個(gè)作業(yè)配置(多項(xiàng)工作),并利用這些工作的早期反饋(準(zhǔn)確度,誤差等)來(lái)決定是否優(yōu)先考慮或終止其中的某些作業(yè)。
根據(jù)深度學(xué)習(xí)作業(yè)的特性和硬件體系結(jié)構(gòu),軟件棧和硬件棧的支持可以協(xié)同設(shè)計(jì)面向深度學(xué)習(xí)的作業(yè)調(diào)度策略,以提升資源利用率等指標(biāo)。
二、異構(gòu)硬件的多樣性
深度學(xué)習(xí)作業(yè)訓(xùn)練時(shí)主要的計(jì)算單元是GPU,而用于這種計(jì)算的服務(wù)器通常會(huì)掛載多塊GPU。這種硬件體系結(jié)構(gòu)在某些方面與傳統(tǒng)的數(shù)據(jù)中心作業(yè)使用的服務(wù)器有所不同,因此也帶來(lái)了一些挑戰(zhàn)。
1、通信代價(jià)
由于多塊GPU之間的互聯(lián)方式多樣,不同的放置方式可能會(huì)受到GPU拓?fù)浣Y(jié)構(gòu)的影響,進(jìn)而影響數(shù)據(jù)通信的代價(jià)和性能。GPU根據(jù)一定的拓?fù)浣Y(jié)構(gòu)掛載在PCIe總線或交換機(jī)上,因此GPU與GPU之間的通信可能會(huì)在節(jié)點(diǎn)內(nèi)跨越PCIe、PCIe交換機(jī),或者在節(jié)點(diǎn)之間跨越InfiniBand或以太網(wǎng)。
2、資源爭(zhēng)用
由于作業(yè)本身可能會(huì)與其他作業(yè)共享服務(wù)器、數(shù)據(jù)總線等資源,因此也會(huì)受到來(lái)自其他作業(yè)的爭(zhēng)用和干擾。GPU拓?fù)浣Y(jié)構(gòu)與任務(wù)的放置方式會(huì)影響多卡與分布式作業(yè)的訓(xùn)練性能。因此,可以考慮啟發(fā)優(yōu)化策略,即根據(jù)集群和服務(wù)器節(jié)點(diǎn)的GPU拓?fù)浣Y(jié)構(gòu)的親和性來(lái)調(diào)度任務(wù)。
三、深度學(xué)習(xí)平臺(tái)的管理與運(yùn)維需求
深度學(xué)習(xí)平臺(tái)需要對(duì)上管理深度學(xué)習(xí)模型訓(xùn)練作業(yè),對(duì)下管理以GPU和InfiniBand為代表的異構(gòu)硬件,平臺(tái)管理與運(yùn)維也面臨一些挑戰(zhàn)。相比機(jī)器學(xué)習(xí)工程師、數(shù)據(jù)科學(xué)家等使用平臺(tái)的用戶,深度學(xué)習(xí)平臺(tái)管理員更加關(guān)注以下的設(shè)計(jì)目標(biāo):
1、效率
GPU集群價(jià)格昂貴,更新?lián)Q代頻繁,如何有效地規(guī)劃集群,提升投入產(chǎn)出比,以及如何在現(xiàn)有集群中減少資源碎片,提升利用率,是平臺(tái)管理員面臨的重要挑戰(zhàn)。調(diào)度算法在一定程度上能夠優(yōu)化和提升集群的資源利用率。
2、公平性
使用深度學(xué)習(xí)平臺(tái)的用戶既有工程目的,也有很多是科研目的。在訓(xùn)練生產(chǎn)模型的同時(shí),也有一些是研究投稿、趕論文截止的需求。這使得相比傳統(tǒng)批處理調(diào)度場(chǎng)景,用戶有類(lèi)似特定時(shí)段的峰值資源使用需求。平臺(tái)需要保證各組資源使用的公平性,同時(shí)提前規(guī)劃好用戶的資源使用,同時(shí)兼顧峰值利用需求,需要管理員設(shè)計(jì)好相應(yīng)的策略。
3、穩(wěn)定性
1)由于深度學(xué)習(xí)框架的設(shè)計(jì)者在初始沒(méi)有像大數(shù)據(jù)社區(qū)一樣把容錯(cuò)當(dāng)成第一要義,框架提供基礎(chǔ)的檢查點(diǎn)機(jī)制,但是需要用戶控制,沒(méi)有自動(dòng)備份與恢復(fù)的支持,在之后的設(shè)計(jì)版本和社區(qū)工具中才有彈性等功能的支持。這給底層平臺(tái)帶來(lái)比較大的運(yùn)維負(fù)擔(dān)。
2)由于節(jié)點(diǎn)上的異構(gòu)硬件也有一定概率產(chǎn)生硬件問(wèn)題,例如GPU故障,造成平臺(tái)穩(wěn)定性的挑戰(zhàn)。如何高效、敏捷地發(fā)現(xiàn)和修復(fù)故障,除了工具的支持,還需要系統(tǒng)化的系統(tǒng)設(shè)計(jì)、開(kāi)發(fā)流程設(shè)計(jì)與管理策略設(shè)計(jì)共同作用。
4、可維護(hù)性
平臺(tái)團(tuán)隊(duì)同時(shí)在開(kāi)發(fā)和運(yùn)維平臺(tái),可維護(hù)性也是平時(shí)減少運(yùn)維負(fù)擔(dān)的一個(gè)重要考慮的因素。通過(guò)微服務(wù)等手段將功能模塊盡可能地拆分,能夠讓故障的定位與修復(fù)最小化,同時(shí)良好的DevOps流程搭建、敏捷的開(kāi)發(fā)與項(xiàng)目管理也為平臺(tái)的可維護(hù)性提升起到關(guān)鍵的作用。
5、用戶體驗(yàn)
用戶體驗(yàn)良好并統(tǒng)一的作業(yè)提交、作業(yè)管理與調(diào)試工具,能大幅提升用戶的開(kāi)發(fā)生產(chǎn)力,同時(shí)也能減輕平臺(tái)運(yùn)維工程師的負(fù)擔(dān)。
除以上指標(biāo),平臺(tái)也會(huì)關(guān)注性能(吞吐、完工時(shí)間等)指標(biāo)。平臺(tái)本身模塊眾多,涉及的外部交互的軟硬件多樣,使用和維護(hù)的用戶也很多,所以其面對(duì)的問(wèn)題場(chǎng)景較為復(fù)雜。作為平臺(tái)設(shè)計(jì)者和使用者需要全面考慮,性能只是其中的一個(gè)環(huán)節(jié),還要以系統(tǒng)化的視角去設(shè)計(jì)和管理整個(gè)異構(gòu)資源,為上層應(yīng)用負(fù)載與用戶提供更加透明與便捷的用戶體驗(yàn)。
四、深度學(xué)習(xí)負(fù)載與異構(gòu)硬件下的調(diào)度設(shè)計(jì)
下面將從深度學(xué)習(xí)平臺(tái)的調(diào)度算法入手,介紹考慮不同設(shè)計(jì)目標(biāo)和側(cè)重點(diǎn)的調(diào)度算法設(shè)計(jì)。這些調(diào)度器由于設(shè)計(jì)目標(biāo)不同,所基于的假設(shè)也不同,同時(shí)實(shí)現(xiàn)和對(duì)作業(yè)的入侵性也不同。因此,在選用和設(shè)計(jì)調(diào)度器時(shí),需要考慮不同算法的優(yōu)劣勢(shì)并根據(jù)平臺(tái)現(xiàn)狀酌情選擇。
1、框架與平臺(tái)協(xié)同設(shè)計(jì)的調(diào)度器設(shè)計(jì)
1)反應(yīng)模式(Reactive Mode)
類(lèi)似于傳統(tǒng)調(diào)度器的事件驅(qū)動(dòng)設(shè)計(jì),根據(jù)不同的事件和狀態(tài)(如作業(yè)到達(dá)、離開(kāi)、失效)觸發(fā)調(diào)度策略??梢詫⑵湔w策略抽象為一個(gè)狀態(tài)機(jī)。
分布式作業(yè)調(diào)度受局部性影響
通過(guò)圖表可以看到,將同樣需要2塊GPU卡的作業(yè)分別調(diào)度在相同PCIe交換機(jī)、跨交換機(jī)和跨節(jié)點(diǎn)下進(jìn)行部署運(yùn)行,會(huì)產(chǎn)生40%~5x的降速。因此,對(duì)于多卡作業(yè),考慮部署的局部性,通過(guò)親和性調(diào)度可以讓作業(yè)執(zhí)行更快,節(jié)省更多的資源執(zhí)行其他作業(yè),從而對(duì)整體完工時(shí)間有益,并提升資源利用率。
當(dāng)觸發(fā)調(diào)度時(shí),該調(diào)度策略?xún)?yōu)先考慮親和性,在調(diào)度過(guò)程中按照以下優(yōu)先級(jí)考慮和排序節(jié)點(diǎn)進(jìn)行作業(yè)分配,以減少深度學(xué)習(xí)作業(yè)的數(shù)據(jù)I/O開(kāi)銷(xiāo)并提升性能。其優(yōu)先考慮的待分配節(jié)點(diǎn)優(yōu)先級(jí)為:
●擁有相同親和性的節(jié)點(diǎn)。
●還未標(biāo)注親和性的節(jié)點(diǎn)。
●有不同親和性的節(jié)點(diǎn)。
●進(jìn)行超額訂閱,在有相同親和性的節(jié)點(diǎn)暫停和恢復(fù)其他作業(yè)。
●不滿足以上條件,則作業(yè)排隊(duì)等待。
以圖為例,調(diào)度器將需要1個(gè)GPU的作業(yè)放在一起,但需要2或4個(gè)GPU的作業(yè)放置在不同的服務(wù)器上。此外,通過(guò)選擇負(fù)載最小的服務(wù)器,試圖平衡每臺(tái)服務(wù)器上的超額訂閱負(fù)載,以防止1個(gè)GPU需求作業(yè)的服務(wù)器中各有6個(gè)1個(gè)GPU需求的作業(yè)。
16 塊 GPU 集群中,Gandiva 調(diào)度實(shí)例
2)內(nèi)省模式(Introspective Mode)
應(yīng)用于作業(yè)執(zhí)行后,持續(xù)監(jiān)控并定期優(yōu)化當(dāng)前作業(yè)的放置(Placement),同時(shí)通過(guò)擴(kuò)展框架支持細(xì)粒度的檢查點(diǎn)和恢復(fù)功能,為后續(xù)備份與遷移策略提供基礎(chǔ)原語(yǔ)的支持。通過(guò)不斷監(jiān)控作業(yè)利用率和節(jié)點(diǎn)資源利用率,進(jìn)行作業(yè)的裝箱(Bin Packing)、遷移(Migration)、增長(zhǎng)收縮(Grow-Shrink)、超額訂閱和時(shí)間切片(Time Slicing),進(jìn)而提升整體資源利用率,降低作業(yè)的完工時(shí)間(Makespan)。
裝箱(Bin Pack)是指在保證GPU顯存約束的情況下,根據(jù)浮點(diǎn)運(yùn)算量,將更多的作業(yè)裝箱到相同GPU,提升資源利用率。時(shí)分復(fù)用(Time Slicing)則是利用框架層或底層實(shí)現(xiàn)的檢查點(diǎn)和恢復(fù)機(jī)制,多個(gè)作業(yè)可以通過(guò)時(shí)分復(fù)用,共享單塊GPU。這可以類(lèi)比于一種粗粒度的進(jìn)程上下文切換(Context Switching)機(jī)制。
遷移(Migration)則是利用框架層或底層實(shí)現(xiàn)的檢查點(diǎn)和恢復(fù)機(jī)制,當(dāng)有空閑資源或獎(jiǎng)勵(lì)資源時(shí),動(dòng)態(tài)遷移作業(yè)使用獎(jiǎng)勵(lì)資源,加速訓(xùn)練。當(dāng)作業(yè)需要被搶占以歸還資源時(shí),遷移作業(yè)保證作業(yè)之前的訓(xùn)練不失效。
上圖展示了一個(gè)集群實(shí)驗(yàn)的示例。在多作業(yè)調(diào)度的場(chǎng)景中,有4個(gè)需要2塊GPU的作業(yè),這些作業(yè)都已經(jīng)調(diào)度,但其中3個(gè)作業(yè)沒(méi)有好的親和性(J1、J2和J3),只有J0的GPU被打包分配到了相同的節(jié)點(diǎn)。3分鐘后,一個(gè)使用DeepSpeed框架訓(xùn)練的作業(yè)訓(xùn)練完成并釋放8塊GPU,其中3塊在圖中以綠色圓圈表示,并分布在不同服務(wù)器。這三塊GPU有潛力提升當(dāng)前多個(gè)作業(yè)的訓(xùn)練效率。
調(diào)度器啟動(dòng)遷移流程,重新分配J1、J2和J3到放置在一起的GPU。為減少碎片,選擇將空閑GPU最多的服務(wù)器上的作業(yè)進(jìn)行遷移。然后開(kāi)始遷移正在運(yùn)行的作業(yè)從當(dāng)前服務(wù)器(空閑GPU更多的)到另一個(gè)服務(wù)器(空閑GPU更少的),以便同作業(yè)的任務(wù)可以在同一臺(tái)服務(wù)器的GPU上執(zhí)行。
Gandiva不斷重復(fù)這個(gè)過(guò)程,直到非空閑服務(wù)器上的空閑GPU數(shù)量小于一定閾值(實(shí)驗(yàn)中使用3/4作為閾值),或者直到?jīng)]有作業(yè)能夠受益于作業(yè)遷移。
共享資源集群中,Gandiva 進(jìn)行作業(yè)遷移實(shí)例
2、面向特定場(chǎng)景問(wèn)題(多租)的調(diào)度器設(shè)計(jì)
排隊(duì)延遲問(wèn)題
上圖展示兩個(gè)月內(nèi)的日志數(shù)據(jù),涉及一個(gè)擁有2232個(gè)GPU的集群,11個(gè)租戶,私有集群,共享多租集群,以及HiveD優(yōu)化后的共享多租集群情況。其中,紅色線條顯示了由于多租環(huán)境下的要求,作業(yè)需要滿足節(jié)點(diǎn)親和性硬約束(盡可能將作業(yè)調(diào)度到通信距離更近的節(jié)點(diǎn)),導(dǎo)致平均有7倍的延遲。HiveD OSDI 提出,如果調(diào)度深度學(xué)習(xí)作業(yè)時(shí)同時(shí)考慮多租環(huán)境和GPU親和性,會(huì)盡可能將親和性高的資源整體分配給作業(yè),這會(huì)導(dǎo)致集群調(diào)度容易出現(xiàn)排隊(duì)延遲較高的異常。
HiveD通過(guò)設(shè)計(jì)多級(jí)單元格(Cell)結(jié)構(gòu),并采用伙伴單元格分配(Buddy Cell Allocation)算法,以確保在滿足上述約束的前提下,資源能夠高效分配,降低排隊(duì)時(shí)間和資源碎片化。同時(shí),HiveD能夠與其他調(diào)度器兼容集成使用。
下圖展示了四個(gè)級(jí)別的單元格結(jié)構(gòu):GPU(Level-1)、PCIe交換機(jī)(Switch)(Level-2)、CPU套接字(Socket)(Level-3)和節(jié)點(diǎn)級(jí)別(Level-4)。當(dāng)前實(shí)例集群有一個(gè)機(jī)架,由四個(gè)8-GPU節(jié)點(diǎn)組成,由三個(gè)租戶A、B和C共享。
HiveD機(jī)架的多級(jí)單元分配示例
藍(lán)海大腦異構(gòu)集群管理解決方案
隨著企業(yè)規(guī)模逐漸擴(kuò)展,特別是私有云數(shù)據(jù)庫(kù)架構(gòu)中經(jīng)常存在多種硬件機(jī)型和操作系統(tǒng)版本,對(duì)這些硬件進(jìn)行批量更換和升級(jí)是一項(xiàng)高風(fēng)險(xiǎn)、高成本的工作。藍(lán)海大腦異構(gòu)集群管理解決方案不僅可以協(xié)助企業(yè)充分利用現(xiàn)有設(shè)備,還提供了平滑過(guò)渡方案,為新型硬件、異構(gòu)芯片的灰度替換提供支持。同時(shí),該解決方案還支持國(guó)密算法加密副本的混合部署,為企業(yè)國(guó)產(chǎn)化升級(jí)提供安全穩(wěn)定的解決方案。
藍(lán)海大腦異構(gòu)集群管理解決方案通過(guò)主備集群架構(gòu),備集群使用新型硬件完成了第一階段的灰度驗(yàn)證,期間對(duì)主集群業(yè)務(wù)沒(méi)有任何影響。AI異構(gòu)計(jì)算平臺(tái),包含AI計(jì)算、AI存儲(chǔ)、AI加速、AI容器四大核心套件,具有高性能、高彈性、高速互聯(lián)、高性?xún)r(jià)比等特性。AI計(jì)算方面,提供基于自研GPU硬件架構(gòu)X-MAN的高性能實(shí)例,充分滿足AI單機(jī)訓(xùn)練、分布式集群訓(xùn)練、AI推理部署等對(duì)算、存、傳的性能訴求。AI存儲(chǔ)方面,基于AI存儲(chǔ)架構(gòu),從數(shù)據(jù)上云、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)處理和數(shù)據(jù)加速為計(jì)算提供全鏈條的支撐。AI加速方面,通過(guò)存訓(xùn)推一體化加速,通過(guò)對(duì)存儲(chǔ)訪問(wèn)、模型訓(xùn)練和推理的加速進(jìn)一步提速AI任務(wù)。AI容器方面,AI容器提供GPU顯存和算力的共享與隔離,集成PaddlePaddle、TensorFlow、Pytorch等主流深度學(xué)習(xí)框架,支持AI任務(wù)編排、管理等。
一、業(yè)務(wù)挑戰(zhàn)
1、高風(fēng)險(xiǎn)
傳統(tǒng)數(shù)據(jù)庫(kù)硬件的批量替換風(fēng)險(xiǎn)很高,因?yàn)槿狈τ行У幕叶确桨竵?lái)逐步引入更改,而異構(gòu)復(fù)制方案又難以確保數(shù)據(jù)的一致性。如果同一批次硬件或操作系統(tǒng)存在統(tǒng)一問(wèn)題,往往會(huì)集中爆發(fā),嚴(yán)重的情況下可能對(duì)業(yè)務(wù)造成不可挽回的損失。
2、高成本
傳統(tǒng)替換方案往往需要部署專(zhuān)屬環(huán)境來(lái)進(jìn)行長(zhǎng)期驗(yàn)證,這會(huì)產(chǎn)生高昂的資源并行成本。這些成本包括但不限于購(gòu)買(mǎi)和維護(hù)額外的硬件、能源消耗和管理人力資源以監(jiān)視和維護(hù)這些并行系統(tǒng)。
3、難以維護(hù)
搭建異構(gòu)驗(yàn)證環(huán)境不僅消耗硬件資源,而且使得整個(gè)數(shù)據(jù)庫(kù)基礎(chǔ)架構(gòu)更加復(fù)雜,維護(hù)起來(lái)更加困難。這種復(fù)雜性可能會(huì)導(dǎo)致潛在的錯(cuò)誤和故障,增加了維護(hù)成本和難度。
二、方案優(yōu)勢(shì)
1、兼容開(kāi)放支撐海光、鯤鵬、Intel等多種芯片及其生態(tài),滿足不同的用戶和場(chǎng)景需求
兼容多種類(lèi)型的芯片,包括海光、鯤鵬和Intel等,并且可以支持這些芯片的生態(tài)系統(tǒng)。
2、功能一致數(shù)據(jù)庫(kù)自動(dòng)適配,用戶無(wú)需區(qū)分底層的芯片形態(tài),透明無(wú)感
自動(dòng)適應(yīng)不同的底層芯片形態(tài),無(wú)需關(guān)心底層的硬件細(xì)節(jié),感覺(jué)就像在使用一個(gè)統(tǒng)一的功能一致的數(shù)據(jù)庫(kù)。
3、數(shù)據(jù)一致,支持異構(gòu)芯片,副本數(shù)據(jù)一致性校驗(yàn),確保數(shù)據(jù)一致性和正確性,具備容災(zāi)切換能力
保證在異構(gòu)芯片上的副本數(shù)據(jù)保持一致性,通過(guò)數(shù)據(jù)一致性校驗(yàn)來(lái)確保數(shù)據(jù)的準(zhǔn)確性和一致性。同時(shí),這個(gè)系統(tǒng)還具備容災(zāi)切換的能力,可以在發(fā)生故障時(shí)快速切換到備用系統(tǒng)上。
4、混合部署,支持多副本混部、主備集群混部、機(jī)房混部等多種形態(tài),支持長(zhǎng)期混部運(yùn)行
支持多種部署形態(tài),比如多副本混部、主備集群混部和機(jī)房混部等。不同的部署形態(tài)可以滿足不同的業(yè)務(wù)需求,并且系統(tǒng)還支持長(zhǎng)期混部運(yùn)行,使得系統(tǒng)的可用性和穩(wěn)定性得到了極大的提升。
5、灰度切換支持按可用區(qū)(Zone)切換,最細(xì)粒度支持按表分區(qū)灰度切換,支持平滑灰度遷移替換
支持灰度切換,用戶可以選擇按可用區(qū)進(jìn)行切換,最細(xì)粒度可以按表分區(qū)進(jìn)行灰度切換。
6、灰度加密支持國(guó)密算法加密副本的混部,為全局開(kāi)啟加密存儲(chǔ)提供平滑過(guò)渡方案
支持使用國(guó)密算法進(jìn)行加密,可以在混部過(guò)程中對(duì)數(shù)據(jù)進(jìn)行加密,為全局開(kāi)啟加密存儲(chǔ)提供了平滑過(guò)渡方案。
7、異構(gòu)資源統(tǒng)一管理提供多集群的計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)等資源的統(tǒng)一視圖, 并實(shí)現(xiàn)多集群網(wǎng)絡(luò)打通、鏡像統(tǒng)一管理
提供多集群的計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)等資源的統(tǒng)一視圖,實(shí)現(xiàn)多集群網(wǎng)絡(luò)打通和鏡像統(tǒng)一管理。
8、構(gòu)建基于多種指標(biāo)的自動(dòng)伸縮策略,搭配負(fù)載均衡器,實(shí)現(xiàn)業(yè)務(wù)彈性
基于多種指標(biāo)的自動(dòng)伸縮策略,結(jié)合負(fù)載均衡器,可以實(shí)現(xiàn)業(yè)務(wù)的彈性擴(kuò)展和收縮,保持業(yè)務(wù)的高可用性和性能。
9、支持x86/ARM/國(guó)產(chǎn)化等多架構(gòu)裸金屬服務(wù)器的管理,幫助用戶實(shí)現(xiàn)上電自動(dòng)發(fā)現(xiàn)、一鍵部署開(kāi)通與統(tǒng)一網(wǎng)絡(luò)管理
支持x86、ARM和國(guó)產(chǎn)化等多架構(gòu)裸金屬服務(wù)器的管理,并且可以幫助用戶實(shí)現(xiàn)上電自動(dòng)發(fā)現(xiàn)、一鍵部署開(kāi)通和統(tǒng)一網(wǎng)絡(luò)管理等功能。
10、實(shí)現(xiàn)與虛擬機(jī)、容器的業(yè)務(wù)網(wǎng)絡(luò)打通
幫助用戶實(shí)現(xiàn)與虛擬機(jī)和容器等不同環(huán)境之間的業(yè)務(wù)網(wǎng)絡(luò)打通,使得不同環(huán)境之間的通信更加順暢和高效。
三、應(yīng)用場(chǎng)景
1、高性能計(jì)算(HPC)
HPC領(lǐng)域利用異構(gòu)集群進(jìn)行天氣預(yù)報(bào)、地震分析、石油勘探等科學(xué)計(jì)算。典型配置是使用多核CPU服務(wù)器組成主集群,同時(shí)加入GPU服務(wù)器用于并行加速。也會(huì)采用不同的網(wǎng)絡(luò)拓?fù)浜突ヂ?lián)來(lái)優(yōu)化吞吐和延遲。
2、人工智能(AI)
AI訓(xùn)練任務(wù)會(huì)使用成百上千張GPU來(lái)搭建規(guī)模巨大的異構(gòu)集群,例如NVIDIA的DGX SuperPOD。針對(duì)不同的訓(xùn)練階段,可以靈活使用不同型號(hào)的GPU服務(wù)器。AI推理任務(wù)則會(huì)采用專(zhuān)門(mén)的AI加速卡,按需彈性部署。
3、大數(shù)據(jù)分析
大數(shù)據(jù)平臺(tái)如Apache Hadoop、Spark會(huì)搭建以標(biāo)準(zhǔn)X86服務(wù)器為中心的大規(guī)模集群,并加入GPU服務(wù)器用于機(jī)器學(xué)習(xí)算法的并行加速。不同類(lèi)型的分析任務(wù)可以負(fù)載到不同規(guī)格的服務(wù)器上。
4、科學(xué)計(jì)算
利用異構(gòu)集群進(jìn)行天文統(tǒng)計(jì)學(xué)分析、粒子物理模擬、量子化學(xué)計(jì)算等。除了GPU服務(wù)器,也會(huì)采用FPGA、ASIC等專(zhuān)硬加速器進(jìn)行優(yōu)化。
5、工程設(shè)計(jì)
汽車(chē)、航空航天的設(shè)計(jì)需要進(jìn)行復(fù)雜物理仿真,通過(guò)異構(gòu)集群進(jìn)行并行仿真可以大幅提升效率。此外還需要使用GPU渲染、圖像處理。
6、金融
金融量化交易使用異構(gòu)集群提升回測(cè)和交易性能。加入FPGA可以實(shí)現(xiàn)超低延遲的高頻交易。區(qū)塊鏈也需要大規(guī)模挖礦集群提供算力。
7、軍事國(guó)防
異構(gòu)集群可應(yīng)用于軍事仿真,指揮控制,圖像識(shí)別等任務(wù)。出于安全考慮,敏感應(yīng)用會(huì)采用定制化芯片。
-
gpu
+關(guān)注
關(guān)注
28文章
4789瀏覽量
129442 -
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7550瀏覽量
88747 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
9338瀏覽量
86153 -
高性能計(jì)算
+關(guān)注
關(guān)注
0文章
84瀏覽量
13450
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論