亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種適用于分布式機(jī)器學(xué)習(xí)的自動(dòng)化任務(wù)并行的方法及其系統(tǒng)的制作方法

文檔序號(hào):10594122閱讀:196來源:國(guó)知局
一種適用于分布式機(jī)器學(xué)習(xí)的自動(dòng)化任務(wù)并行的方法及其系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供了一種適用于分布式機(jī)器學(xué)習(xí)的自動(dòng)化任務(wù)并行方法及其系統(tǒng),解決現(xiàn)有分布式機(jī)器學(xué)習(xí)編程接口的缺陷:僅提供鍵值對(duì)的讀寫接口導(dǎo)致系統(tǒng)數(shù)據(jù)訪問行為和應(yīng)用邏輯緊耦合。該缺陷加劇分布式集群中網(wǎng)絡(luò)帶寬資源競(jìng)爭(zhēng),造成編程人員不易對(duì)任務(wù)進(jìn)行并行化。本發(fā)明系統(tǒng)包括工作節(jié)點(diǎn)模塊、服務(wù)節(jié)點(diǎn)模塊、主節(jié)點(diǎn)模塊、張量模塊、調(diào)度模塊、消息跟蹤模塊、階段模塊、階段組模塊以及執(zhí)行引擎模塊。本發(fā)明通過提供較高層次的編程抽象將讀寫訪問行為和應(yīng)用程序的邏輯進(jìn)行解耦,運(yùn)行時(shí)系統(tǒng)首先根據(jù)服務(wù)節(jié)點(diǎn)的負(fù)載情況進(jìn)行動(dòng)態(tài)的任務(wù)劃分,其次將機(jī)器學(xué)習(xí)任務(wù)自動(dòng)化并行執(zhí)行,大大減輕編程人員編寫高并發(fā)機(jī)器學(xué)習(xí)應(yīng)用的負(fù)擔(dān)。
【專利說明】
一種適用于分布式機(jī)器學(xué)習(xí)的自動(dòng)化任務(wù)并行的方法及其系統(tǒng)
技術(shù)領(lǐng)域
[0001]本發(fā)明屬于分布式計(jì)算和機(jī)器學(xué)習(xí)交叉技術(shù)領(lǐng)域,具體涉及一種適用于分布式機(jī)器學(xué)習(xí)的自動(dòng)化任務(wù)并行的方法及其系統(tǒng)。
【背景技術(shù)】
[0002]機(jī)器學(xué)習(xí)算法作為一種挖掘數(shù)據(jù)價(jià)值的傳統(tǒng)方法,廣泛應(yīng)用于自然語言處理、文本分析、語音識(shí)別、機(jī)動(dòng)車自動(dòng)駕駛以及生物信息等領(lǐng)域。隨著大數(shù)據(jù)時(shí)代的到來,數(shù)據(jù)的價(jià)值越來越凸現(xiàn)出來,尤其是其中蘊(yùn)含的商業(yè)價(jià)值,機(jī)器學(xué)習(xí)因而受到重視。然而,隨著數(shù)據(jù)規(guī)模以及相應(yīng)需要學(xué)習(xí)的模型參數(shù)的規(guī)模越來越大,單個(gè)計(jì)算節(jié)點(diǎn)由于其內(nèi)存資源、計(jì)算資源以及訪存帶寬資源等的有限性,已經(jīng)不能滿足大規(guī)模機(jī)器學(xué)習(xí)的需求。將傳統(tǒng)單節(jié)點(diǎn)機(jī)器學(xué)習(xí)進(jìn)行分布化成為新的和必需的一種趨勢(shì)。將機(jī)器學(xué)習(xí)分布化之后,可以使用更多的計(jì)算節(jié)點(diǎn)去處理規(guī)模更大的數(shù)據(jù),同時(shí)縮短訓(xùn)練所得模型所需的時(shí)間,以及提高學(xué)習(xí)的模型精確度。分布式機(jī)器學(xué)習(xí)在工業(yè)界和學(xué)術(shù)界都受到普遍的關(guān)注,如:Google利用分布式系統(tǒng)DistBelief訓(xùn)練出了貓臉識(shí)別模型,Apache Software Foundat1n開發(fā)了基于Hadoop的分布式機(jī)器學(xué)習(xí)框架Mahout以及UC Berkeley AMP實(shí)驗(yàn)室開源一個(gè)可適用于機(jī)器學(xué)習(xí)算法的分布式計(jì)算系統(tǒng)Spar k等。
[0003]分布式機(jī)器學(xué)習(xí)大多數(shù)算法具有迭代性質(zhì),運(yùn)行指定次數(shù)的迭代過程或者模型參數(shù)收斂到某一穩(wěn)態(tài)才結(jié)束訓(xùn)練過程。傳統(tǒng)的分布式框架諸如MapReduce等由于其同步機(jī)制的缺陷,使其不擅長(zhǎng)于迭代式計(jì)算特性,導(dǎo)致其性能不盡如人意。
[0004]新型的機(jī)器學(xué)習(xí)分布式系統(tǒng)為參數(shù)服務(wù)器架構(gòu),此處所述參數(shù)指的是機(jī)器學(xué)習(xí)中用于描述模型參數(shù)的鍵值對(duì)(key ,value),或者是二維矩陣,或者多維矩陣,同時(shí)多維矩陣也稱為張量。參數(shù)服務(wù)器架構(gòu)中,集群中的計(jì)算節(jié)點(diǎn)被分為兩類,一類節(jié)點(diǎn)稱為工作節(jié)點(diǎn),另一類節(jié)點(diǎn)稱為服務(wù)節(jié)點(diǎn)。其中,服務(wù)節(jié)點(diǎn)負(fù)責(zé)維護(hù)全局模型參數(shù),包括響應(yīng)工作節(jié)點(diǎn)針對(duì)模型參數(shù)的查詢和更新等操作;工作節(jié)點(diǎn)加載全局訓(xùn)練數(shù)據(jù)集中的部分?jǐn)?shù)據(jù)集到本地內(nèi)存中,利用應(yīng)用邏輯規(guī)定的算法計(jì)算出需要哪些模型參數(shù)進(jìn)行計(jì)算,向服務(wù)節(jié)點(diǎn)發(fā)起查詢操作,通過網(wǎng)絡(luò)將所需模型參數(shù)傳輸至本地內(nèi)存中,然后利用應(yīng)用邏輯規(guī)定的算法和所需模型參數(shù)計(jì)算出新的模型參數(shù)w或者模型參數(shù)的更新值A(chǔ) W,在一輪迭代計(jì)算完畢后,工作節(jié)點(diǎn)向服務(wù)節(jié)點(diǎn)發(fā)起更新和同步全局模型參數(shù)等操作。分布式機(jī)器學(xué)習(xí)中工作節(jié)點(diǎn)在一次完整的迭代中的行為可以歸納描述為以下步驟:
[0005]1.工作節(jié)點(diǎn)加載部分?jǐn)?shù)據(jù)集;
[0006]2.工作節(jié)點(diǎn)計(jì)算出需要的模型參數(shù),通過底層提供的模型訪問接口獲取所需的模型參數(shù);
[0007]3.根據(jù)應(yīng)用邏輯計(jì)算出新的模型參數(shù)w或者模型參數(shù)的更新值A(chǔ)w;
[0008]4.工作節(jié)點(diǎn)將新計(jì)算的模型參數(shù)w或者模型參數(shù)的更新值A(chǔ)w推送給服務(wù)節(jié)點(diǎn),進(jìn)行參數(shù)更新和同步。
[0009]上述中的步驟2、3、4,是迭代計(jì)算中的關(guān)鍵步驟,并且通過全局模型參數(shù)讀寫訪問接口獲取計(jì)算所需的模型參數(shù)以及將新計(jì)算的模型參數(shù)或者模型參數(shù)的更新值推送給服務(wù)節(jié)點(diǎn),是系統(tǒng)中網(wǎng)絡(luò)傳輸?shù)闹饕搭^。
[0010]對(duì)于步驟2,由于模型參數(shù)的規(guī)模巨大,由此引發(fā)的網(wǎng)絡(luò)傳輸量也是巨大的,在網(wǎng)絡(luò)帶寬資源一定的情況下,對(duì)于一個(gè)工作節(jié)點(diǎn),迭代計(jì)算過程中的網(wǎng)絡(luò)等待時(shí)間大于計(jì)算時(shí)間,使得整個(gè)模型訓(xùn)練的時(shí)間加長(zhǎng);當(dāng)多個(gè)工作節(jié)點(diǎn)同時(shí)觸發(fā)網(wǎng)絡(luò)傳輸時(shí),出現(xiàn)帶寬資源競(jìng)爭(zhēng)現(xiàn)象,網(wǎng)絡(luò)等待時(shí)間會(huì)變得更長(zhǎng)。工作節(jié)點(diǎn)觸發(fā)傳輸模型參數(shù)的行為和上層應(yīng)用邏輯密切相關(guān)。當(dāng)前參數(shù)服務(wù)器架構(gòu)中提供的底層接口只是全局參數(shù)訪問的統(tǒng)一接口,這樣使得系統(tǒng)的訪問全局參數(shù)的行為和應(yīng)用邏輯緊耦合,不利于從系統(tǒng)底層進(jìn)行優(yōu)化。
[0011]對(duì)于步驟3,工作節(jié)點(diǎn)計(jì)算模型參數(shù),這一操作是計(jì)算密集型的操作,在當(dāng)前眾核、多核時(shí)代,如何最大化并行該計(jì)算任務(wù),對(duì)于提高系統(tǒng)的并發(fā)度至關(guān)重要。當(dāng)前的分布式機(jī)器學(xué)習(xí)系統(tǒng)并沒有提供相應(yīng)并行化的編程接口,僅提供全局模型讀寫訪問接口,因此需要編程人員具有并行編程的經(jīng)驗(yàn),才能編寫高并發(fā)的機(jī)器學(xué)習(xí)應(yīng)用程序。
[0012]對(duì)于步驟4,針對(duì)參數(shù)同步中網(wǎng)絡(luò)傳輸?shù)钠款i,現(xiàn)有2種解決方案:一種是改變同步模型,即允許不同工作節(jié)點(diǎn)的迭代進(jìn)度有一定的差異,當(dāng)?shù)M(jìn)度的差異達(dá)到一定閾值后,再進(jìn)行批量同步(BSP,Bulk Synchronous Parallel),此種方案一定程度上緩解了網(wǎng)絡(luò)帶寬資源競(jìng)爭(zhēng)的情況;另一種解決方案是控制參數(shù)服務(wù)器資源占用情況,為不同工作節(jié)點(diǎn)選取不同的同步時(shí)間間隔來避免請(qǐng)求突發(fā)情況,同時(shí)保證選取的時(shí)間間隔能夠同時(shí)滿足降低通信頻率和確保訓(xùn)練準(zhǔn)確率。

