李 鑠,陸忠華1,孫永澤
1.中國(guó)科學(xué)院計(jì)算機(jī)網(wǎng)絡(luò)信息中心,北京 100190
2.中國(guó)科學(xué)院大學(xué),北京 101408
隨著計(jì)算機(jī)技術(shù)的不斷進(jìn)步和網(wǎng)絡(luò)技術(shù)普及,人工智能技術(shù)近年來(lái)不斷地提升,機(jī)器學(xué)習(xí)和深度學(xué)習(xí)已經(jīng)廣泛地用于計(jì)算機(jī)視覺(jué),自然語(yǔ)言處理等各個(gè)領(lǐng)域。
一方面,機(jī)器學(xué)習(xí)和深度學(xué)習(xí)這一類(lèi)需要大量資源和算力,TensorFlow、Caffe、Pytorch 等深度學(xué)習(xí)框架也都相繼推出了分布式版本,可見(jiàn),這類(lèi)任務(wù)對(duì)大規(guī)模的計(jì)算、存儲(chǔ)、傳輸?shù)确矫娴囊笠苍絹?lái)越高,而單臺(tái)計(jì)算機(jī)硬件和軟件的發(fā)展卻遠(yuǎn)遠(yuǎn)落后于這類(lèi)應(yīng)用對(duì)這些方面的需求。另一方面,機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的算法效果受到多方面的影響,如訓(xùn)練數(shù)據(jù),模型選擇,超參數(shù)優(yōu)化等。在人工智能中普遍使用的學(xué)習(xí)式模型里通常情況下需要人為指定的一些參數(shù),這些參數(shù)就是超參數(shù)[2]。針對(duì)這些超參數(shù)的優(yōu)化,繼而提出了超參數(shù)優(yōu)化的概念,是指在確定模型和參數(shù)組合確定的情況下,設(shè)定每個(gè)參數(shù)的優(yōu)化范圍,對(duì)這些參數(shù)進(jìn)行優(yōu)化以達(dá)到一個(gè)滿意的訓(xùn)練效果。但是,參數(shù)優(yōu)化的過(guò)程中缺乏資源調(diào)度機(jī)制,目前的實(shí)現(xiàn)中不支持多租戶,平臺(tái)模式提交參數(shù)優(yōu)化作業(yè),這對(duì)于現(xiàn)在大量使用大規(guī)模集群資源的狀況相違背,導(dǎo)致用戶可能只能使用十分有限的資源來(lái)進(jìn)行參數(shù)優(yōu)化,無(wú)法很好利用集群資源。
目前很多機(jī)器學(xué)習(xí)算法庫(kù)都提供了他們的參數(shù)調(diào)優(yōu)方案,在這一領(lǐng)域稱為Auto-ML,AutoML的最終目標(biāo)是為具有有限數(shù)據(jù)科學(xué)或機(jī)器學(xué)習(xí)背景的領(lǐng)域?qū)<姨峁┮子谠L問(wèn)的深度學(xué)習(xí)工具。Google 在其云產(chǎn)品上進(jìn)行了自動(dòng)參數(shù)優(yōu)化的集成,也就是Vizier[2]的外部接口。Auto-sklearn[3]是一個(gè)自動(dòng)化機(jī)器學(xué)習(xí)的工具包,其基于sklearn 編寫(xiě),Autosklearn可以進(jìn)行機(jī)器學(xué)習(xí)算法的自動(dòng)選擇與超參數(shù)的自動(dòng)優(yōu)化,它使用的技術(shù)包括貝葉斯優(yōu)等。Auto-Keras[4]是一個(gè)用于自動(dòng)機(jī)器學(xué)習(xí)的開(kāi)源軟件庫(kù)。它由 Texas A & M 大學(xué)的DATA 實(shí)驗(yàn)室和社區(qū)貢獻(xiàn)者開(kāi)發(fā)。Auto-Keras 提供自動(dòng)搜索深度學(xué)習(xí)模型的架構(gòu)和超參數(shù)的功能。
分布式計(jì)算領(lǐng)域有許多用于大數(shù)據(jù)和高性能計(jì)算領(lǐng)域著名實(shí)現(xiàn)。MapReduce[5]是Google 公司于 2004年提出的能并發(fā)處理海量數(shù)據(jù)的并行編程模型,其特點(diǎn)是簡(jiǎn)單易學(xué)、適用廣泛,能夠降低并行編程難度,讓程序員從繁雜的并行編程工作中解脫出來(lái),輕松地編寫(xiě)簡(jiǎn)單、高效的并行程序。MPI[6]能廣泛應(yīng)用于多類(lèi)并行機(jī)群和網(wǎng)絡(luò)環(huán)境,是建立在多種可靠的消息傳遞庫(kù)的基礎(chǔ)上的一種接口模式。Parameter Server[7]基于參數(shù)服務(wù)器框架的分布式機(jī)器學(xué)習(xí)系統(tǒng)上設(shè)計(jì)并行優(yōu)化算法,采用靈活的一致性模型,提高算法執(zhí)行效率。參數(shù)優(yōu)化的場(chǎng)景和這些常用分布式計(jì)算區(qū)別在于需要持續(xù)的任務(wù)提交,這一特性對(duì)集群資源的管理提出了更高的要求。
調(diào)度系統(tǒng)同樣有很重要的地位[1],Kubernetes[11]是Google 開(kāi)源的容器集群管理系統(tǒng) (谷歌內(nèi)部:Borg[12])。此外還有其他各種調(diào)度系統(tǒng)例如YARN[13],Slurm[14],LSF[15]等。Mesos[9]調(diào)度系統(tǒng),Mesos 自身只是一個(gè)資源抽象的平臺(tái),要使用它往往需要結(jié)合運(yùn)行其上的分布式應(yīng)用(在 Mesos中被稱作框架 Framework[16]),這些應(yīng)用包括 Hadoop、Spark、Kafka、Elastic Search。還可配合框架 Marathon 來(lái)管理大規(guī)模的Docker[8]等容器化應(yīng)用,另外這些框架還需要實(shí)現(xiàn)自己的二級(jí)調(diào)度,也就是在 Mesos 提供資源的同時(shí)對(duì)資源進(jìn)行再分配,提供對(duì)自己任務(wù)本身的更為動(dòng)態(tài)和細(xì)粒度的支持,給了分布式應(yīng)用開(kāi)發(fā)者更大的空間[10]。
在通常的單機(jī)實(shí)現(xiàn)中,往往由用戶使用的軟件包串行執(zhí)行訓(xùn)練程序,無(wú)法充分利用資源,在機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的參數(shù)調(diào)優(yōu)的過(guò)程中,這一缺點(diǎn)暴露得更加明顯,因?yàn)檫@些場(chǎng)景下的訓(xùn)練任務(wù)往往要執(zhí)行更多的時(shí)間,并且需要大量的資源。
參數(shù)優(yōu)化和分布式存在著很大的契合點(diǎn),尤其是在機(jī)器學(xué)習(xí)和深度學(xué)習(xí)這一類(lèi)需要大量計(jì)算資源的領(lǐng)域,如何通過(guò)分布式的采樣算法去并行執(zhí)行參數(shù)優(yōu)化任務(wù),以及如何在提高并發(fā)度的同時(shí)更好地利用集群資源是將兩者結(jié)合的關(guān)鍵問(wèn)題。通過(guò)分布式的參數(shù)優(yōu)化系統(tǒng)可以在一定程度上提升參數(shù)優(yōu)化的效率,同時(shí)提高集群資源的利用率。
本文同時(shí)從分布式計(jì)算和基礎(chǔ)設(shè)施兩個(gè)層面來(lái)考慮這一問(wèn)題,與分布式的參數(shù)優(yōu)化算法相結(jié)合來(lái)形成分布式計(jì)算這一環(huán)節(jié),改進(jìn) Mesos Framework的資源調(diào)度策略來(lái)更好地利用集群資源。設(shè)計(jì)和實(shí)現(xiàn)一個(gè)基于Mesos的分布式參數(shù)優(yōu)化系統(tǒng),計(jì)算層由各類(lèi)優(yōu)化算法組成,進(jìn)行分布式參數(shù)優(yōu)化的采樣和生成計(jì)算任務(wù),調(diào)度層是一個(gè)Mesos Framework的具體實(shí)現(xiàn),主要負(fù)責(zé)資源分配和執(zhí)行計(jì)算任務(wù)。更進(jìn)一步地,我們可以針對(duì)參數(shù)優(yōu)化場(chǎng)景提出一種調(diào)度影響計(jì)算的策略來(lái)控制參數(shù)優(yōu)化這一過(guò)程,以平衡多租戶分布式參數(shù)優(yōu)化場(chǎng)景下的資源競(jìng)爭(zhēng)問(wèn)題。
Mesos是常見(jiàn)的集群資源管理系統(tǒng)之一。Mesos相較于其他調(diào)度系統(tǒng)更加輕量,用于支持研究者進(jìn)行自定義應(yīng)用的開(kāi)發(fā)的接口更加友好[9],其特有的兩級(jí)調(diào)度機(jī)制為研究者制造了更大的探索空間。Mesos 作為集群的基礎(chǔ)設(shè)施,圍繞這一基礎(chǔ)設(shè)施,不同的應(yīng)用使用不同的Mesos Framework 來(lái)進(jìn)行對(duì)其建設(shè),為的是可以將應(yīng)用銜接進(jìn)入 Mesos 集群系統(tǒng),獲取集群的資源。為了使參數(shù)優(yōu)化系統(tǒng)能夠使用集群資源,需要設(shè)計(jì)和實(shí)現(xiàn)一個(gè)針對(duì)這一應(yīng)用的Mesos Framework和計(jì)算框架,形成一個(gè)完整可用,可擴(kuò)展性高的原型系統(tǒng)。
Mesos 主要由 Mesos Master,Mesos Slave,Mesos Framework 組成,其中 Mesos Framework 又包括 Scheduler和Executor 兩個(gè)重要模塊。
上圖顯示了 Mesos的主要組成部分。Mesos 由一個(gè)主守護(hù)進(jìn)程來(lái)管理從守護(hù)進(jìn)程在每個(gè)集群節(jié)點(diǎn)上的運(yùn)行,Mesos Frameworks在這些 Slaves 上運(yùn)行 Tasks。
Master 使用Resource Offers 實(shí)現(xiàn)跨越不同應(yīng)用的細(xì)粒度資源共享,如 CPU、內(nèi)存、磁盤(pán)、網(wǎng)絡(luò)等。Master 根據(jù)指定的策略來(lái)決定分配多少資源給Framework,如公平共享策略,或優(yōu)先級(jí)策略。為了支持更多樣性的策略,Master 采用模塊化結(jié)構(gòu),這樣就可以方便的通過(guò)插件形式來(lái)添加新的分配模塊。
圖1 Mesos 架構(gòu)圖Fig.1 Mesos architecture diagram
在 Mesos 上運(yùn)行的Framework 由兩部分組成:一個(gè)是Scheduler,通過(guò)注冊(cè)到 Master 來(lái)獲取集群資源。另一個(gè)是在 Slave 節(jié)點(diǎn)上運(yùn)行的Executor 進(jìn)程,它可以執(zhí)行 Framework的Task。Master 決定為每個(gè)Framework 提供多少資源,F(xiàn)ramework的Scheduler來(lái)選擇 Master 提供的資源。當(dāng) Framework 同意了提供的資源,通過(guò) Master 將 Task 發(fā)送到提供資源的Slaves 上運(yùn)行。
根據(jù)不同的應(yīng)用場(chǎng)景來(lái)實(shí)現(xiàn)不同 M e s o s Framework,是Mesos 系統(tǒng)和其他調(diào)度系統(tǒng)區(qū)別所在,同時(shí)這一架構(gòu)體現(xiàn)了 Mesos 系統(tǒng)所特有的兩級(jí)調(diào)度方式,文章會(huì)在 2.1 節(jié)對(duì) Mesos的資源調(diào)度策略進(jìn)行更進(jìn)一步的介紹。常見(jiàn)的Mesos Framework 實(shí)現(xiàn)是針對(duì)不同的業(yè)務(wù)模型和作業(yè)方式對(duì) Mesos Master 給予的資源進(jìn)行更加優(yōu)化的管理調(diào)度,例如在線長(zhǎng)作業(yè),離線批處理作業(yè)等模式。
本文所提出的分布式參數(shù)優(yōu)化系統(tǒng),其核心調(diào)度功能也是通過(guò)實(shí)現(xiàn)一個(gè)Mesos Framework 來(lái)滿足多用戶使用Mesos 集群資源,提高資源的整體利用率,減少用戶在參數(shù)優(yōu)化過(guò)程中需要做的資源調(diào)度工作。此外,在參數(shù)優(yōu)化系統(tǒng)中,如何進(jìn)行參數(shù)的計(jì)算和迭代也是至關(guān)重要的一環(huán)。采用了常見(jiàn)的Master-Slave 架構(gòu),App Core 作為Master,App Runner 作為Slave,計(jì)算結(jié)果匯報(bào)給 App Core。每個(gè)單獨(dú)的計(jì)算的任務(wù)可以作為一個(gè)Mesos Task 托管在 Mesos中運(yùn)行,通過(guò)Docker 進(jìn)行資源隔離。
本系統(tǒng)解決了多租戶在集群系統(tǒng)上進(jìn)行參數(shù)優(yōu)化的問(wèn)題,提供分布式參數(shù)優(yōu)化的支持,通過(guò) Mesos Framework 很好地集成了負(fù)責(zé)參數(shù)優(yōu)化的應(yīng)用程序,對(duì)于 Mesos 集群系統(tǒng)侵入性很小,如圖2所示。
整個(gè)系統(tǒng)包括四種組件:
Client:客戶端,負(fù)責(zé)和用戶進(jìn)行交互,用戶根據(jù)其需求提供參數(shù)并啟動(dòng)框架
Mesos Framework:負(fù)責(zé)啟動(dòng) App Core,App Runner,進(jìn)行資源的二級(jí)的調(diào)度,與Mesos Master 通信,負(fù)責(zé)監(jiān)控作業(yè)運(yùn)行狀態(tài)等工作。
App Core:是一個(gè)交由 Mesos Task 托管的核心應(yīng)用程序,主要負(fù)責(zé)運(yùn)行參數(shù)優(yōu)化算法,保存參數(shù)優(yōu)化結(jié)果等。
圖2 分布式參數(shù)優(yōu)化系統(tǒng)架構(gòu)Fig.2 Distributed parameter optimization system architecture
App Runner:交由 Mesos Task 托管的用戶提供應(yīng)用程序,按照用戶提交的代碼進(jìn)行結(jié)果運(yùn)算,并將運(yùn)算結(jié)果反饋至 App Core。當(dāng)用戶提高并行參數(shù)時(shí),App Core 會(huì)向 Mesos Framework 根據(jù)并行度提交運(yùn)行App Runner的參數(shù)。
1.3.1 Client設(shè)計(jì)
客戶端供用戶提交自己的App Runner 程序,其關(guān)鍵部分主要有以下兩點(diǎn):
(1) 任務(wù)參數(shù)輸入
用戶通過(guò)提交腳本的方式進(jìn)行作業(yè)提交,并進(jìn)行對(duì)應(yīng)的參數(shù)輸入,這類(lèi)參數(shù)主要數(shù)據(jù)輸入路徑,App Runner 程序路徑和啟動(dòng)命令,App Core和App Runner 各自的運(yùn)行 CPU 核數(shù),內(nèi)存大小等,這一類(lèi)參數(shù)與其他調(diào)度系統(tǒng)有很大的相似度。
如下所示:
本文所描述的系統(tǒng)增加了優(yōu)化參數(shù)的特殊配置,以及優(yōu)化算法的選擇等與參數(shù)優(yōu)化相關(guān)的配置,如下是個(gè)簡(jiǎn)單優(yōu)化參數(shù)配置文件:
以機(jī)器學(xué)習(xí)的參數(shù)優(yōu)化為例,通常情況下,待優(yōu)化的參數(shù)選取如 learning rate,momentum,batch size等,其值 value 可以是上下界區(qū)間,數(shù)值選擇。
圖3 用戶提交命令與參數(shù)Fig.3 User submits commands and parameters
(2) 任務(wù)狀態(tài)監(jiān)控
任務(wù)狀態(tài)獲取,用戶可以通過(guò)命令行或者 Mesos界面查看整個(gè)作業(yè)的運(yùn)行狀態(tài),即作業(yè)中每個(gè)任務(wù)的運(yùn)行狀態(tài)。主要是通過(guò) org.apache.mesos.statusUpdate 接口函數(shù)來(lái)實(shí)現(xiàn)的。對(duì)于每個(gè)Task,主要包括PENDING,RUNNING,F(xiàn)INISHED,F(xiàn)AILED 等常見(jiàn)任務(wù)狀態(tài)。
1.3.2 Mesos Framework 設(shè)計(jì)
Mesos Framework是基于Mesos 調(diào)度系統(tǒng)的分布式應(yīng)用,相對(duì)于 Mesos Master和Mesos Slave是獨(dú)立的,Mesos Framework和Mesos Master 服務(wù)進(jìn)行交互,并不直接和Mesos Slave進(jìn)行交互。本文設(shè)計(jì)的Framework 實(shí)際上是通過(guò) Client 直接在本地啟動(dòng),并根據(jù) Client 參數(shù)將用戶需求抽象成 Job,Job 同時(shí)負(fù)責(zé)填充 Mesos的Task 參數(shù)。
Mesos Framework和Mesos Master的交互,過(guò) RPC[21]調(diào)用的方式進(jìn)行通信,包括 Framework的注冊(cè),接收資源,拒絕資源,狀態(tài)更新等。接收資源,即 resourceOffers,是一關(guān)鍵調(diào)用,涉及到資源的二次調(diào)度,填充 Task 參數(shù),拒絕資源等。
Mesos Framework和App Core的交互也是通過(guò)RPC 進(jìn)行的,包含一個(gè)RPC Server。
1.3.3 App Core 設(shè)計(jì)
對(duì)于參數(shù)的優(yōu)化,可以將這種優(yōu)化看作是反映泛化性能的未知黑盒函數(shù)的優(yōu)化,并調(diào)用針對(duì)這些問(wèn)題開(kāi)發(fā)的算法進(jìn)行參數(shù)選擇。App Core的任務(wù)就是集成了這些算法,在用戶提交了任務(wù)之后由 App Core 根據(jù)用戶選擇的優(yōu)化算法和參數(shù)進(jìn)行計(jì)算。一個(gè)作業(yè)中有且只有一個(gè)App Core,其中包含一個(gè)RPC Server和Client。在選擇了參數(shù)之后App Core的RPC Client向 Mesos Framework 通過(guò) RPC Client 進(jìn)行 RPC 通信過(guò)程①,提交下一輪實(shí)驗(yàn)的參數(shù),內(nèi)容是由 App Core計(jì)算出來(lái)的參數(shù),提供給調(diào)度的優(yōu)先級(jí)系數(shù)等。App Core 其本身在系統(tǒng)中也是一個(gè)作業(yè)。如果參數(shù)優(yōu)化算法串行的提交作業(yè),在一定時(shí)間內(nèi)能完成的作業(yè)如圖4所示。
如果指定并行度為n=3,那么如圖5所示在相同的時(shí)間內(nèi)可以完成更多的訓(xùn)練任務(wù)。
App Core中支持的參數(shù)優(yōu)化算法如表格 1 列出的,值得一提的是圖6所示的是一種異步的并行,目的是為了提高并行效率,不必去等較慢的進(jìn)程[20],但是在貝葉斯優(yōu)化[18-19]中,需要反饋訓(xùn)練結(jié)果,以進(jìn)行下一步的采樣,所以其同步并行會(huì)產(chǎn)生一些效率問(wèn)題。
1.3.4 App Runner 設(shè)計(jì)
這里的App Runner是一個(gè)統(tǒng)稱,表示用戶通過(guò)Client 上傳的訓(xùn)練程序,根據(jù) App Core 選取的參數(shù),App Runner 在 Mesos Framework 指定的資源內(nèi)形成Mesos Task 運(yùn)行,訓(xùn)練結(jié)果會(huì)通過(guò) RPC Client 向 App Core 以 RPC 通信過(guò)程②的方式進(jìn)行匯報(bào),其內(nèi)容是訓(xùn)練結(jié)果和訓(xùn)練時(shí)間等。用戶只需要根據(jù)系統(tǒng)提供的Python 工具包,簡(jiǎn)單修改自己的程序,就能作為一個(gè)App Runner 運(yùn)行在本系統(tǒng)中,達(dá)到和App Core 交互的目的。
基于本文第一章的論述,研究并設(shè)計(jì)實(shí)現(xiàn)了一個(gè)基于Mesos的分布式參數(shù)優(yōu)化系統(tǒng),因此,在本章中我們將對(duì)這一系統(tǒng)的調(diào)度策略進(jìn)行改進(jìn)。主要是指在原先 Mesos的兩級(jí)調(diào)度基礎(chǔ)上,針對(duì)文中 MesosFramework 所承載的參數(shù)優(yōu)化應(yīng)用的運(yùn)行模式進(jìn)行優(yōu)化,以達(dá)到在減少多租戶分布式參數(shù)優(yōu)化場(chǎng)景下的資源競(jìng)爭(zhēng)的目的。
表1 App Core中支持的參數(shù)優(yōu)化算法Table1 Parameter optimization algorithms supported in App Core
圖4 串行參數(shù)優(yōu)化Fig.4 Serial parameter optimization
圖5 并行參數(shù)優(yōu)化Fig.5 Parallel parameter optimization
基于圖6的事件流程:
a.Slave1 向 Master 報(bào)告,有4個(gè)CPU和4GB內(nèi)存可用
b.Master 發(fā)送一個(gè)Resource Offer 給 Framework1來(lái)描述 Slave1 有多少可用資源
c.FrameWork1中的FW Scheduler 會(huì)答復(fù)Master,我有兩個(gè)Task 需要運(yùn)行在 Slave1,一個(gè)Task 需要<2個(gè)cpu,1 gb內(nèi)存>,另外一個(gè)Task 需要<1個(gè)cpu,2 gb 內(nèi)存>
d.最后,Master 發(fā)送這些 Tasks 給 Slave1。然后,Slave1 還有1個(gè)CPU和1GB內(nèi)存沒(méi)有使用,所以分配模塊可以把這些資源提供給 Framework2
Mesos Master 即為第一級(jí)資源調(diào)度,在大部分情況下采用DRF 調(diào)度算法[17],主資源公平調(diào)度(Dominant Resource Fairness) 算法,非常適合應(yīng)用于多維資源管理和調(diào)度的復(fù)雜環(huán)境。其中,主資源指的是各所需資源在相應(yīng)總資源中所占比例最大的資源,在 Mesos中,體現(xiàn)在一輪分配中對(duì)于每個(gè)Framework的分配的資源不同。
圖6 Mesos資源調(diào)度策略Fig.6 Mesos resource scheduling strategy
Mesos Framework為第二級(jí)資源調(diào)度,在大部分實(shí)現(xiàn)中采用的FIFO 算法實(shí)現(xiàn),即先來(lái)先服務(wù)算法。因?yàn)榻?jīng)過(guò)了一級(jí)資源調(diào)度,Mesos Master 通過(guò)Resource Offer 接口給予 Framework的資源已經(jīng)是比較細(xì)粒度的資源,所以對(duì)于一些普通的在線作業(yè)或者批處理作業(yè)僅需要進(jìn)行一些資源排查。在本文所指出的分布式參數(shù)優(yōu)化的場(chǎng)景下,這一部分調(diào)度可以做到動(dòng)態(tài)調(diào)度以在集群負(fù)擔(dān)較重時(shí)節(jié)約集群資源。
本文提出一種針對(duì)分布式參數(shù)優(yōu)化的原型系統(tǒng)中 Mesos Framework 里的動(dòng)態(tài)資源調(diào)度策略,利用Mesos 系統(tǒng)的兩級(jí)調(diào)度特色去探索一種新的調(diào)度策略,以優(yōu)化資源調(diào)度效率。在多租戶多任務(wù)的分布式參數(shù)優(yōu)化場(chǎng)景下,我們目前的優(yōu)化目標(biāo)是:系統(tǒng)中存在多個(gè)任務(wù) J_i 時(shí),在盡量短的時(shí)間 T 內(nèi),使多個(gè)任務(wù)n達(dá)到接近其本身應(yīng)該達(dá)到的優(yōu)化效果 F_i。算法1描述如下:
算法 1 if (n > k * m) then // n為當(dāng)前運(yùn)行的任務(wù)J的數(shù)目,k為倍數(shù)系數(shù),m為取樣個(gè)數(shù)F = <f1,f2 … fn> //每次計(jì)算返回的結(jié)果的序列,fi按照效果由好到壞排列g(shù) = min(|f1 - f2|,…|fm-1 -fm| ) //計(jì)算前m對(duì)的效果差值if g < G || g ≈ g’ then //G為當(dāng)前閾值,g’為前多次計(jì)算的gap均值pi = P + 1 //降低下一個(gè)J的優(yōu)先級(jí),p表示對(duì)應(yīng)Job的優(yōu)先級(jí)else pi = P if pi > P then P = pi //更新全局優(yōu)先級(jí)j = j + 1 G = Gj //Gj表示下一個(gè)閾值
Mesos 特有的兩級(jí)調(diào)度系統(tǒng),Mesos Framework決定 Mesos 提供的資源是否合適,從而接受或者拒絕這個(gè)資源,當(dāng) Framework 拒絕資源,Mesos 將跳過(guò)該Framework,將資源提供給其他 Framework。因此,根據(jù) App Core 返回的優(yōu)先級(jí),會(huì)根據(jù)配置跳過(guò) d個(gè)Mesos 分配的資源,這些資源會(huì)分配給其他框架執(zhí)行高優(yōu)先級(jí)任務(wù)。如果 Framework 發(fā)現(xiàn)集群資源空閑即多次拒絕后分配的資源沒(méi)有減少,就會(huì)調(diào)高作業(yè)的優(yōu)先級(jí),從利用優(yōu)化結(jié)果和集群資源的變化達(dá)到了一種動(dòng)態(tài)調(diào)度。
3.1.1 硬件部署環(huán)境
實(shí)驗(yàn)環(huán)境由兩臺(tái)曙光高性能測(cè)試服務(wù)器組成,其中 Master 服務(wù)器配置為Intel Xeon CPU E5-2620 v3的24 處理器,251G 內(nèi)存,另一臺(tái)Cluster服務(wù)器配置為Intel Xeon CPU E5-2640 v4的40 核處理器,251G 內(nèi)存。網(wǎng)絡(luò)連接為萬(wàn)兆以太網(wǎng)。
3.1.2 軟件部署環(huán)境
兩臺(tái)高性能測(cè)試服務(wù)器的軟件部署環(huán)境相同:
Ubuntu 16.04.1 LTS,OpenJDK 1.8.0_181,Python 2.7,protobuf 3.6.1,Mesos 1.6.1
實(shí)驗(yàn)在 Cluster 服務(wù)器,啟動(dòng) 3個(gè)Mesos Agent 通過(guò)其資源隔離來(lái)模擬 3 臺(tái)資源皆為12 核 CPU,20G內(nèi)存的集群系統(tǒng);Master 服務(wù)器部署 Mesos Master,及本系統(tǒng)的Client 啟動(dòng),和為Mesos Framework 提供運(yùn)行環(huán)境。
1.1 實(shí)驗(yàn)程序
在本文提到的系統(tǒng)中,從用戶的角度來(lái)講,需要準(zhǔn)備提供給 App Runner 運(yùn)行的程序,本文將平時(shí)使用的單機(jī)機(jī)器學(xué)習(xí)參數(shù)優(yōu)化的程序作為App Runner來(lái)進(jìn)行實(shí)驗(yàn),來(lái)探討其在本系統(tǒng)中不同場(chǎng)景下的運(yùn)行效率問(wèn)題。
首先對(duì)實(shí)驗(yàn)中的一些項(xiàng)目進(jìn)行定義,定義用戶通過(guò) Client 提交的參數(shù)優(yōu)化任務(wù)為一個(gè)作業(yè),在一個(gè)作業(yè)中擁有自己的Mesos Framework,App Core和App Runner,即本文所描述的參數(shù)優(yōu)化系統(tǒng),整個(gè)Mesos集群會(huì)有多個(gè)作業(yè)同時(shí)運(yùn)行。定義在一個(gè)作業(yè)通過(guò) App Core 運(yùn)行一個(gè)App Runner為一個(gè)任務(wù),并行度即指作業(yè)中可以同時(shí)運(yùn)行的任務(wù)個(gè)數(shù)。定義通過(guò)Client 端輸入的為作業(yè)參數(shù)。定義通過(guò) App Core 產(chǎn)生的為訓(xùn)練參數(shù),即參數(shù)優(yōu)化的目標(biāo)。
(1) 測(cè)試數(shù)據(jù):采用MNIST 數(shù)據(jù)集,MNIST 數(shù)據(jù)集是采集阿拉伯?dāng)?shù)字 0-9的手寫(xiě)數(shù)字?jǐn)?shù)據(jù),每幅圖片均為0 到 9中 10 數(shù)字的任意一個(gè),黑白像素。MNIST 數(shù)據(jù)集可在 http: //yann.lecun.com/exdb/mnist/獲取。本文中使用Python的MNIST 包接口對(duì)數(shù)據(jù)直接進(jìn)行處理。
(2) 測(cè)試程序:?jiǎn)螜C(jī)基于CPU的TensorFlow 程序,作為App Runner 提交到系統(tǒng)。其算法用于手寫(xiě)數(shù)字識(shí)別,網(wǎng)絡(luò)架構(gòu)為卷積神經(jīng)網(wǎng)絡(luò)。對(duì)于其中 5個(gè)訓(xùn)練參數(shù)進(jìn)行優(yōu)化,包括 learning rate,momentum,batch size 等參數(shù)。測(cè)試程序在訓(xùn)練中達(dá)到正確率95% 以上時(shí)對(duì)于用戶來(lái)說(shuō)達(dá)到了要求的正確率,此時(shí)如果繼續(xù)優(yōu)化也可以獲得更好的效果,但是因?yàn)槠谕蟛糠钟脩艨梢栽谫Y源競(jìng)爭(zhēng)的情況下更高效地獲得更好的效果,因此實(shí)驗(yàn)中以這一正確率判斷作業(yè)結(jié)束的標(biāo)志。即我們?cè)谒惴?中提到的F_i。
(3) 參數(shù)選擇:隨機(jī)搜索時(shí)一種常見(jiàn)的基礎(chǔ)參數(shù)優(yōu)化算法[22],因此我們?cè)O(shè)定參數(shù)優(yōu)化算法為隨機(jī)搜索,最大實(shí)驗(yàn)次數(shù)為200,表示對(duì)于一個(gè)作業(yè)來(lái)說(shuō),App Core 會(huì)做出最多 100 次的訓(xùn)練參數(shù)選擇。設(shè)定App Core 需要 1 核 CPU,1G 內(nèi)存,App Runner 即 (2)中的測(cè)試程序需要 4 核 CPU,5G 內(nèi)存。
實(shí)驗(yàn)主要分為串行場(chǎng)景和并行場(chǎng)景,主要對(duì)比Mesos Framework中使用FIFO 算法和本文的提出的動(dòng)態(tài)調(diào)度算法在相同作業(yè)數(shù) m和并行數(shù) n的情況下的表現(xiàn),即在作業(yè)的正確率達(dá)到 95% 時(shí)作業(yè)所消耗的時(shí)間,其中作業(yè)數(shù)表示模擬 m個(gè)用戶提交任務(wù)。每種情況設(shè)置了 10 組實(shí)驗(yàn),最后結(jié)果去除 10 組實(shí)驗(yàn)中的最高和最低值,取剩下 8中的平均數(shù)作為實(shí)驗(yàn)結(jié)果。
3.2.1 串行實(shí)驗(yàn)
串行場(chǎng)景是指每個(gè)作業(yè)內(nèi)參數(shù)優(yōu)化過(guò)程為串行執(zhí)行,主要是為了保證不出現(xiàn)資源競(jìng)爭(zhēng)得狀況,即在固定資源內(nèi),增加作業(yè)數(shù),觀察在沒(méi)有資源競(jìng)爭(zhēng)發(fā)生的情況下的作業(yè)執(zhí)行效率。實(shí)驗(yàn)結(jié)果如表2所示。
由圖7 可以看出,動(dòng)態(tài)資源調(diào)度方法和FIFO 調(diào)度方法在無(wú)資源競(jìng)爭(zhēng)的情況下表現(xiàn)差別不大,動(dòng)態(tài)資源調(diào)度會(huì)稍微耗時(shí)一些,原因是Mesos的兩級(jí)調(diào)度中,第一級(jí)資源調(diào)度的資源分配存在一定間隔周期,在動(dòng)態(tài)資源調(diào)度中會(huì)存在多個(gè)這樣的周期,F(xiàn)IFO 則不存在。
3.2.2 并行實(shí)驗(yàn)
并行場(chǎng)景增加了并行度,首先觀察在只有一個(gè)作業(yè)情況下提高并行度產(chǎn)生的加速比。結(jié)果如表3所示。
從圖8 可以看出,增加并行數(shù)可以提高作業(yè)運(yùn)行效率,參數(shù)優(yōu)化作業(yè)只有在一次訓(xùn)練之后才會(huì)進(jìn)行通信,不會(huì)產(chǎn)生頻繁的通信開(kāi)銷(xiāo)。對(duì)比動(dòng)態(tài)調(diào)度算法和FIFO 在此場(chǎng)景下差別不大。
表2 無(wú)資源競(jìng)爭(zhēng)作業(yè)運(yùn)行時(shí)間 單位:秒Table2 No resource competition job running time(second)
圖7 無(wú)資源競(jìng)爭(zhēng)作業(yè)運(yùn)行時(shí)間 單位:秒Fig.7 No resource competition job running time(second)
表3 單個(gè)作業(yè)在不同并行度下的運(yùn)行時(shí)間 單位:秒Table3 xxRun time of a single job at different parallelism(second)
最后,將作業(yè)并行度設(shè)定為4,也就是一個(gè)作業(yè)會(huì)消耗 17個(gè)核 CPU,34G 內(nèi)存,增加作業(yè)數(shù),觀察在有資源競(jìng)爭(zhēng)情況下作業(yè)運(yùn)行時(shí)間,記錄如下表4。
隨著作業(yè)數(shù)的增加,三個(gè)節(jié)點(diǎn)一共 36 核 CPU,60G 內(nèi)存的總體資源不再充裕,產(chǎn)生了資源競(jìng)爭(zhēng),如圖9所示,在作業(yè)數(shù)為3和4 時(shí)資源競(jìng)爭(zhēng)已經(jīng)非常激烈,增加了作業(yè)的運(yùn)行時(shí)間,此時(shí)動(dòng)態(tài)調(diào)度算法的效率略高于 FIFO,整體的作業(yè)效率得到了提升。
圖8 單個(gè)作業(yè)在不同并行度下的運(yùn)行時(shí)間 單位:秒Fig.8 Run time of a single job at different parallelism(second)
圖9 資源競(jìng)爭(zhēng)環(huán)境下并行度為4的作業(yè)運(yùn)行時(shí)間 單位:秒Fig.9 xxJob running time with parallelism of 4 in a resource competitive environment(second)
表4 資源競(jìng)爭(zhēng)環(huán)境下并行度為4的作業(yè)運(yùn)行時(shí)間 單位:秒Table4 Job running time with parallelism of 4 in a resource competitive environment(second)
本文介紹了以 Mesos為基礎(chǔ)系統(tǒng),在其上開(kāi)發(fā)的一套分布式參數(shù)優(yōu)化系統(tǒng),主要指一個(gè)Mesos的Framework,這個(gè)Framework 可以運(yùn)行在任何以Mesos為基礎(chǔ)的分布式系統(tǒng)上。用戶僅需要提供需要進(jìn)行參數(shù)優(yōu)化的訓(xùn)練程序,將其和Framework 提交給Mesos,由 Framework 來(lái)控制整個(gè)系統(tǒng)的運(yùn)行流程,通過(guò) Mesos Master 提供的資源 Offer 來(lái)進(jìn)行調(diào)度,為后續(xù)的工作提供系統(tǒng)基礎(chǔ)。在整個(gè)系統(tǒng)中,參數(shù)優(yōu)化算法框架也是非常重要的一環(huán),目前已經(jīng)實(shí)現(xiàn)了常見(jiàn)的例如隨機(jī)搜索,網(wǎng)格搜索等基礎(chǔ)算法,根據(jù)用戶的需要運(yùn)行不同的優(yōu)化算法。為了在資源競(jìng)爭(zhēng)環(huán)境下提高系統(tǒng)的整體效率,本文從系統(tǒng)優(yōu)化的角度來(lái)進(jìn)一步研究適用于分布式參數(shù)優(yōu)化的調(diào)度策略。本文充分利用了 Mesos的兩級(jí)調(diào)度機(jī)制來(lái)進(jìn)行探索,取得了初步的效果。值得一提的是,因?yàn)楸疚乃岢龅南到y(tǒng)可以滿足多租戶在混部場(chǎng)景下的使用,所以該策略的適用范圍更加廣泛,對(duì)已經(jīng)存在的Mesos 集群系統(tǒng)侵入性很低。
目前,許多需要參數(shù)優(yōu)化的程序更多的采用了GPU 等硬件來(lái)加速計(jì)算,未來(lái)針對(duì)本文的原型系統(tǒng)還可以加入 GPU的調(diào)度,在調(diào)度策略上可以采用強(qiáng)化學(xué)習(xí)的方法來(lái)進(jìn)行改進(jìn)。