【發(fā)明內(nèi)容】

[0013]針對(duì)現(xiàn)有技術(shù)的上述缺陷或改進(jìn)需求,本發(fā)明提供了適用于分布式機(jī)器學(xué)習(xí)的任務(wù)自動(dòng)化并行的方法及其系統(tǒng)。首先,通過將模型參數(shù)的訪問接口和應(yīng)用程序邏輯解耦,這樣使得系統(tǒng)對(duì)于模型參數(shù)的訪問行為具有運(yùn)行時(shí)可調(diào)節(jié)的特性,這樣為網(wǎng)絡(luò)傳輸?shù)囊约跋到y(tǒng)底層并行化等的優(yōu)化提供了基礎(chǔ)。其次,將應(yīng)用邏輯分解成若干階段,并由此構(gòu)建有向無環(huán)圖(directed acyclic graph,簡(jiǎn)稱DAG)去描述各個(gè)計(jì)算階段之間的依賴關(guān)系,運(yùn)行時(shí)系統(tǒng)通過DAG自動(dòng)化將任務(wù)進(jìn)行劃分和并行執(zhí)行,提高系統(tǒng)并發(fā)度。以上方法和系統(tǒng)可以有效地解決現(xiàn)有分布式機(jī)器學(xué)習(xí)系統(tǒng)中網(wǎng)絡(luò)傳輸瓶頸問題以及提高系統(tǒng)并發(fā)度,從而提高系統(tǒng)的整體性能。
[0014]為了實(shí)現(xiàn)上述目的,按照本發(fā)明的一個(gè)方面,提供了一種適用于分布式機(jī)器學(xué)習(xí)的任務(wù)自動(dòng)化并行方法及其系統(tǒng),具體包括工作節(jié)點(diǎn)模塊、服務(wù)節(jié)點(diǎn)模塊、主節(jié)點(diǎn)模塊、張量模塊、調(diào)度模塊、消息跟蹤模塊、階段模塊、階段組模塊以及執(zhí)行引擎模塊。其中階段模塊、調(diào)度模塊都和張量模塊相連;階段模塊與階段組模塊相連;引擎執(zhí)行模塊和階段模塊相連;調(diào)度模塊、張量模塊、階段組都和張量模塊相連。
[0015]所述的工作節(jié)點(diǎn)模塊和服務(wù)節(jié)點(diǎn)模塊,分別是針對(duì)工作節(jié)點(diǎn)和參數(shù)服務(wù)節(jié)點(diǎn)的行為的抽象描述,且這兩個(gè)模塊對(duì)機(jī)器學(xué)習(xí)編程人員是透明的。
[0016]所述的主節(jié)點(diǎn)模塊,是對(duì)于主節(jié)點(diǎn)的抽象描述。主節(jié)點(diǎn)的作用是協(xié)調(diào)整個(gè)系統(tǒng)的工作流程,如系統(tǒng)的初始化以及系統(tǒng)的結(jié)束。前面所述的系統(tǒng)模塊,除了工作節(jié)點(diǎn)模塊、月艮務(wù)節(jié)點(diǎn)模塊、主節(jié)點(diǎn)模塊外的其他模塊都存在于所有節(jié)點(diǎn)中。
[0017]所述張量模塊用于描述機(jī)器學(xué)習(xí)中模型參數(shù)的鍵值對(duì)(key,value)。應(yīng)用程序需要多種張量對(duì)象來描述訓(xùn)練所需的模型參數(shù),每個(gè)張量對(duì)象具有tensorjd屬性作為其唯一標(biāo)識(shí)。張量對(duì)象的類型有三種:全局可共享的(global shared)、全局唯一的(globalunique)和本地的(local)。全局可共享的表示該張量對(duì)象被分布式節(jié)點(diǎn)維護(hù),不同的節(jié)點(diǎn)之間維護(hù)的數(shù)據(jù)可以具有交集;全局唯一的表示該張量對(duì)象被分布式節(jié)點(diǎn)維護(hù),不同的節(jié)點(diǎn)之間維護(hù)的沒有交集;本地的表示該張量對(duì)象只存在于一個(gè)節(jié)點(diǎn)中。張量對(duì)象具有加載(load)、拉取(pull)、推送(push)等操作接口供編程人員使用。
[0018]所述階段模塊,用于描述應(yīng)用程序中某段程序邏輯。本發(fā)明把應(yīng)用程序的整體邏輯分解成不同的階段,且每個(gè)階段對(duì)象含有stage_id屬性作為其唯一標(biāo)識(shí)。階段對(duì)象之間,可通過設(shè)置依賴函數(shù)Set_dependenCy設(shè)置它們之間的依賴關(guān)系。階段對(duì)象需要若干張量對(duì)象作為其輸入以及一個(gè)可選的輸出。對(duì)于階段而言其輸入具有2種類型,一種被稱為主變量primary_variable,另一種被稱為輔助性變量 secondary_variable。主變量的(key,value)對(duì),其key之間沒有依賴關(guān)系,而輔助性變量的(key,value)對(duì),其key之間具有依賴關(guān)系。對(duì)于一個(gè)階段,編程人員需要提供核心函數(shù)kernel_funct1n,作為此階段的核心邏輯。同時(shí)編程人員還需要提供主變量的鍵和輔助性變量的鍵之間的映射函數(shù)(key_project 1n函數(shù)),運(yùn)行時(shí)系統(tǒng)自動(dòng)根據(jù)主變量的鍵以及key_project1n函數(shù)推導(dǎo)出輔助變量的鍵。針對(duì)階段的每個(gè)主變量和輔助變量,都有一個(gè)對(duì)應(yīng)的變量稱為update_Variable(3update_variable用于更新對(duì)應(yīng)的變量,而更新邏輯由用戶提供的update_funct1n定義。
[0019]所述階段組模塊,用于描述一組階段。階段組所表示的這組階段之間聯(lián)系緊密。階段組具有屬性group_id作為其唯一標(biāo)識(shí)。階段組具有run和set_barrie;r這兩個(gè)接口 ^un方法的可選參數(shù)是一個(gè)整型數(shù)num_run,用于指定此階段組的執(zhí)行次數(shù)。s e t_bar r i e r接口用于設(shè)置同步操作,表示當(dāng)前此階段組執(zhí)行完之后,需要所有工作節(jié)點(diǎn)進(jìn)入柵欄同步等待狀態(tài),當(dāng)所有工作節(jié)點(diǎn)的該階段組執(zhí)行完之后,才能繼續(xù)運(yùn)行。
[0020]所述調(diào)度模塊用于決策對(duì)于某個(gè)張量對(duì)象,工作節(jié)點(diǎn)下階段需要處理的鍵的集合keyset。服務(wù)節(jié)點(diǎn)上的調(diào)度模塊定時(shí)廣播其節(jié)點(diǎn)上的帶寬信息,工作節(jié)點(diǎn)上的調(diào)度模塊根據(jù)其獲取的服務(wù)節(jié)點(diǎn)的帶寬信息,決策分配工作節(jié)點(diǎn)下次需要處理的模型參數(shù)的鍵的集入口 ο
[0021]所述引擎執(zhí)行模塊,用于將階段組中的階段及其相互依賴關(guān)系描述為有向無環(huán)圖(directed acyclic graph,簡(jiǎn)稱DAG),在該有向無環(huán)圖中,圖中的結(jié)點(diǎn)表示階段,圖中的有向邊表示階段之間的依賴關(guān)系,邊的尾部的階段要先于邊的頭部的階段執(zhí)行。
[0022]所述消息跟蹤模塊,用于記錄程序運(yùn)行中由張量模塊、調(diào)度模塊、階段組模塊、工作節(jié)點(diǎn)模塊、服務(wù)節(jié)點(diǎn)模塊、主節(jié)點(diǎn)模塊提交的消息,當(dāng)消息交付給消息跟蹤模塊,消息跟蹤模塊負(fù)責(zé)將消息傳輸給接收方,接收方返回消息回執(zhí)之后,消息跟蹤模塊負(fù)責(zé)通知消息的初始發(fā)起方,并交付回執(zhí)消息。
[0023]相應(yīng)地,本發(fā)明還提供了一種適用于分布式機(jī)器學(xué)習(xí)的任務(wù)自動(dòng)化并行方法,用于在分布式機(jī)器學(xué)習(xí)算法場(chǎng)景中進(jìn)行任務(wù)的自動(dòng)劃分以及自動(dòng)并行執(zhí)行,包括系統(tǒng)初始化步驟、并行訓(xùn)練步驟和系統(tǒng)結(jié)束步驟,其中:
[0024](I)系統(tǒng)初始化步驟:初始化節(jié)點(diǎn)拓?fù)湫畔⒁约俺跏蓟瘧?yīng)用程序邏輯,具體包括以下子步驟:
[0025](1.1)所有節(jié)點(diǎn)開始運(yùn)行,分別讀取配置文件,確定自己的角色轉(zhuǎn)子步驟(1.2),所述角色為工作節(jié)點(diǎn)或者服務(wù)節(jié)點(diǎn)或者主節(jié)點(diǎn);
[0026](1.2)工作節(jié)點(diǎn)、服務(wù)節(jié)點(diǎn)分別和主節(jié)點(diǎn)通信,告知主節(jié)點(diǎn)其節(jié)點(diǎn)信息,主節(jié)點(diǎn)將收集到的節(jié)點(diǎn)信息廣播給其他所有節(jié)點(diǎn),轉(zhuǎn)步驟(1.3);
[0027](1.3)工作節(jié)點(diǎn)和服務(wù)節(jié)點(diǎn)收到主節(jié)點(diǎn)發(fā)送的節(jié)點(diǎn)信息之后,初始化節(jié)點(diǎn)拓?fù)湫畔?,用于以后?jié)點(diǎn)之間的通信;轉(zhuǎn)步驟(1.4);
[0028](1.4)工作節(jié)點(diǎn)和服務(wù)節(jié)點(diǎn)初始化應(yīng)用程序邏輯,運(yùn)行時(shí)系統(tǒng)根據(jù)階段組在程序代碼中出現(xiàn)的先后順序確定階段組的先后執(zhí)行順序,同時(shí)構(gòu)建每個(gè)階段組對(duì)應(yīng)的DAG;轉(zhuǎn)步驟⑵;
[0029](2)并行訓(xùn)練步驟:主節(jié)點(diǎn)和服務(wù)節(jié)點(diǎn)均跳過具體的訓(xùn)練邏輯,進(jìn)入步驟(3),各個(gè)工作節(jié)點(diǎn)進(jìn)入模型訓(xùn)練狀態(tài),工作節(jié)點(diǎn)根據(jù)輸入的訓(xùn)練數(shù)據(jù)子集進(jìn)行迭代式并行訓(xùn)練,直到滿足事先定義好的迭代結(jié)束條件,工作節(jié)點(diǎn)的行為具體包括下述子步驟:
[0030](2.1)工作節(jié)點(diǎn)的運(yùn)行時(shí)系統(tǒng)對(duì)于已經(jīng)確定先后順序的每個(gè)階段組,將其DAG上的結(jié)點(diǎn)進(jìn)行拓?fù)渑判蛞源_定每個(gè)階段組內(nèi)所有階段的執(zhí)行順序;轉(zhuǎn)步驟(2.2);
[0031 ] (2.2)將當(dāng)前未執(zhí)行的階段組稱為11611:_81'0卯;置11611:_81'0卯為機(jī)器學(xué)習(xí)應(yīng)用邏輯第一次出現(xiàn)的階段組;轉(zhuǎn)步驟(2.3),如果當(dāng)前沒有未執(zhí)行的階段組,則轉(zhuǎn)步驟(2.6);
[0032](2.3)將11611:_81'0卯表示的階段組的1'1111方法執(zhí)行1111111_1'1111(1111111_1'1111是用戶啟動(dòng)程序時(shí)提供的參數(shù))次,對(duì)于單次的run方法,運(yùn)行時(shí)創(chuàng)建一批線程,按照步驟(2.1)所確定的該階段組內(nèi)階段的執(zhí)行順序,依次執(zhí)行所有的階段的run方法,編號(hào)小的階段先執(zhí)行,具有相同編號(hào)的階段并行執(zhí)行,該階段組執(zhí)行完num_run次之后轉(zhuǎn)步驟(2.4);
[0033](2.4)工作節(jié)點(diǎn)的運(yùn)行時(shí)系統(tǒng)判斷當(dāng)前已經(jīng)執(zhí)行num_run次的階段組是否設(shè)置了set_barrier,如果設(shè)置了 set_barrier,進(jìn)行柵欄同步操作;轉(zhuǎn)步驟(2.5);
[0034](2.5)如果當(dāng)前還有未執(zhí)行的階段組,將11以丨_8抓即置為當(dāng)前未執(zhí)行的階段組,轉(zhuǎn)步驟(2.3),否則轉(zhuǎn)步驟(2.6);
[0035](2.6)工作節(jié)點(diǎn)運(yùn)行時(shí)判斷是否到達(dá)迭代結(jié)束條件,如果到達(dá)結(jié)束條件,轉(zhuǎn)步驟
(3),否則轉(zhuǎn)步驟(2.1);
[0036](3)系統(tǒng)結(jié)束步驟:工作節(jié)點(diǎn)告知主節(jié)點(diǎn)其工作完成,主節(jié)點(diǎn)檢測(cè)到所有工作節(jié)點(diǎn)的工作完成之后,協(xié)調(diào)通知所有節(jié)點(diǎn)退出程序,具體包括以下子步驟:
[OO3 7 ] (3.1)所有工作節(jié)點(diǎn)向主節(jié)點(diǎn)發(fā)送j ο b _d ο n e消息,主節(jié)點(diǎn)收到所有工作節(jié)點(diǎn)的job_done消息之后,主節(jié)點(diǎn)向所有工作節(jié)點(diǎn)和服務(wù)節(jié)點(diǎn)發(fā)送sys_exit消息,轉(zhuǎn)步驟(3.2);
[0038](3.2)工作節(jié)點(diǎn)和服務(wù)節(jié)點(diǎn)收到sys_exit消息之后,工作節(jié)點(diǎn)和服務(wù)節(jié)點(diǎn)向主節(jié)點(diǎn)發(fā)送sys_exit_ack消息,轉(zhuǎn)步驟(3.3);
[0039](3.3)主節(jié)點(diǎn)收到所有工作節(jié)點(diǎn)和服務(wù)節(jié)點(diǎn)發(fā)來的sys_exit_ack消息,轉(zhuǎn)步驟
(3.4);
[0040](3.4)所有節(jié)點(diǎn)結(jié)束程序。
[0041]上述步驟(2.1)中確定階段組內(nèi)階段的執(zhí)行順序的流程具體地包括以下子步驟:
[0042](2.1.1)將當(dāng)前未分配的號(hào)碼order置為O,將當(dāng)前入度為O的結(jié)點(diǎn)集合nodes置為空,轉(zhuǎn)步驟(2.1.2);
[0043](2.1.2)將當(dāng)前DAG中入度為O的結(jié)點(diǎn)添加到集合nodes中,對(duì)結(jié)點(diǎn)集合nodes中的所有結(jié)點(diǎn)都編號(hào)為order ,order自增I;將結(jié)點(diǎn)集合nodes中的結(jié)點(diǎn)及其所有出邊從DAG圖中去掉,將nodes集合置為空,轉(zhuǎn)步驟(2.1.3);
[0044](2.1.3)判斷當(dāng)前DAG是否為空,如果為空則轉(zhuǎn)步驟(2.2),否則轉(zhuǎn)步驟(2.1.2)。
[0045]上述步驟(2.3)中所述的階段的run方法,具體包括以下子步驟:
[0046](2.3.1)工作節(jié)點(diǎn)的運(yùn)行時(shí)系統(tǒng)調(diào)用該階段的prepare_variables方法,確定當(dāng)前階段的主變量primary_variable要處理的鍵集合primary_key_set,具體地,首先根據(jù)調(diào)度模塊獲取的服務(wù)節(jié)點(diǎn)的負(fù)載情況(LI,L2,…,Ln)以及主變量primary_variable的鍵在服務(wù)節(jié)點(diǎn)上的分布情況,將網(wǎng)路負(fù)載最低的服務(wù)節(jié)點(diǎn)上維護(hù)的還未被工作節(jié)點(diǎn)處理的部分鍵的集合分配給工作節(jié)點(diǎn),作為下次要處理的鍵集合parimary_key_set,轉(zhuǎn)子步驟(2.3.2);
[0047](2.3.2)運(yùn)行時(shí)系統(tǒng)根據(jù)用戶提供的1^7_口1'0」6(31:;[011函數(shù),以及(2.3.1)中確定的主變量的鍵集合primary_key_Set推導(dǎo)出輔助變量的鍵集合SeCOndary_key_Set,調(diào)用該主變量和輔助變量等張量對(duì)象的pul I方法去拉取所需的模型參數(shù);轉(zhuǎn)步驟(2.3.3);
[0048](2.3.3)執(zhí)行該階段的核心函數(shù)kernel_funct1n,運(yùn)行時(shí)系統(tǒng)自動(dòng)將主變量的鍵的集合key_set自動(dòng)劃分為num_threads個(gè)部分,創(chuàng)建num_threads個(gè)線程并行化執(zhí)行核心函數(shù),其中num_threads是用戶提供的參數(shù),轉(zhuǎn)步驟(2.3.4);
[0049](2.3.4)運(yùn)行核心函數(shù)1^11161_;1^111(31:;[011產(chǎn)生更新變量¥_即(^七6,運(yùn)行時(shí)系統(tǒng)根據(jù)用戶提供的update_funct1n更新相應(yīng)的變量V;如果該變量V的類型是全局共享的或者全局唯一的,運(yùn)行時(shí)調(diào)用變量V的push函數(shù)進(jìn)行更新,將該變量要更新的(key ,value)對(duì)序列化;并將序列化后的數(shù)據(jù)發(fā)送給所有維護(hù)此區(qū)間key的服務(wù)節(jié)點(diǎn),服務(wù)節(jié)點(diǎn)收到更新數(shù)據(jù)后,更新其維護(hù)的數(shù)據(jù)。
[0050]上述(2.3.2)步驟中所描述的pull方法具有以下子步驟:
[0051](2.3.2.1)將該張量對(duì)象要拉取的鍵集合key_set序列化,并將序列化的數(shù)據(jù)發(fā)送給維護(hù)該段鍵集合的服務(wù)節(jié)點(diǎn),轉(zhuǎn)步驟(2.3.2.2);
[0052](2.3.2.2)服務(wù)節(jié)點(diǎn)收到pu 11消息之后,將key_set對(duì)應(yīng)的(key,value) 二元組數(shù)據(jù)序列化,并將序列化后的數(shù)據(jù)返回給請(qǐng)求方。
[0053]通過上述方法,總體而言本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,具有以下的優(yōu)點(diǎn)和技術(shù)效果:
[0054](I)本發(fā)明提供了相較于全局讀寫訪問接口抽象層次更高的一些編程模塊,這些模塊將讀寫訪問行為和應(yīng)用程序的邏輯進(jìn)行了解耦,一方面極大的方便了編程人員編寫應(yīng)用程序,另一方面為系統(tǒng)層面的優(yōu)化提供了基礎(chǔ);
[0055](2)本發(fā)明實(shí)現(xiàn)了機(jī)器學(xué)習(xí)任務(wù)的自動(dòng)化任務(wù)并行執(zhí)行,這大大減輕了應(yīng)用程序人員編寫高并發(fā)機(jī)器學(xué)習(xí)應(yīng)用的負(fù)擔(dān);
[0056](3)本發(fā)明開發(fā)的運(yùn)行時(shí)系統(tǒng)自動(dòng)根據(jù)各個(gè)服務(wù)節(jié)點(diǎn)的負(fù)載情況進(jìn)行任務(wù)的動(dòng)態(tài)劃分,充分利用了網(wǎng)絡(luò)帶寬資源。
【附圖說明】
[0057]圖1是本發(fā)明自動(dòng)化任務(wù)并行系統(tǒng)的模塊框圖;
[0058]圖2是本發(fā)明自動(dòng)化任務(wù)并行方法的整體工作流程圖;
[0059]圖3是本發(fā)明自動(dòng)化任務(wù)并行方法的系統(tǒng)初始化子工作流程圖;
[0060]圖4是本發(fā)明自動(dòng)化任務(wù)并行方法的并行訓(xùn)練子工作流程圖;
[0061]圖5是本發(fā)明自動(dòng)化任務(wù)并行方法的系統(tǒng)結(jié)束子工作流程圖;
【具體實(shí)施方式】
[0062]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
[0063]圖1是本發(fā)明自動(dòng)化任務(wù)并行執(zhí)行系統(tǒng)的模塊框圖。如圖1所示,本發(fā)明的自動(dòng)化任務(wù)并行系統(tǒng)具體包括工作節(jié)點(diǎn)模塊、服務(wù)節(jié)點(diǎn)模塊、主節(jié)點(diǎn)模塊、張量模塊、調(diào)度模塊、消息跟蹤模塊、階段模塊、階段組模塊以及執(zhí)行引擎模塊。其中階段模塊、調(diào)度模塊都和張量模塊相連;階段模塊與階段組模塊相連;引擎執(zhí)行模塊和階段模塊相連;調(diào)度模塊、張量模塊、階段組都和消息跟蹤模塊相連。
[0064]工作節(jié)點(diǎn)模塊和服務(wù)節(jié)點(diǎn)模塊,分別是針對(duì)工作節(jié)點(diǎn)和參數(shù)服務(wù)節(jié)點(diǎn)的行為的抽象描述,且這兩個(gè)模塊對(duì)機(jī)器學(xué)習(xí)編程人員是透明的。
[0065]主節(jié)點(diǎn)模塊,是對(duì)于主節(jié)點(diǎn)的抽象描述。主節(jié)點(diǎn)的作用是協(xié)調(diào)整個(gè)系統(tǒng)的工作流程,如系統(tǒng)的初始化以及系統(tǒng)的結(jié)束。前面所述的系統(tǒng)模塊,除了工作節(jié)點(diǎn)模塊、服務(wù)節(jié)點(diǎn)模塊、主節(jié)點(diǎn)模塊外的其他模塊都存在于所有節(jié)點(diǎn)中。
[0066]張量模塊用于描述機(jī)器學(xué)習(xí)中模型參數(shù)的鍵值對(duì)(key,value)。應(yīng)用程序需要多種張量對(duì)象來描述訓(xùn)練所需的模型參數(shù),每個(gè)張量對(duì)象具有tensorjd屬性作為其唯一標(biāo)識(shí)。張量對(duì)象的類型有三種:全局可共享的(global shared)、全局唯一的(global unique)和本地的(local)。全局可共享的表示該張量對(duì)象被分布式節(jié)點(diǎn)維護(hù),不同的節(jié)點(diǎn)之間維護(hù)的數(shù)據(jù)可以具有交集;全局唯一的表示該張量對(duì)象被分布式節(jié)點(diǎn)維護(hù),不同的節(jié)點(diǎn)之間維護(hù)的沒有交集;本地的表示該張量對(duì)象只存在于一個(gè)節(jié)點(diǎn)中。張量對(duì)象具有加載(load)、拉取(pul I)、推送(push)等操作接口供編程人員使用。
[0067]階段模塊,用于描述應(yīng)用程序中某段程序邏輯。本發(fā)明把應(yīng)用程序的整體邏輯分解成不同的階段,且每個(gè)階段對(duì)象含有stage_id屬性作為其唯一標(biāo)識(shí)。階段對(duì)象之間,可通過設(shè)置依賴函數(shù)set_dependency設(shè)置它們之間的依賴關(guān)系。階段對(duì)象需要若干張量對(duì)象作為其輸入以及一個(gè)可選的輸出。對(duì)于階段而言其輸入具有2種類型,一種被稱為主變量primary_variable,另一種被稱為輔助性變量 secondary_var iabl e。主變量的(key ,value)對(duì),其key之間沒有依賴關(guān)系,而輔助性變量的(key,value)對(duì),其key之間具有依賴關(guān)系。對(duì)于一個(gè)階段,編程人員需要提供核心函數(shù)kernel_funct1n,作為此階段的核心邏輯。同時(shí)編程人員還需要提供主變量的鍵和輔助性變量的鍵之間的映射函數(shù)key_project1n,運(yùn)行時(shí)系統(tǒng)自動(dòng)根據(jù)主變量的鍵以及key_pro ject1n函數(shù)推導(dǎo)出輔助變量的鍵。針對(duì)階段的每個(gè)主變量和輔助變量,都有一個(gè)對(duì)應(yīng)的變量稱為updatejariabledpdatejariable用于更新對(duì)應(yīng)的變量,而更新邏輯由用戶提供的updat e_f unc t i on定義。
[0068]階段組模塊,用于描述一組階段。階段組所表示的這組階段之間聯(lián)系緊密。階段組具有屬性group_id作為其唯一標(biāo)識(shí)。階段組具有run和set_barrie;r這兩個(gè)接口。!"皿方法的可選參數(shù)是一個(gè)整型數(shù)num_run,用于指定此階段組的執(zhí)行次數(shù)。set_barrie;r接口用于設(shè)置同步操作,表示當(dāng)前此階段組執(zhí)行完之后,需要所有工作節(jié)點(diǎn)進(jìn)入柵欄同步等待狀態(tài),當(dāng)所有工作節(jié)點(diǎn)的該階段組執(zhí)行完之后,才能繼續(xù)運(yùn)行。
[0069]調(diào)度模塊用于決策對(duì)于某個(gè)張量對(duì)象,工作節(jié)點(diǎn)下階段需要處理的鍵的集合key_set。服務(wù)節(jié)點(diǎn)上的調(diào)度模塊定時(shí)廣播其節(jié)點(diǎn)上的帶寬信息,工作節(jié)點(diǎn)上的調(diào)度模塊根據(jù)其獲取的服務(wù)節(jié)點(diǎn)的帶寬信息,決策分配工作節(jié)點(diǎn)下次需要處理的模型參數(shù)的鍵的集合。
[0070]引擎執(zhí)行模塊,用于將階段組中的階段及其相互依賴關(guān)系描述為有向無環(huán)圖(directed acyclic graph,簡(jiǎn)稱DAG),在該有向無環(huán)圖中,圖中的結(jié)點(diǎn)表示階段,圖中的有向邊表示階段之間的依賴關(guān)系,邊的尾部的階段要先于邊的頭部的階段執(zhí)行。
[0071 ]消息跟蹤模塊,用于記錄程序運(yùn)行中由張量模塊、調(diào)度模塊、階段組模塊、工作節(jié)點(diǎn)模塊、服務(wù)節(jié)點(diǎn)模塊、主節(jié)點(diǎn)模塊提交的消息,當(dāng)消息交付給消息跟蹤模塊,消息跟蹤模塊負(fù)責(zé)將消息傳輸給接收方,接收方返回消息回執(zhí)之后,消息跟蹤模塊負(fù)責(zé)通知消息的初始發(fā)起方,并交付回執(zhí)消息。
[0072]圖2是本發(fā)明自動(dòng)化任務(wù)并行方法的整體工作流程圖。如圖2所示,本發(fā)明自動(dòng)化任務(wù)并行方法的整體工作流程包括以下步驟:
[0073](I)系統(tǒng)初始化步驟:初始化節(jié)點(diǎn)拓?fù)湫畔⒁约俺跏蓟瘧?yīng)用程序邏輯;
[0074](2)并行訓(xùn)練步驟:主節(jié)點(diǎn)和服務(wù)節(jié)點(diǎn)均跳過具體的訓(xùn)練邏輯,進(jìn)入步驟(3),各個(gè)工作節(jié)點(diǎn)進(jìn)入模型訓(xùn)練狀態(tài),工作節(jié)點(diǎn)根據(jù)輸入的訓(xùn)練數(shù)據(jù)子集進(jìn)行迭代式并行訓(xùn)練,直到滿足事先定義好的迭代結(jié)束條件;
[0075](3)系統(tǒng)結(jié)束步驟:工作節(jié)點(diǎn)告知主節(jié)點(diǎn)其工作完成,主節(jié)點(diǎn)檢測(cè)到所有工作節(jié)點(diǎn)的工作完成之后,協(xié)調(diào)通知所有節(jié)點(diǎn)退出程序。
[0076]圖3是本發(fā)明自動(dòng)化任務(wù)并行執(zhí)行方法的系統(tǒng)初始化子工作流程圖。如圖3所示本發(fā)明自動(dòng)化任務(wù)并行執(zhí)行方法的系統(tǒng)初始化工作流程包括以下步驟:
[0077](1.1)所有節(jié)點(diǎn)開始運(yùn)行,分別讀取配置文件,確定自己的角色轉(zhuǎn)子步驟(1.2),所述的角色為工作節(jié)點(diǎn)或者服務(wù)節(jié)點(diǎn)或者主節(jié)點(diǎn);
[0078](1.2)工作節(jié)點(diǎn)、服務(wù)節(jié)點(diǎn)分別和主節(jié)點(diǎn)通信,告知主節(jié)點(diǎn)其節(jié)點(diǎn)信息,主節(jié)點(diǎn)將收集到的節(jié)點(diǎn)信息廣播給其他所有節(jié)點(diǎn),轉(zhuǎn)步驟(1.3);
[0079](1.3)工作節(jié)點(diǎn)和服務(wù)節(jié)點(diǎn)收到主節(jié)點(diǎn)發(fā)送的節(jié)點(diǎn)信息之后,初始化節(jié)點(diǎn)拓?fù)湫畔?,用于以后?jié)點(diǎn)之間的通信;轉(zhuǎn)步驟(1.4);
[0080](1.4)工作節(jié)點(diǎn)和服務(wù)節(jié)點(diǎn)初始化應(yīng)用程序邏輯,運(yùn)行時(shí)系統(tǒng)根據(jù)階段組在程序代碼中出現(xiàn)的先后順序確定階段組的先后執(zhí)行順序,同時(shí)構(gòu)建每個(gè)階段組對(duì)應(yīng)的DAG;轉(zhuǎn)步驟⑵。
[0081]圖4是本發(fā)明自動(dòng)化任務(wù)并行方法的并行訓(xùn)練子工作流程圖。如圖4所示,某工作節(jié)點(diǎn)的并行訓(xùn)練子工作流程,包括以下步驟:
[0082](2)并行訓(xùn)練步驟:主節(jié)點(diǎn)和服務(wù)節(jié)點(diǎn)均跳過具體的訓(xùn)練邏輯,進(jìn)入步驟(3),各個(gè)工作節(jié)點(diǎn)進(jìn)入模型訓(xùn)練狀態(tài),工作節(jié)點(diǎn)根據(jù)輸入的訓(xùn)練數(shù)據(jù)子集進(jìn)行迭代式并行訓(xùn)練,直到滿足事先定義好的迭代結(jié)束條件,工作節(jié)點(diǎn)的行為具體包括下述子步驟:
[0083](2.1)工作節(jié)點(diǎn)的運(yùn)行時(shí)系統(tǒng)對(duì)于已經(jīng)確定先后順序的每個(gè)階段組,將其DAG上的結(jié)點(diǎn)進(jìn)行拓?fù)渑判蛞源_定每個(gè)階段組內(nèi)所有階段的執(zhí)行順序;轉(zhuǎn)步驟(2.2);
[0084](2.2)將當(dāng)前未執(zhí)行的階段組稱為11611:_81'0卯;置11611:_81'0卯為機(jī)器學(xué)習(xí)應(yīng)用邏輯第一次出現(xiàn)的階段組;轉(zhuǎn)步驟(2.3),如果當(dāng)前沒有未執(zhí)行的階段組,則轉(zhuǎn)步驟(2.6);
[0085](2.3)將next_group表示的階段組的run方法執(zhí)行num_run(num_run是用戶啟動(dòng)程序時(shí)提供的參數(shù))次,對(duì)于單次的run方法,運(yùn)行時(shí)創(chuàng)建一批線程,按照步驟(2.1)所確定的該階段組內(nèi)階段的執(zhí)行順序,依次執(zhí)行所有的階段的run方法,編號(hào)小的階段先執(zhí)行,具有相同編號(hào)的階段并行執(zhí)行,該階段組執(zhí)行完num_run次之后轉(zhuǎn)步驟(2.4);
[0086](2.4)工作節(jié)點(diǎn)的運(yùn)行時(shí)系統(tǒng)判斷當(dāng)前已經(jīng)執(zhí)行num_run次的階段組是否設(shè)置了set_barrier,如果設(shè)置了 set_barrier,進(jìn)行柵欄同步操作;轉(zhuǎn)步驟(2.5);
[0087](2.5)如果當(dāng)前還有未執(zhí)行的階段組,將11以丨_8抓即置為當(dāng)前未執(zhí)行的階段組,轉(zhuǎn)步驟(2.3),否則轉(zhuǎn)步驟(2.6);
[0088](2.6)工作節(jié)點(diǎn)運(yùn)行時(shí)系統(tǒng)判斷是否到達(dá)迭代結(jié)束條件,如果到達(dá)結(jié)束條件,轉(zhuǎn)步驟(3),否則轉(zhuǎn)步驟(2.1)。
[0089]圖5是本發(fā)明自動(dòng)化任務(wù)并行方法的系統(tǒng)結(jié)束子工作流程圖。如圖5所示,本發(fā)明自動(dòng)化任務(wù)并行方法的系統(tǒng)結(jié)束子工作流程包括以下步驟:
[OO9O ] (3.1)所有工作節(jié)點(diǎn)向主節(jié)點(diǎn)發(fā)送j ο b _d ο n e消息,主節(jié)點(diǎn)收到所有工作節(jié)點(diǎn)的job_done消息之后,主節(jié)點(diǎn)向所有工作節(jié)點(diǎn)和服務(wù)節(jié)點(diǎn)發(fā)送sys_exit消息,轉(zhuǎn)步驟(3.2);
[0091](3.2)工作節(jié)點(diǎn)和服務(wù)節(jié)點(diǎn)收到sys_exit消息之后,工作節(jié)點(diǎn)和服務(wù)節(jié)點(diǎn)向主節(jié)點(diǎn)發(fā)送sys_exit_ack消息,轉(zhuǎn)步驟(3.3);
[0092](3.3)主節(jié)點(diǎn)收到所有工作節(jié)點(diǎn)和服務(wù)節(jié)點(diǎn)發(fā)來的sys_exit_ack消息,轉(zhuǎn)步驟
(3.4);
[0093](3.4)所有節(jié)點(diǎn)結(jié)束程序。
[0094]進(jìn)一步地,步驟(2.1)中確定階段組內(nèi)階段的執(zhí)行順序的流程具體地包括以下子步驟:
[0095](2.1.1)將當(dāng)前未分配的號(hào)碼order置為O,將當(dāng)前入度為O的結(jié)點(diǎn)集合nodes置為空,轉(zhuǎn)步驟(2.1.2);
[0096](2.1.2)將當(dāng)前DAG中入度為O的結(jié)點(diǎn)添加到集合nodes中,對(duì)結(jié)點(diǎn)集合nodes中的所有結(jié)點(diǎn)都編號(hào)為order ,order自增I;將結(jié)點(diǎn)集合nodes中的結(jié)點(diǎn)及其所有出邊從DAG圖中去掉,將nodes集合置為空,轉(zhuǎn)步驟(2.1.3);
[0097](2.1.3)判斷當(dāng)前DAG是否為空,如果為空則轉(zhuǎn)步驟(2.2),否則轉(zhuǎn)步驟(2.1.2)。
[0098]進(jìn)一步地,步驟(2.3)中所述的階段的run方法,具體包括以下子步驟:
[0099](2.3.I)工作節(jié)點(diǎn)的運(yùn)行時(shí)系統(tǒng)調(diào)用該階段的prepare_variables方法,確定當(dāng)前階段的主變量primary_variable要處理的鍵集合primary_key_set,具體地,首先根據(jù)調(diào)度模塊獲取的服務(wù)節(jié)點(diǎn)的負(fù)載情況(LI,L2,…,Ln)以及主變量primary_variable的鍵在服務(wù)節(jié)點(diǎn)上的分布情況,將網(wǎng)路負(fù)載最低的服務(wù)節(jié)點(diǎn)上維護(hù)的還未被工作節(jié)點(diǎn)處理的部分鍵的集合分配給工作節(jié)點(diǎn),作為下次要處理的鍵集合,轉(zhuǎn)子步驟(2.3.2);
[0?00] (2.3.2)運(yùn)行時(shí)系統(tǒng)根據(jù)用戶提供的key_project1n函數(shù),以及(2.3.1)中確定的主變量的鍵集合primary_key_Set推導(dǎo)出輔助變量的鍵集合SeCOndary_key_Set,調(diào)用該主變量和輔助變量等張量對(duì)象的pul I方法去拉取所需的模型參數(shù);轉(zhuǎn)步驟(2.3.3);
[0101](2.3.3)執(zhí)行該階段的核心函數(shù)1?51'1161_如11(31:;[011,運(yùn)行時(shí)系統(tǒng)自動(dòng)將主變量的鍵的集合key_set自動(dòng)劃分為num_threads個(gè)部分,創(chuàng)建num_threads個(gè)線程并行化執(zhí)行核心函數(shù),其中num_threads是用戶提供的參數(shù),轉(zhuǎn)步驟(2.3.4);
[0102](2.3.4)運(yùn)行核心函數(shù)kernel_funct1n產(chǎn)生更新變量v_update,運(yùn)行時(shí)系統(tǒng)根據(jù)用戶提供的update_funct1n更新相應(yīng)的變量V;如果該變量V的類型是全局共享的或者全局唯一的,運(yùn)行時(shí)調(diào)用變量V的push函數(shù)進(jìn)行更新,將該變量要更新的(key ,value)對(duì)序列化;并將序列化后的數(shù)據(jù)發(fā)送給所有維護(hù)此區(qū)間key的服務(wù)節(jié)點(diǎn),服務(wù)節(jié)點(diǎn)收到更新數(shù)據(jù)后,更新其維護(hù)的數(shù)據(jù)。
[0103]進(jìn)一步地,步驟(2.3.2)中所描述的pull方法具有以下子步驟:
[0104](2.3.2.1)將該張量對(duì)象要拉取的鍵集合key_set序列化,并將序列化的數(shù)據(jù)發(fā)送給維護(hù)該段鍵集合的服務(wù)節(jié)點(diǎn),轉(zhuǎn)步驟(2.3.2.2);
[0?05] (2.3.2.2)服務(wù)節(jié)點(diǎn)收到pull的消息之后,將key_set對(duì)應(yīng)的(key ,value)二元組數(shù)據(jù)序列化,并將序列化后的數(shù)據(jù)返回給請(qǐng)求方。
[0106]本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【主權(quán)項(xiàng)】
1.一種適用于分布式機(jī)器學(xué)習(xí)的自動(dòng)化任務(wù)并行系統(tǒng),其特征在于,包括工作節(jié)點(diǎn)模塊、服務(wù)節(jié)點(diǎn)模塊、主節(jié)點(diǎn)模塊、張量模塊、調(diào)度模塊、消息跟蹤模塊、階段模塊、階段組模塊以及執(zhí)行引擎模塊;其中階段模塊、調(diào)度模塊都和張量模塊相連;階段模塊與階段組模塊相連;引擎執(zhí)行模塊和階段模塊相連;調(diào)度模塊、張量模塊、階段組都和消息跟蹤模塊相連; 所述的工作節(jié)點(diǎn)模塊和服務(wù)節(jié)點(diǎn)模塊,分別用于針對(duì)工作節(jié)點(diǎn)和參數(shù)服務(wù)節(jié)點(diǎn)的行為進(jìn)行抽象描述; 所述的主節(jié)點(diǎn)模塊,用于對(duì)主節(jié)點(diǎn)的抽象描述,主節(jié)點(diǎn)是用于協(xié)調(diào)整個(gè)系統(tǒng)的工作流程,包括系統(tǒng)的初始化以及系統(tǒng)的結(jié)束; 所述張量模塊用于描述機(jī)器學(xué)習(xí)中模型參數(shù)的鍵值對(duì)(key ,value);應(yīng)用程序需要多種張量對(duì)象來描述訓(xùn)練所需的模型參數(shù),每個(gè)張量對(duì)象具有tensorjd屬性作為其唯一標(biāo)識(shí);張量對(duì)象的類型有三種:全局可共享的(global shared)、全局唯一的(global unique)和本地的(local);全局可共享的表示該張量對(duì)象被分布式節(jié)點(diǎn)維護(hù),不同的節(jié)點(diǎn)之間維護(hù)的數(shù)據(jù)可以具有交集;全局唯一的表示該張量對(duì)象被分布式節(jié)點(diǎn)維護(hù),不同的節(jié)點(diǎn)之間維護(hù)的沒有交集;本地的表示該張量對(duì)象只存在于一個(gè)節(jié)點(diǎn)中;張量對(duì)象具有加載(load)、拉取(pul I)、推送(push)等操作接口供編程人員使用; 所述階段模塊,用于描述應(yīng)用程序中某段程序邏輯,應(yīng)用程序的整體邏輯分解成不同的階段,且每個(gè)階段對(duì)象含有stage_id屬性作為其唯一標(biāo)識(shí);階段對(duì)象之間,可通過設(shè)置依賴函數(shù)set_dependency設(shè)置它們之間的依賴關(guān)系;階段對(duì)象需要若干張量對(duì)象作為其輸入以及一個(gè)可選的輸出;對(duì)于階段對(duì)象而言其輸入具有2種類型,一種被稱為主變量primary_variable,另一種被稱為輔助性變量secondary_variable;主變量的(key,value)對(duì),其key之間沒有依賴關(guān)系,而輔助性變量的(key ,value)對(duì),其key之間具有依賴關(guān)系;對(duì)于一個(gè)階段,編程人員需要提供核心函數(shù)kernelfunct1n,作為此階段的核心邏輯;同時(shí)編程人員還需要提供主變量的鍵和輔助性變量的鍵之間的映射函數(shù)key_project1n,運(yùn)行時(shí)系統(tǒng)自動(dòng)根據(jù)主變量的鍵以及key_project1n函數(shù)推導(dǎo)出輔助變量的鍵;針對(duì)階段的每個(gè)主變量和輔助變量,都有一個(gè)對(duì)應(yīng)的變量稱為update_variable ;update_variable用于更新對(duì)應(yīng)的變量,而更新邏輯由用戶提供的updat e_func t i on定義; 所述階段組模塊,用于描述一組階段;階段組所表示的這組階段之間聯(lián)系緊密;階段組具有屬性group_id作為其唯一標(biāo)識(shí);階段組具有run和set_barrie;r這兩個(gè)接口 ;run方法的可選參數(shù)是一個(gè)整型數(shù)num_run,用于指定此階段組的執(zhí)行次數(shù);set_barrie;r接口用于設(shè)置同步操作,表示當(dāng)前此階段組執(zhí)行完之后,需要所有工作節(jié)點(diǎn)進(jìn)入柵欄同步等待狀態(tài),當(dāng)所有工作節(jié)點(diǎn)的該階段組執(zhí)行完之后,才能繼續(xù)運(yùn)行; 所述調(diào)度模塊用于決策對(duì)于某個(gè)張量對(duì)象,工作節(jié)點(diǎn)下階段需要處理的鍵的集合key_set;服務(wù)節(jié)點(diǎn)上的調(diào)度器定時(shí)廣播其節(jié)點(diǎn)上的帶寬信息,工作節(jié)點(diǎn)上的調(diào)度器根據(jù)其獲取的服務(wù)節(jié)點(diǎn)的帶寬信息,決策分配工作節(jié)點(diǎn)下次需要處理的模型參數(shù)的鍵的集合; 所述執(zhí)行引擎模塊,用于將階段組中的階段及其相互依賴關(guān)系描述為有向無環(huán)圖(directed acyclic graph,簡(jiǎn)稱DAG),在該有向無環(huán)圖中,圖中的結(jié)點(diǎn)表示階段,圖中的有向邊表示階段之間的依賴關(guān)系,邊的尾部的階段要先于邊的頭部的階段執(zhí)行; 所述消息跟蹤模塊,用于記錄程序運(yùn)行中由張量模塊、調(diào)度模塊、工作組模塊、工作節(jié)點(diǎn)模塊、服務(wù)節(jié)點(diǎn)模塊、主節(jié)點(diǎn)模塊提交的消息,當(dāng)消息交付給消息跟蹤模塊,消息跟蹤模塊負(fù)責(zé)將消息傳輸給接收方,接收方返回消息回執(zhí)之后,消息跟蹤模塊負(fù)責(zé)通知消息的初始發(fā)起方,并交付回執(zhí)消息。2.一種適用于分布式機(jī)器學(xué)習(xí)的自動(dòng)化任務(wù)并行方法,其特征在于,包括系統(tǒng)初始化步驟、并行訓(xùn)練步驟和系統(tǒng)結(jié)束步驟,其中: (1)系統(tǒng)初始化步驟:初始化節(jié)點(diǎn)拓?fù)湫畔⒁约俺跏蓟瘧?yīng)用程序邏輯,具體包括以下子步驟: (1.1)所有節(jié)點(diǎn)開始運(yùn)行,分別讀取配置文件,確定自己的角色轉(zhuǎn)子步驟(1.2),所述角色為工作節(jié)點(diǎn)或者服務(wù)節(jié)點(diǎn)或者主節(jié)點(diǎn); (1.2)工作節(jié)點(diǎn)、服務(wù)節(jié)點(diǎn)分別和主節(jié)點(diǎn)通信,告知主節(jié)點(diǎn)其節(jié)點(diǎn)信息,主節(jié)點(diǎn)將收集到的節(jié)點(diǎn)信息廣播給其他所有節(jié)點(diǎn),轉(zhuǎn)步驟(1.3); (1.3)工作節(jié)點(diǎn)和服務(wù)節(jié)點(diǎn)收到主節(jié)點(diǎn)發(fā)送的節(jié)點(diǎn)信息之后,初始化節(jié)點(diǎn)拓?fù)湫畔?,用于以后?jié)點(diǎn)之間的通信;轉(zhuǎn)步驟(1.4); (1.4)工作節(jié)點(diǎn)和服務(wù)節(jié)點(diǎn)初始化應(yīng)用程序邏輯,運(yùn)行時(shí)系統(tǒng)根據(jù)階段組在程序代碼中出現(xiàn)的先后順序確定階段組的先后執(zhí)行順序,同時(shí)構(gòu)建每個(gè)階段組對(duì)應(yīng)的DAG;轉(zhuǎn)步驟(2); (2)并行訓(xùn)練步驟:主節(jié)點(diǎn)和服務(wù)節(jié)點(diǎn)均跳過具體的訓(xùn)練邏輯,進(jìn)入步驟(3),各個(gè)工作節(jié)點(diǎn)進(jìn)入模型訓(xùn)練狀態(tài),工作節(jié)點(diǎn)根據(jù)輸入的訓(xùn)練數(shù)據(jù)子集進(jìn)行迭代式并行訓(xùn)練,直到滿足事先定義好的迭代結(jié)束條件,工作節(jié)點(diǎn)的行為具體包括下述子步驟: (2.1)工作節(jié)點(diǎn)的運(yùn)行時(shí)系統(tǒng)對(duì)于已經(jīng)確定先后順序的每個(gè)階段組,將其DAG上的結(jié)點(diǎn)進(jìn)行拓?fù)渑判蛞源_定每個(gè)階段組內(nèi)所有階段的執(zhí)行順序;轉(zhuǎn)步驟(2.2); (2.2)將當(dāng)前未執(zhí)行的階段組稱為11611:_81'0卯;置11611:_81'0卯為機(jī)器學(xué)習(xí)應(yīng)用邏輯第一次出現(xiàn)的階段組;轉(zhuǎn)步驟(2.3),如果當(dāng)前沒有未執(zhí)行的階段組,則轉(zhuǎn)步驟(2.6); (2.3)將next_group表示的階段組的run方法執(zhí)行num_run(num_run是用戶啟動(dòng)程序時(shí)提供的參數(shù))次,對(duì)于單次的run方法,運(yùn)行時(shí)創(chuàng)建一批線程,按照步驟(2.1)所確定的該階段組內(nèi)階段的執(zhí)行順序,依次執(zhí)行所有的階段的run方法,編號(hào)小的階段先執(zhí)行,具有相同編號(hào)的階段并行執(zhí)行,該階段組執(zhí)行完num_run次之后轉(zhuǎn)步驟(2.4); ^.^工作節(jié)點(diǎn)的運(yùn)行時(shí)系統(tǒng)判斷當(dāng)前已經(jīng)執(zhí)行^^^^“欠的階段組是否設(shè)置了叱憶barrier,如果設(shè)置了 set_barrier,進(jìn)行柵欄同步操作;轉(zhuǎn)步驟(2.5);(2.5)如果當(dāng)前還有未執(zhí)行的階段組,將next_gr0up置為當(dāng)前未執(zhí)行的階段組,轉(zhuǎn)步驟(2.3),否則轉(zhuǎn)步驟(2.6); (2.6)工作節(jié)點(diǎn)的運(yùn)行時(shí)系統(tǒng)判斷是否到達(dá)迭代結(jié)束條件,如果到達(dá)結(jié)束條件,轉(zhuǎn)步驟(3),否則轉(zhuǎn)步驟(2.1); (3)系統(tǒng)結(jié)束步驟:工作節(jié)點(diǎn)告知主節(jié)點(diǎn)其工作完成,主節(jié)點(diǎn)檢測(cè)到所有工作節(jié)點(diǎn)的工作完成之后,協(xié)調(diào)通知所有節(jié)點(diǎn)退出程序,具體包括以下子步驟: (3.1)所有工作節(jié)點(diǎn)向主節(jié)點(diǎn)發(fā)送j ο b _ d ο n e消息,主節(jié)點(diǎn)收到所有工作節(jié)點(diǎn)的j ο b _done消息之后,主節(jié)點(diǎn)向所有工作節(jié)點(diǎn)和服務(wù)節(jié)點(diǎn)發(fā)送sys_exit消息,轉(zhuǎn)步驟(3.2); (3.2)工作節(jié)點(diǎn)和服務(wù)節(jié)點(diǎn)收到sys_exit消息之后,工作節(jié)點(diǎn)和服務(wù)節(jié)點(diǎn)向主節(jié)點(diǎn)發(fā)送sys_exit_ack消息,轉(zhuǎn)步驟(3.3); (3.3)主節(jié)點(diǎn)收到所有工作節(jié)點(diǎn)和服務(wù)節(jié)點(diǎn)發(fā)來的sys_exi t_ack消息,轉(zhuǎn)步驟(3.4); (3.4)所有節(jié)點(diǎn)結(jié)束程序。3.如權(quán)利要求2所述的適用于分布式機(jī)器學(xué)習(xí)的自動(dòng)化任務(wù)并行方法,其特征在于,所述步驟(2.1)中確定階段組內(nèi)階段的執(zhí)行順序的流程具體包括以下子步驟: (2.1.1)將當(dāng)前未分配的號(hào)碼order置為O,將當(dāng)前入度為O的結(jié)點(diǎn)集合nodes置為空,轉(zhuǎn)步驟(2.1.2); (2.1.2)將當(dāng)前DAG中入度為O的結(jié)點(diǎn)添加到集合nodes中,對(duì)結(jié)點(diǎn)集合nodes中的所有結(jié)點(diǎn)都編號(hào)為order ,order自增I;將結(jié)點(diǎn)集合nodes中的結(jié)點(diǎn)及其所有出邊從DAG圖中去掉,將nodes集合置為空,轉(zhuǎn)步驟(2.1.3); (2.1.3)判斷當(dāng)前DAG是否為空,如果為空則轉(zhuǎn)步驟(2.2),否則轉(zhuǎn)步驟(2.1.2)。4.如權(quán)利要求2所述的適用于分布式機(jī)器學(xué)習(xí)的自動(dòng)化任務(wù)并行方法,其特征在于,步驟(2.3)中所述的階段的run方法,具體包括以下子步驟: (2.3.1)工作節(jié)點(diǎn)的運(yùn)行時(shí)系統(tǒng)調(diào)用該階段的prepare_variabIes方法,確定當(dāng)前階段的主變量primary_variable要處理的鍵集合primary_key_set,具體地,首先根據(jù)調(diào)度模塊獲取的服務(wù)節(jié)點(diǎn)的負(fù)載情況(LI,L2,…,Ln)以及主變量primary_variable的鍵在服務(wù)節(jié)點(diǎn)上的分布情況,將網(wǎng)路負(fù)載最低的服務(wù)節(jié)點(diǎn)上維護(hù)的還未被工作節(jié)點(diǎn)處理的部分鍵的集合分配給工作節(jié)點(diǎn),作為下次要處理的鍵集合parimary_key_set,轉(zhuǎn)子步驟(2.3.2); (2.3.2)運(yùn)行時(shí)系統(tǒng)根據(jù)用戶提供的1^7_口1'0」6(31:;[011函數(shù),以及(2.3.1)中確定的主變量的鍵集合primary_key_set推導(dǎo)出輔助變量的鍵集合secondary_key_set,調(diào)用該主變量和輔助變量等張量對(duì)象的pull方法去拉取所需的模型參數(shù);轉(zhuǎn)步驟(2.3.3); (2.3.3)執(zhí)行該階段的核心函數(shù)kernel_f unc t i on,運(yùn)行時(shí)系統(tǒng)自動(dòng)將主變量的鍵的集合key_set自動(dòng)劃分為num_threads個(gè)部分,創(chuàng)建num_threads個(gè)線程并行化執(zhí)行核心函數(shù),其中num_threads是用戶提供的參數(shù),轉(zhuǎn)步驟(2.3.4); (2.3.4)運(yùn)行核心函數(shù)kernel_funct1n產(chǎn)生更新變量v_update,運(yùn)行時(shí)系統(tǒng)根據(jù)用戶提供的update_f unct1n更新相應(yīng)的變量V;如果該變量V的類型是全局共享的或者全局唯一的,運(yùn)行時(shí)調(diào)用變量V的push函數(shù)進(jìn)行更新,將該變量要更新的(key,vaIue)對(duì)序列化;并將序列化后的數(shù)據(jù)發(fā)送給所有維護(hù)此區(qū)間key的服務(wù)節(jié)點(diǎn),服務(wù)節(jié)點(diǎn)收到更新數(shù)據(jù)后,更新其維護(hù)的數(shù)據(jù)。5.如權(quán)利要求4所述的適用于分布式機(jī)器學(xué)習(xí)的自動(dòng)化任務(wù)并行方法,其特征在于,步驟(2.3.2)步驟中所描述的pull方法具有以下子步驟: (2.3.2.1)將該張量對(duì)象要拉取的鍵集合key_set序列化,并將序列化的數(shù)據(jù)發(fā)送給維護(hù)該段鍵集合的服務(wù)節(jié)點(diǎn),轉(zhuǎn)步驟(2.3.2.2); (2.3.2.2)服務(wù)節(jié)點(diǎn)收到pul I的消息之后,將key_set對(duì)應(yīng)的(key,value) 二元組數(shù)據(jù)序列化,并將序列化后的數(shù)據(jù)返回給請(qǐng)求方。
【文檔編號(hào)】G06F17/30GK105956021SQ201610255970
【公開日】2016年9月21日
【申請(qǐng)日】2016年4月22日
【發(fā)明人】廖小飛, 曹鎮(zhèn)山, 郭人通, 劉海坤, 金海 , 陸楓
【申請(qǐng)人】華中科技大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1