本發(fā)明涉及機(jī)器學(xué)習(xí)技術(shù)領(lǐng)域,特別涉及一種分布式系統(tǒng)中的訓(xùn)練模型的方法及設(shè)備。
背景技術(shù):
機(jī)器學(xué)習(xí)(machininglearning,ml)中構(gòu)建模型是數(shù)據(jù)挖掘(datamining,dm)任務(wù)的關(guān)鍵步驟。以一種通用并行框架(spark)為例,在構(gòu)建模型時(shí),可以由主節(jié)點(diǎn)(master)將任務(wù)下發(fā)到多個(gè)從節(jié)點(diǎn)(slave)執(zhí)行,在執(zhí)行任務(wù)時(shí)一般都需要經(jīng)歷多輪迭代運(yùn)算,每輪迭代運(yùn)算完畢后,每個(gè)從節(jié)點(diǎn)都需要將迭代運(yùn)算的結(jié)果上報(bào)給主節(jié)點(diǎn),由主節(jié)點(diǎn)對模型進(jìn)行更新,并將更新后的參數(shù)下發(fā)給各個(gè)從節(jié)點(diǎn),各個(gè)從節(jié)點(diǎn)再開始執(zhí)行下一輪迭代運(yùn)算。
可見,主節(jié)點(diǎn)需要進(jìn)行多次模型更新及參數(shù)下發(fā),對于大規(guī)模訓(xùn)練場景來說,主節(jié)點(diǎn)的工作量較為繁重,給主節(jié)點(diǎn)帶來了較大的負(fù)擔(dān),也容易使得主節(jié)點(diǎn)成為整個(gè)訓(xùn)練場景的瓶頸。
技術(shù)實(shí)現(xiàn)要素:
本申請?zhí)峁┮环N分布式系統(tǒng)中的訓(xùn)練模型的方法及設(shè)備,用于在進(jìn)行模型訓(xùn)練時(shí)減輕主節(jié)點(diǎn)的負(fù)擔(dān),提高模型訓(xùn)練的效率。
第一方面,提供第一種分布式系統(tǒng)中的訓(xùn)練模型的方法,該分布式系統(tǒng)包括主節(jié)點(diǎn)和多個(gè)從節(jié)點(diǎn);每個(gè)從節(jié)點(diǎn)包括至少一個(gè)參數(shù)服務(wù)器和至少一個(gè)參數(shù)客戶端,其中每個(gè)參數(shù)服務(wù)器中存儲(chǔ)有該模型對應(yīng)的一個(gè)子模型,且每個(gè)參數(shù)服務(wù)器中存儲(chǔ)的子模型不同,該模型對應(yīng)的子模型為對該模型進(jìn)行切分得到的,該方法包括:第一從節(jié)點(diǎn)中的參數(shù)服務(wù)器接收該分布式系統(tǒng)中至少一個(gè)從節(jié)點(diǎn)中的參數(shù)客戶端發(fā)送的訓(xùn)練結(jié)果,第一從節(jié)點(diǎn)中的參數(shù)服務(wù)器根據(jù)接收的 訓(xùn)練結(jié)果更新其存儲(chǔ)的子模型。其中,第一從節(jié)點(diǎn)為分布式系統(tǒng)中的任一從節(jié)點(diǎn),每個(gè)從節(jié)點(diǎn)的參數(shù)客戶端通過執(zhí)行與該從節(jié)點(diǎn)的參數(shù)服務(wù)器上存儲(chǔ)的子模型對應(yīng)的訓(xùn)練任務(wù)以得到訓(xùn)練結(jié)果。
在分布式系統(tǒng)的從節(jié)點(diǎn)中設(shè)置參數(shù)服務(wù)器和參數(shù)客戶端,主節(jié)點(diǎn)可以將待訓(xùn)練的模型進(jìn)行切分,將切分得到的子模型存儲(chǔ)在不同的參數(shù)服務(wù)器中,參數(shù)客戶端用于進(jìn)行訓(xùn)練過程,參數(shù)服務(wù)器可以更新子模型,那么多個(gè)參數(shù)服務(wù)器可以分別更新子模型,也就相當(dāng)于主模型得到了更新,這樣,主節(jié)點(diǎn)只需切分模型,更新模型的工作就從主節(jié)點(diǎn)轉(zhuǎn)移到了多個(gè)參數(shù)服務(wù)器,從而實(shí)現(xiàn)了模型訓(xùn)練的并行,提高了模型訓(xùn)練的效率,同時(shí),主節(jié)點(diǎn)的負(fù)擔(dān)也得到了較大幅度的減少。
結(jié)合第一方面,在第一方面的第一種可能的實(shí)現(xiàn)方式中,第一從節(jié)點(diǎn)中的參數(shù)服務(wù)器根據(jù)接收的訓(xùn)練結(jié)果更新其存儲(chǔ)的子模型之后,還可以將存儲(chǔ)的子模型更新后得到的參數(shù)發(fā)送給該分布式系統(tǒng)中的至少一個(gè)從節(jié)點(diǎn)中的參數(shù)客戶端,該參數(shù)用于至少一個(gè)從節(jié)點(diǎn)中的參數(shù)客戶端對相應(yīng)的從節(jié)點(diǎn)中的參數(shù)服務(wù)器存儲(chǔ)的子模型進(jìn)行后續(xù)訓(xùn)練。
第一從節(jié)點(diǎn)中的參數(shù)服務(wù)器在更新存儲(chǔ)的子模型后會(huì)得到一些參數(shù),該參數(shù)服務(wù)器可以將得到的參數(shù)發(fā)給至少一個(gè)從節(jié)點(diǎn)中的參數(shù)客戶端,這樣可以使得這些參數(shù)客戶端根據(jù)這些參數(shù)繼續(xù)對模型進(jìn)行訓(xùn)練,從而保證各個(gè)參數(shù)客戶端能夠?qū)δP瓦M(jìn)行正常的訓(xùn)練,避免出錯(cuò)。
結(jié)合第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式,在第一方面的第二種可能的實(shí)現(xiàn)方式中,第一從節(jié)點(diǎn)中的參數(shù)服務(wù)器接收的訓(xùn)練結(jié)果中包括第一訓(xùn)練結(jié)果,第一訓(xùn)練結(jié)果為第一從節(jié)點(diǎn)中的參數(shù)客戶端對第一從節(jié)點(diǎn)中的參數(shù)服務(wù)器存儲(chǔ)的子模型進(jìn)行n次訓(xùn)練后得到的,n為正整數(shù)。
有一些有些訓(xùn)練結(jié)果對于全局來說可能不是很重要,或者可能無需每輪迭代都用這些訓(xùn)練結(jié)果來更新參數(shù)服務(wù)器中的子模型,因此,對于這類訓(xùn)練結(jié)果,參數(shù)客戶端可以迭代多次之后再發(fā)送給參數(shù)服務(wù)器,減少了需傳輸?shù)臄?shù)據(jù)量, 節(jié)省傳輸資源,也提高了訓(xùn)練效率。
結(jié)合第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式或第二種可能的實(shí)現(xiàn)方式,在第一方面的第三種可能的實(shí)現(xiàn)方式中,所述方法還包括:在第一從節(jié)點(diǎn)中的參數(shù)客戶端進(jìn)行第k輪訓(xùn)練完畢時(shí),第一從節(jié)點(diǎn)中的參數(shù)客戶端確定該分布式系統(tǒng)中訓(xùn)練速度最慢的參數(shù)客戶端正在訓(xùn)練的輪數(shù)與k之間的差值大于預(yù)設(shè)差值,則第一參數(shù)客戶端從工作狀態(tài)切換為等待狀態(tài),以等待訓(xùn)練速度最慢的參數(shù)客戶端進(jìn)行訓(xùn)練,在訓(xùn)練速度最慢的參數(shù)客戶端訓(xùn)練的輪數(shù)與k之間的差值小于等于預(yù)設(shè)差值時(shí),第一從節(jié)點(diǎn)中的參數(shù)客戶端可以從所述等待狀態(tài)切換為工作狀態(tài),其中k為正整數(shù)。
通過這種方式,盡量保證各個(gè)參數(shù)客戶端之間訓(xùn)練的輪數(shù)的差距不會(huì)太大,使得最終得到的模型收斂,最快的參數(shù)客戶端無需等到最慢的參數(shù)客戶端完全趕上后再進(jìn)行后續(xù)工作,節(jié)省時(shí)間,提高訓(xùn)練效率,而且也盡量保證速度快的參數(shù)客戶端可以保持訓(xùn)練速度,盡量減小對參數(shù)客戶端的性能的影響。
結(jié)合第一方面的第三種可能的實(shí)現(xiàn)方式,在第一方面的第四種可能的實(shí)現(xiàn)方式中,第一從節(jié)點(diǎn)中的參數(shù)客戶端從所述等待狀態(tài)切換為工作狀態(tài),可以是第一從節(jié)點(diǎn)中的參數(shù)客戶端開始進(jìn)行第k+1輪訓(xùn)練,或者也可以是第一從節(jié)點(diǎn)中的參數(shù)客戶端將第k輪訓(xùn)練得到的訓(xùn)練結(jié)果發(fā)送給第一從節(jié)點(diǎn)中的參數(shù)服務(wù)器,該訓(xùn)練結(jié)果用于第一從節(jié)點(diǎn)中的參數(shù)服務(wù)器更新其存儲(chǔ)的子模型。
第一從節(jié)點(diǎn)中的參數(shù)客戶端可以繼續(xù)進(jìn)行下一輪訓(xùn)練,即可以無需將每一輪得到的訓(xùn)練結(jié)果都發(fā)送給參數(shù)服務(wù)器,以減少需傳輸?shù)臄?shù)據(jù)量,或者也可以將得到的訓(xùn)練結(jié)果發(fā)送給參數(shù)服務(wù)器,以使得參數(shù)服務(wù)器中存儲(chǔ)的子模型得到較為及時(shí)的更新。至于第一從節(jié)點(diǎn)中的參數(shù)客戶端究竟該如何操作,可以由分布式系統(tǒng)預(yù)先設(shè)定,或者也可以由參數(shù)客戶端根據(jù)情況而定,較為靈活。
第二方面,提供第二種分布式系統(tǒng)中的訓(xùn)練模型的方法,該分布式系統(tǒng)包括主節(jié)點(diǎn)和多個(gè)從節(jié)點(diǎn),每個(gè)從節(jié)點(diǎn)包括至少一個(gè)參數(shù)服務(wù)器和至少一個(gè)參數(shù)客戶端,其中每個(gè)參數(shù)服務(wù)器中存儲(chǔ)有該模型對應(yīng)的一個(gè)子模型,且每個(gè)參數(shù) 服務(wù)器中存儲(chǔ)的子模型不同,該模型對應(yīng)的子模型為對主節(jié)點(diǎn)對該模型進(jìn)行切分得到的,該方法包括:主節(jié)點(diǎn)將用于訓(xùn)練該模型的原子任務(wù)分配給至少一個(gè)進(jìn)程,主節(jié)點(diǎn)建立任務(wù)管理進(jìn)程,任務(wù)管理進(jìn)程用于對至少一個(gè)進(jìn)程中的原子任務(wù)進(jìn)行管理。其中,所述模型的每個(gè)子模型都對應(yīng)至少一個(gè)訓(xùn)練任務(wù),一個(gè)訓(xùn)練任務(wù)包括至少一個(gè)原子任務(wù)。
通過設(shè)置任務(wù)管理進(jìn)程對各個(gè)原子任務(wù)進(jìn)行統(tǒng)一調(diào)度,各個(gè)進(jìn)程都在調(diào)度下工作,先執(zhí)行完任務(wù)的進(jìn)程不會(huì)竊取其他進(jìn)程中的原子任務(wù),有效解決了進(jìn)程搶占的問題,節(jié)省性能開銷,也避免了死鎖的風(fēng)險(xiǎn)。
結(jié)合第二方面,在第二方面的第一種可能的實(shí)現(xiàn)方式中,該方法還可以包括:主節(jié)點(diǎn)通過任務(wù)管理進(jìn)程接收第一原子任務(wù)發(fā)送的請求消息,請求消息用于請求執(zhí)行第一原子任務(wù),主節(jié)點(diǎn)通過任務(wù)管理進(jìn)程為第一原子任務(wù)分配第一執(zhí)行時(shí)長,并通過任務(wù)管理進(jìn)程將第一原子任務(wù)分配給第一從節(jié)點(diǎn)進(jìn)行處理;其中,第一原子任務(wù)為用于訓(xùn)練該模型的原子任務(wù)中的任意一個(gè)原子任務(wù),第一執(zhí)行時(shí)長為主節(jié)點(diǎn)根據(jù)第一原子任務(wù)的執(zhí)行時(shí)長預(yù)估的。
主節(jié)點(diǎn)可以通過任務(wù)管理進(jìn)行為原子任務(wù)分配執(zhí)行時(shí)長,則基本上從節(jié)點(diǎn)會(huì)按照分配的執(zhí)行時(shí)長去執(zhí)行原子任務(wù),主節(jié)點(diǎn)也知道為每個(gè)原子任務(wù)分配的執(zhí)行時(shí)長,從而,在一個(gè)原子任務(wù)的執(zhí)行時(shí)長還沒到達(dá)的時(shí)候,主節(jié)點(diǎn)可以不為該原子任務(wù)所占據(jù)的進(jìn)程分配新的原子任務(wù),避免多個(gè)任務(wù)搶占同一個(gè)進(jìn)程,進(jìn)一步節(jié)省了性能的開銷,避免了死鎖的風(fēng)險(xiǎn)。
第三方面,提供第一種分布式系統(tǒng)中的計(jì)算節(jié)點(diǎn),包括參數(shù)服務(wù)器和參數(shù)客戶端。其中,計(jì)算節(jié)點(diǎn)中的參數(shù)服務(wù)器存儲(chǔ)有待訓(xùn)練模型的一個(gè)或多個(gè)子模型,待訓(xùn)練模型的子模型是對待訓(xùn)練模型進(jìn)行切分得到的,且參數(shù)服務(wù)器上存儲(chǔ)的子模型與分布式系統(tǒng)中其它計(jì)算節(jié)點(diǎn)的參數(shù)服務(wù)器中存儲(chǔ)的子模型不同;該計(jì)算節(jié)點(diǎn)中的參數(shù)客戶端用于執(zhí)行該計(jì)算節(jié)點(diǎn)的參數(shù)服務(wù)器中存儲(chǔ)的所述一個(gè)或多個(gè)子模型對應(yīng)的訓(xùn)練任務(wù),以得到每個(gè)子模型的訓(xùn)練結(jié)果,其中,每個(gè)子模型對應(yīng)至少一個(gè)訓(xùn)練任務(wù)。該計(jì)算節(jié)點(diǎn)中的參數(shù)服務(wù)器用于接收該分布 式系統(tǒng)中的至少一個(gè)計(jì)算節(jié)點(diǎn)的參數(shù)客戶端發(fā)送的訓(xùn)練結(jié)果,并可以根據(jù)接收的訓(xùn)練結(jié)果更新存儲(chǔ)的子模型。
結(jié)合第三方面,在第三方面的第一種可能的實(shí)現(xiàn)方式中,該計(jì)算節(jié)點(diǎn)中的參數(shù)服務(wù)器還可以在根據(jù)接收的訓(xùn)練結(jié)果分別更新其存儲(chǔ)的子模型之后,將存儲(chǔ)的子模型更新后得到的參數(shù)分別發(fā)送給該分布式系統(tǒng)中的至少一個(gè)計(jì)算節(jié)點(diǎn)中的參數(shù)客戶端,該參數(shù)用于至少一個(gè)計(jì)算節(jié)點(diǎn)中的參數(shù)客戶端對相應(yīng)的計(jì)算節(jié)點(diǎn)中的參數(shù)服務(wù)器存儲(chǔ)的子模型進(jìn)行后續(xù)訓(xùn)練。
結(jié)合第三方面或第三方面的第一種可能的實(shí)現(xiàn)方式,在第三方面的第二種可能的實(shí)現(xiàn)方式中,該計(jì)算節(jié)點(diǎn)中的參數(shù)服務(wù)器接收的訓(xùn)練結(jié)果中包括第一訓(xùn)練結(jié)果,第一訓(xùn)練結(jié)果為該計(jì)算從節(jié)點(diǎn)中的參數(shù)客戶端對該計(jì)算節(jié)點(diǎn)的參數(shù)服務(wù)器存儲(chǔ)的子模型進(jìn)行n次訓(xùn)練后得到的,n為正整數(shù)。
結(jié)合第三方面或第三方面的第一種可能的實(shí)現(xiàn)方式或第二種可能的實(shí)現(xiàn)方式,在第三方面的第三種可能的實(shí)現(xiàn)方式中,該計(jì)算節(jié)點(diǎn)中的參數(shù)客戶端還用于:在該參數(shù)客戶端進(jìn)行第k輪訓(xùn)練完畢時(shí),確定該分布式系統(tǒng)中訓(xùn)練速度最慢的參數(shù)客戶端正在訓(xùn)練的輪數(shù)與k之間的差值大于預(yù)設(shè)差值,該參數(shù)客戶端從工作狀態(tài)切換為等待狀態(tài),以等待訓(xùn)練速度最慢的參數(shù)客戶端進(jìn)行訓(xùn)練,在訓(xùn)練速度最慢的參數(shù)客戶端訓(xùn)練的輪數(shù)與k之間的差值小于等于預(yù)設(shè)差值時(shí),該參數(shù)客戶端可以從等待狀態(tài)切換為工作狀態(tài),其中k為正整數(shù)。
結(jié)合第三方面的第三種可能的實(shí)現(xiàn)方式,在第三方面的第四種可能的實(shí)現(xiàn)方式中,該計(jì)算節(jié)點(diǎn)中的參數(shù)客戶端還可以用于開始進(jìn)行第k+1輪訓(xùn)練,或者還可以用于將第k輪訓(xùn)練得到的訓(xùn)練結(jié)果發(fā)送給該計(jì)算節(jié)點(diǎn)中的參數(shù)服務(wù)器,該訓(xùn)練結(jié)果用于該計(jì)算節(jié)點(diǎn)中的參數(shù)服務(wù)器更新其存儲(chǔ)的子模型。
第四方面,本發(fā)明實(shí)施例還提供另一種分布式系統(tǒng)中的計(jì)算節(jié)點(diǎn),該計(jì)算節(jié)點(diǎn)可以通過物理主機(jī)實(shí)現(xiàn),物理主機(jī)可以包括硬件器件以及軟件器件兩部分。其中,硬件器件的集合統(tǒng)稱為硬件層,軟件器件包括運(yùn)行在硬件層上的宿主機(jī),以及運(yùn)行在宿主機(jī)上的虛擬機(jī)。虛擬機(jī)利用硬件層提供的計(jì)算、存儲(chǔ)等 資源實(shí)現(xiàn)以上任一方面或任一方面的任一種實(shí)現(xiàn)方式所描述的參數(shù)服務(wù)器及參數(shù)客戶端的功能。計(jì)算節(jié)點(diǎn)包括的參數(shù)服務(wù)器和參數(shù)客戶端等可以通過計(jì)算節(jié)點(diǎn)中的虛擬機(jī)來實(shí)現(xiàn)。
第五方面,提供第三種分布式系統(tǒng)中的計(jì)算節(jié)點(diǎn),包括存儲(chǔ)器和處理器,其中,存儲(chǔ)器用于存儲(chǔ)指令,處理器,用于執(zhí)行存儲(chǔ)器存儲(chǔ)的指令,以實(shí)現(xiàn)以上任一方面或任一方面的任一種實(shí)現(xiàn)方式所描述的參數(shù)服務(wù)器及參數(shù)客戶端的功能。
第六方面,本發(fā)明實(shí)施例還提供一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),用于存儲(chǔ)實(shí)現(xiàn)上述任一方面或任一方面的任一種實(shí)現(xiàn)方式所描述的參數(shù)服務(wù)器及參數(shù)客戶端的功能的代碼或可執(zhí)行程序。本發(fā)明實(shí)施例中,將更新模型的工作從主節(jié)點(diǎn)轉(zhuǎn)移到多個(gè)參數(shù)服務(wù)器,減輕了主節(jié)點(diǎn)的負(fù)擔(dān),每個(gè)參數(shù)服務(wù)器可能只承擔(dān)對一部分子模型的更新工作,實(shí)現(xiàn)了模型訓(xùn)練的并行,盡量避免了主節(jié)點(diǎn)成為整個(gè)訓(xùn)練過程的瓶頸,提高了模型訓(xùn)練的效率。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對本發(fā)明實(shí)施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面所介紹的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1a-圖1b為本發(fā)明實(shí)施例提供的兩種分布式系統(tǒng)架構(gòu)圖;
圖2為本發(fā)明實(shí)施例提供的第一種訓(xùn)練模型的方法的流程圖;
圖3為本發(fā)明實(shí)施例提供的第二種訓(xùn)練模型的方法的流程圖;
圖4為本發(fā)明實(shí)施例提供的從節(jié)點(diǎn)的一種實(shí)現(xiàn)方式示意圖;
圖5為本發(fā)明實(shí)施例提供的主節(jié)點(diǎn)的一種實(shí)現(xiàn)方式示意圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明 實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明實(shí)施例保護(hù)的范圍。
還應(yīng)當(dāng)理解,盡管在本文中可能采用術(shù)語第一、第二等來描述各種組件,但這些術(shù)語僅用來將元件彼此區(qū)分開。本發(fā)明實(shí)施例中的“多個(gè)”是指兩個(gè)或兩個(gè)以上?!昂?或”,描述關(guān)聯(lián)對象的關(guān)聯(lián)關(guān)系,表示可以存在三種關(guān)系,例如,a和/或b,可以表示:單獨(dú)存在a,同時(shí)存在a和b,單獨(dú)存在b這三種情況。另外,字符“/”,如無特殊說明,一般表示前后關(guān)聯(lián)對象是一種“或”的關(guān)系。
請參見圖1a,為本發(fā)明實(shí)施例提供的一種可能的分布式系統(tǒng)架構(gòu)圖。
在圖1a中,該分布式系統(tǒng)包括主節(jié)點(diǎn)101及p個(gè)從節(jié)點(diǎn)102(圖1a中的p大于等于3),p為正整數(shù)。主節(jié)點(diǎn)101可以通過物理機(jī)實(shí)現(xiàn),或者也可以通過虛擬機(jī)實(shí)現(xiàn),同樣的,從節(jié)點(diǎn)102可以通過物理機(jī)實(shí)現(xiàn),或者也可以通過虛擬機(jī)實(shí)現(xiàn)。主節(jié)點(diǎn)101維護(hù)有一個(gè)或多個(gè)任務(wù)隊(duì)列,圖1a中以維護(hù)l個(gè)任務(wù)隊(duì)列為例(圖1a中的l大于等于3)。主節(jié)點(diǎn)101接收用戶通過客戶端(client)提交的任務(wù)列表(這里的客戶端可以是服務(wù)器或個(gè)人計(jì)算機(jī)等設(shè)備),將接收的任務(wù)列表中包括的任務(wù)分配到任務(wù)隊(duì)列中,主節(jié)點(diǎn)101可以包括調(diào)度器(scheduler),該調(diào)度器用于調(diào)度任務(wù)隊(duì)列中的任務(wù),以將任務(wù)分發(fā)到各個(gè)從節(jié)點(diǎn)102,從而實(shí)現(xiàn)任務(wù)的并行處理。
其中,該分布式系統(tǒng)可以用于進(jìn)行模型訓(xùn)練,一個(gè)模型可以對應(yīng)至少一個(gè)訓(xùn)練任務(wù),可以理解為,將一個(gè)模型對應(yīng)的訓(xùn)練任務(wù)執(zhí)行完畢后,該模型就訓(xùn)練完畢。一般來說,一個(gè)模型有幾組超參,該模型就對應(yīng)有幾個(gè)訓(xùn)練任務(wù)。其中,超參也稱為超參數(shù),超參數(shù)是指機(jī)器學(xué)習(xí)模型里面的框架參數(shù),比如聚類方法中類的個(gè)數(shù),或者話題模型中話題的個(gè)數(shù)等等。。比如模型1有2組超參,則可以確定模型1對應(yīng)2個(gè)訓(xùn)練任務(wù),把這2個(gè)訓(xùn)練任務(wù)執(zhí)行完畢,模型1就完成了一次訓(xùn)練。那么主節(jié)點(diǎn)101在向從節(jié)點(diǎn)102下發(fā)訓(xùn)練任務(wù)的時(shí)候,可以 把這兩個(gè)訓(xùn)練任務(wù)都下發(fā)給從節(jié)點(diǎn)1-3,從節(jié)點(diǎn)1-3在執(zhí)行這2個(gè)訓(xùn)練任務(wù)的過程中(從節(jié)點(diǎn)1-3可以分別完成這2個(gè)訓(xùn)練任務(wù)的不同部分)可以進(jìn)行多次迭代,一次迭代可以認(rèn)為是一次訓(xùn)練過程,等從節(jié)點(diǎn)1-3全部迭代完畢,則認(rèn)為這2個(gè)訓(xùn)練任務(wù)執(zhí)行完畢。那么,任務(wù)列表中包括的訓(xùn)練任務(wù)若對應(yīng)于多個(gè)模型,則主節(jié)點(diǎn)101可以將多個(gè)模型對應(yīng)的訓(xùn)練任務(wù)分別下發(fā)到從節(jié)點(diǎn)102執(zhí)行,這樣就實(shí)現(xiàn)了模型的并行訓(xùn)練。
從節(jié)點(diǎn)102中可以包括參數(shù)客戶端(parameterclient)1021,參數(shù)客戶端1021可以執(zhí)行主節(jié)點(diǎn)101分配的訓(xùn)練任務(wù),比如可以根據(jù)訓(xùn)練數(shù)據(jù)進(jìn)行多輪迭代運(yùn)算。各個(gè)從節(jié)點(diǎn)102中的參數(shù)客戶端1021接收主節(jié)點(diǎn)101分配的訓(xùn)練任務(wù)后,可以并發(fā)執(zhí)行訓(xùn)練任務(wù),如果這些訓(xùn)練任務(wù)屬于不同的模型,那么就實(shí)現(xiàn)了模型的并行訓(xùn)練。為描述方便,以下將待訓(xùn)練的模型稱為主模型,本發(fā)明實(shí)施例中,可以將主模型進(jìn)行拆分,一個(gè)主模型可以拆分為多個(gè)子模型,拆分后的子模型可以存儲(chǔ)到各個(gè)從節(jié)點(diǎn)的參數(shù)服務(wù)器(parameterserver)1022上,而各個(gè)子模型對應(yīng)的訓(xùn)練任務(wù)由各個(gè)從節(jié)點(diǎn)102中的參數(shù)客戶端1021來執(zhí)行。
在一個(gè)實(shí)施例中,一個(gè)從節(jié)點(diǎn)102中可以部署一個(gè)參數(shù)客戶端1021和一個(gè)參數(shù)服務(wù)器1022,請參見圖1a。進(jìn)一步的,在一個(gè)實(shí)施例中,如果從節(jié)點(diǎn)102是物理機(jī),那么參數(shù)客戶端1021和參數(shù)服務(wù)器1022可以分別是該從節(jié)點(diǎn)102上運(yùn)行的一臺(tái)虛擬機(jī)或一個(gè)進(jìn)程??蛇x的,系統(tǒng)中的各個(gè)參數(shù)服務(wù)器1022之間可以進(jìn)行通信,各個(gè)參數(shù)服務(wù)器1022可以根據(jù)所有的參數(shù)服務(wù)器1022存儲(chǔ)的子模型進(jìn)行加權(quán),以更好地更新本地的子模型。
每個(gè)參數(shù)服務(wù)器1022存儲(chǔ)的子模型可以不同,且系統(tǒng)中的每個(gè)參數(shù)服務(wù)器1022存儲(chǔ)的子模型可以對應(yīng)于一個(gè)模型,或者也可以對應(yīng)于多個(gè)模型。例如,每個(gè)參數(shù)服務(wù)器1022中可以只存儲(chǔ)對應(yīng)于一個(gè)主模型(例如為主模型1)的子模型,則將每個(gè)參數(shù)服務(wù)器1022中對應(yīng)于主模型1的子模型匯總起來就可以得到完整的主模型1,或者例如,每個(gè)參數(shù)服務(wù)器1022中可以存儲(chǔ)對應(yīng)于主模型1和主模型2的子模型,則將每個(gè)參數(shù)服務(wù)器1022中對應(yīng)于主模型1 的子模型匯總起來就可以得到完整的主模型1,將每個(gè)參數(shù)服務(wù)器1022中對應(yīng)于主模型2的子模型匯總起來就可以得到完整的主模型2。例如,若主節(jié)點(diǎn)101將多個(gè)模型對應(yīng)的訓(xùn)練任務(wù)分別下發(fā)到從節(jié)點(diǎn)102執(zhí)行,則主節(jié)點(diǎn)101可以預(yù)先將多個(gè)模型對應(yīng)的子模型分別配置給各參數(shù)服務(wù)器1022。即,在進(jìn)行模型訓(xùn)練時(shí),可以單獨(dú)訓(xùn)練一個(gè)模型,或者也可以對多個(gè)模型進(jìn)行同時(shí)訓(xùn)練,從而實(shí)現(xiàn)對模型的并行訓(xùn)練,提高系統(tǒng)的訓(xùn)練效率。
參數(shù)客戶端1021在執(zhí)行訓(xùn)練任務(wù)后,即在進(jìn)行模型訓(xùn)練后,可以得到訓(xùn)練結(jié)果,或者稱為迭代運(yùn)算結(jié)果,參數(shù)客戶端1021可以將得到的迭代運(yùn)算結(jié)果發(fā)送給對應(yīng)的參數(shù)服務(wù)器1022,參數(shù)服務(wù)器1022根據(jù)迭代運(yùn)算結(jié)果更新自身存儲(chǔ)的子模型,并將更新后的結(jié)果(比如包括更新后的模型參數(shù))再發(fā)送給參數(shù)客戶端1021,從而參數(shù)客戶端1021繼續(xù)進(jìn)行后續(xù)的訓(xùn)練過程。
該分布式系統(tǒng)可以包括多個(gè)參數(shù)服務(wù)器1022和多個(gè)參數(shù)客戶端1021(參數(shù)服務(wù)器1022的數(shù)量與參數(shù)客戶端1021的數(shù)量可以相等,或者也可以不等),那么主節(jié)點(diǎn)101可以首先設(shè)置參數(shù)服務(wù)器1022與參數(shù)客戶端1021之間的對應(yīng)關(guān)系,一個(gè)參數(shù)服務(wù)器1022可以對應(yīng)至少一個(gè)參數(shù)客戶端1021,同樣的,一個(gè)參數(shù)客戶端1021也可以對應(yīng)至少一個(gè)參數(shù)服務(wù)器1022,相對應(yīng)的參數(shù)服務(wù)器1022和參數(shù)客戶端1021可以位于同一個(gè)從節(jié)點(diǎn)102中,或者也可以位于不同的從節(jié)點(diǎn)102中,具有對應(yīng)關(guān)系的參數(shù)服務(wù)器1022與參數(shù)客戶端1021可以進(jìn)行通信。例如,第一參數(shù)服務(wù)器與第一參數(shù)客戶端和第二參數(shù)客戶端具有對應(yīng)關(guān)系,那么如果第一參數(shù)服務(wù)器更新了本地的子模型1,則第一參數(shù)服務(wù)器可以將更新子模型1后得到的參數(shù)分別發(fā)送給第一參數(shù)客戶端和第二參數(shù)客戶端。再例如,第一參數(shù)客戶端與第一參數(shù)服務(wù)器、第二參數(shù)服務(wù)器和第三參數(shù)服務(wù)器都具有對應(yīng)關(guān)系,則第一參數(shù)客戶端在進(jìn)行一輪訓(xùn)練后,可以將得到的訓(xùn)練結(jié)果發(fā)送給第一參數(shù)服務(wù)器、第二參數(shù)服務(wù)器和第三參數(shù)服務(wù)器中的至少一個(gè)。
其中,參數(shù)服務(wù)器1022和參數(shù)客戶端1021之間的對應(yīng)關(guān)系可以存儲(chǔ)在主 節(jié)點(diǎn)101、參數(shù)服務(wù)器1022和參數(shù)客戶端1021中的任意一個(gè)或多個(gè)中。比如,系統(tǒng)中包括第一參數(shù)服務(wù)器、第二參數(shù)服務(wù)器和第三參數(shù)服務(wù)器,以及包括第一參數(shù)客戶端、第二參數(shù)客戶端、第三參數(shù)客戶端和第四參數(shù)客戶端,那么主節(jié)點(diǎn)101中可以存儲(chǔ)各個(gè)參數(shù)服務(wù)器1022和各個(gè)參數(shù)客戶端1021之間的對應(yīng)關(guān)系,對于第一參數(shù)服務(wù)器來說,可以存儲(chǔ)各個(gè)參數(shù)服務(wù)器1022和各個(gè)參數(shù)客戶端1021之間的對應(yīng)關(guān)系,或者只存儲(chǔ)第一參數(shù)服務(wù)器的對應(yīng)關(guān)系,比如第一參數(shù)服務(wù)器與第一參數(shù)客戶端和第二參數(shù)客戶端具有對應(yīng)關(guān)系,對于第一參數(shù)客戶端來說,可以存儲(chǔ)各個(gè)參數(shù)服務(wù)器1022和各個(gè)參數(shù)客戶端1021之間的對應(yīng)關(guān)系,或者只存儲(chǔ)第一參數(shù)客戶端的對應(yīng)關(guān)系,比如第一參數(shù)客戶端與第一參數(shù)服務(wù)器、第二參數(shù)服務(wù)器和第三參數(shù)服務(wù)器具有對應(yīng)關(guān)系。
每個(gè)從節(jié)點(diǎn)102進(jìn)行訓(xùn)練時(shí),需要通過已知的數(shù)據(jù)進(jìn)行訓(xùn)練,則可以為每個(gè)從節(jié)點(diǎn)102設(shè)置存儲(chǔ)器103(當(dāng)然也可以為多個(gè)從節(jié)點(diǎn)102設(shè)置同一個(gè)存儲(chǔ)器103,本發(fā)明實(shí)施例不作限制),存儲(chǔ)器103可以用于存儲(chǔ)從節(jié)點(diǎn)102進(jìn)行訓(xùn)練所需的數(shù)據(jù),從節(jié)點(diǎn)102可以直接從相應(yīng)的存儲(chǔ)器103中獲取數(shù)據(jù)進(jìn)行訓(xùn)練,存儲(chǔ)器103中的數(shù)據(jù)可以來自文件系統(tǒng)。比如在spark平臺(tái)下,存儲(chǔ)器103可以通過彈性分布式數(shù)據(jù)集(resilientdistributeddatasets,rdd)實(shí)現(xiàn),各個(gè)rdd中的數(shù)據(jù)可以來自hadoop分布式文件系統(tǒng)(hadoopdistributedfilesystem,hdfs)。
可選的,請參見圖1b,為本發(fā)明實(shí)施例提供的另一種可能的分布式系統(tǒng)架構(gòu)圖。
圖1b中的p大于等于2,圖1b中也以維護(hù)l個(gè)任務(wù)隊(duì)列為例,l大于等于3。圖1b相對于圖1a,主要區(qū)別在于從節(jié)點(diǎn)102中分布的參數(shù)服務(wù)器1022和參數(shù)客戶端1021的數(shù)量有所不同,在圖1b中,一個(gè)從節(jié)點(diǎn)102中可以部署多個(gè)參數(shù)客戶端1021和多個(gè)參數(shù)服務(wù)器1022。雖然參數(shù)服務(wù)器1022和參數(shù)客戶端1021的設(shè)置方式有所不同,但圖1b所示的分布式系統(tǒng)與圖1a所示的分布式系統(tǒng)的工作方式相同,不多贅述。
下面結(jié)合附圖介紹本發(fā)明實(shí)施例提供的方法。在下面的介紹過程中,第一 參數(shù)服務(wù)器可以是圖1a或圖1b中的任意一個(gè)參數(shù)服務(wù)器1022,第一從節(jié)點(diǎn)即第一參數(shù)服務(wù)器所在的從節(jié)點(diǎn),第一參數(shù)客戶端可以是圖1a或圖1b中的任意一個(gè)參數(shù)客戶端1021。其中,如下將介紹的圖2-圖4中的方法均可以基于圖1a或圖1b中的分布式系統(tǒng)。
請參見圖2,本發(fā)明實(shí)施例提供一種訓(xùn)練模型的方法,該方法可以通過圖1a或圖1b所示的分布式系統(tǒng)實(shí)現(xiàn),該方法的流程描述如下。
步驟201:第一從節(jié)點(diǎn)中的參數(shù)服務(wù)器接收該分布式系統(tǒng)中至少一個(gè)從節(jié)點(diǎn)102中的參數(shù)客戶端發(fā)送的訓(xùn)練結(jié)果;
步驟202:第一從節(jié)點(diǎn)中的參數(shù)服務(wù)器根據(jù)接收的訓(xùn)練結(jié)果更新其存儲(chǔ)的子模型。
其中,第一從節(jié)點(diǎn)為該分布式系統(tǒng)中的任一從節(jié)點(diǎn)102,每個(gè)從節(jié)點(diǎn)102的參數(shù)客戶端通過執(zhí)行與該從節(jié)點(diǎn)102的參數(shù)服務(wù)器上存儲(chǔ)的子模型對應(yīng)的訓(xùn)練任務(wù)以得到訓(xùn)練結(jié)果。
其中圖2所提到的模型可以稱為主模型,例如,將一個(gè)主模型拆分,可以得到多個(gè)子模型,得到的子模型的數(shù)量例如可以與分布式系統(tǒng)中的參數(shù)服務(wù)器的數(shù)量相同,這樣可以將拆分得到的每個(gè)子模型分給一個(gè)參數(shù)服務(wù)器,即每個(gè)參數(shù)服務(wù)器都共同參與對主模型的訓(xùn)練過程,每個(gè)參數(shù)服務(wù)器中存儲(chǔ)的同一主模型的不同子模型。圖2是以一個(gè)主模型為例,而本發(fā)明實(shí)施例中的分布式系統(tǒng)可以同時(shí)對多個(gè)主模型進(jìn)行訓(xùn)練,例如,如果將n個(gè)主模型拆分,對于系統(tǒng)中的一個(gè)參數(shù)服務(wù)器來說,就可以存儲(chǔ)n個(gè)子模型,這n個(gè)子模型分別為n個(gè)主模型拆分得到的子模型。以下為了描述方便,將第一從節(jié)點(diǎn)中的參數(shù)服務(wù)器稱為第一參數(shù)服務(wù)器,當(dāng)然第一從節(jié)點(diǎn)中可能包括多個(gè)參數(shù)服務(wù)器,如果第一從節(jié)點(diǎn)中部署了多個(gè)參數(shù)服務(wù)器,則視為以其中的第一參數(shù)服務(wù)器為例。
可選的,一個(gè)從節(jié)點(diǎn)中的參數(shù)客戶端除了要對該從節(jié)點(diǎn)中的參數(shù)服務(wù)器中存儲(chǔ)的子模型進(jìn)行訓(xùn)練之外,還可以對其他從節(jié)點(diǎn)中的參數(shù)服務(wù)器存儲(chǔ)的子模型進(jìn)行訓(xùn)練,本發(fā)明實(shí)施例不作限制。
比如第一參數(shù)服務(wù)器與該分布式系統(tǒng)中的至少一個(gè)從節(jié)點(diǎn)中的參數(shù)客戶端具有對應(yīng)關(guān)系,那么可以認(rèn)為這些參數(shù)客戶端都參與對第一參數(shù)服務(wù)器中存儲(chǔ)的子模型的訓(xùn)練,這些參數(shù)客戶端在進(jìn)行一輪迭代運(yùn)算后,全部或部分參數(shù)客戶端會(huì)將迭代運(yùn)算得到的結(jié)果(本發(fā)明實(shí)施例中稱為訓(xùn)練結(jié)果)發(fā)送給第一參數(shù)服務(wù)器第一參數(shù)服務(wù)器。第一參數(shù)服務(wù)器在接到各個(gè)參數(shù)客戶端發(fā)送的訓(xùn)練結(jié)果后,可以根據(jù)訓(xùn)練結(jié)果更新第一參數(shù)服務(wù)器對應(yīng)的子模型,比如第一參數(shù)服務(wù)器可以根據(jù)得到的訓(xùn)練結(jié)果更新存儲(chǔ)的n個(gè)子模型,n個(gè)子模型可以是第一參數(shù)服務(wù)器存儲(chǔ)的全部子模型,或者也可以是第一參數(shù)服務(wù)器存儲(chǔ)的部分子模型。
可選的,在第一參數(shù)服務(wù)器更新n個(gè)子模型之后,可以得到一些參數(shù),第一參數(shù)服務(wù)器可以將得到的參數(shù)發(fā)送給一個(gè)或多個(gè)參數(shù)客戶端,比如第一參數(shù)服務(wù)器可以將得到的參數(shù)發(fā)送給向其第一參數(shù)服務(wù)器發(fā)送訓(xùn)練結(jié)果的各參數(shù)客戶端,或者與第一參數(shù)服務(wù)器具有對應(yīng)關(guān)系的全部或部分參數(shù)客戶端,或者該分布式系統(tǒng)中所有參與對n個(gè)模型的訓(xùn)練的參數(shù)客戶端。參數(shù)客戶端接收到第一參數(shù)服務(wù)器發(fā)送的參數(shù)后,可以根據(jù)這些參數(shù)繼續(xù)進(jìn)行后續(xù)的訓(xùn)練過程,例如,對于其中的位于第一從節(jié)點(diǎn)中的參數(shù)客戶端來說,在接收第一參數(shù)服務(wù)器發(fā)送的參數(shù)后,可以根據(jù)接收的參數(shù)對第一參數(shù)服務(wù)器中存儲(chǔ)的子模型進(jìn)行更新,可選的,如果該參數(shù)客戶端還參與對其他從節(jié)點(diǎn)中的參數(shù)服務(wù)器中存儲(chǔ)的子模型進(jìn)行訓(xùn)練,則該參數(shù)客戶端還可以根據(jù)接收的參數(shù)對相應(yīng)的參數(shù)服務(wù)器中存儲(chǔ)的子模型進(jìn)行更新。
本發(fā)明實(shí)施例中,參數(shù)服務(wù)器負(fù)責(zé)進(jìn)行子模型的更新,無需主節(jié)點(diǎn)每一輪進(jìn)行模型更新,極大地減輕了主節(jié)點(diǎn)的負(fù)擔(dān)。另外,若由主節(jié)點(diǎn)進(jìn)行模型的更新,則在主節(jié)點(diǎn)每輪進(jìn)行模型更新后,還需要將更新后得到的參數(shù)分別下發(fā)給每個(gè)從節(jié)點(diǎn),在大規(guī)模的訓(xùn)練場景下,每一輪更新都可能產(chǎn)生大量的參數(shù),主節(jié)點(diǎn)和從節(jié)點(diǎn)需要進(jìn)行頻繁而且數(shù)據(jù)量較大的通信過程,容易造成堵塞,也使得系統(tǒng)的性能受損。而本發(fā)明實(shí)施例中,參數(shù)服務(wù)器和參數(shù)客戶端可以理解為 從節(jié)點(diǎn)中的邏輯實(shí)體。。
可選的,有些訓(xùn)練結(jié)果對于全局來說可能不是很重要,或者可能無需每輪迭代都用這些訓(xùn)練結(jié)果來更新參數(shù)服務(wù)器中的子模型,因此,對于這類訓(xùn)練結(jié)果,參數(shù)客戶端可以迭代多次之后再發(fā)送給參數(shù)服務(wù)器,比如,第一參數(shù)服務(wù)器接收的訓(xùn)練結(jié)果中包括第一參數(shù)客戶端發(fā)送的訓(xùn)練結(jié)果(例如稱為第一訓(xùn)練結(jié)果),第一訓(xùn)練結(jié)果可以是第一參數(shù)客戶端對第一參數(shù)服務(wù)器存儲(chǔ)的子模型進(jìn)行n次訓(xùn)練后得到的,或者也可以是第一參數(shù)客戶端對包括第一參數(shù)服務(wù)器在內(nèi)的多個(gè)參數(shù)服務(wù)器中存儲(chǔ)的子模型進(jìn)行n次訓(xùn)練得到的,n為正整數(shù),即第一訓(xùn)練結(jié)果可以是進(jìn)行一次迭代運(yùn)算后得到的結(jié)果,或者也可以是進(jìn)行多次迭代運(yùn)算后得到的結(jié)果。其中,第一參數(shù)客戶端例如可以是第一從節(jié)點(diǎn)中的任意一個(gè)參數(shù)客戶端,或者也可以是該分布式系統(tǒng)中的其他從節(jié)點(diǎn)中的任意一個(gè)參數(shù)客戶端。這樣,對于非關(guān)鍵數(shù)據(jù),參數(shù)客戶端可以多次迭代之后再將訓(xùn)練結(jié)果發(fā)送給參數(shù)服務(wù)器,減少了需傳輸?shù)臄?shù)據(jù)量,節(jié)省傳輸資源,也提高了訓(xùn)練效率。當(dāng)然,具體對于哪些數(shù)據(jù)可以這樣處理,即對于哪個(gè)參數(shù)客戶端執(zhí)行的哪些訓(xùn)練任務(wù)可以迭代多次后再上報(bào)訓(xùn)練結(jié)果,可以由主節(jié)點(diǎn)、參數(shù)服務(wù)器或參數(shù)客戶端預(yù)先配置。
比如,該分布式系統(tǒng)中的第一參數(shù)客戶端和第二參數(shù)客戶端共同訓(xùn)練主模型1,主模型1對應(yīng)訓(xùn)練任務(wù)1和訓(xùn)練任務(wù)2,第一參數(shù)客戶端執(zhí)行訓(xùn)練任務(wù)1的一部分和訓(xùn)練任務(wù)2的一部分,第二參數(shù)客戶端執(zhí)行訓(xùn)練任務(wù)1的剩余部分和訓(xùn)練任務(wù)2的剩余部分。那么第一參數(shù)客戶端第一參數(shù)客戶端和第二參數(shù)客戶端可能都會(huì)進(jìn)行多次迭代過程,即進(jìn)行多次訓(xùn)練過程(第一參數(shù)客戶端第一參數(shù)客戶端需進(jìn)行的迭代次數(shù)和第二參數(shù)客戶端需進(jìn)行的迭代次數(shù)可能相同也可能不同),在第一參數(shù)客戶端第一參數(shù)客戶端和第二參數(shù)客戶端最后一次迭代完畢后,均可以將訓(xùn)練結(jié)果上報(bào)給參數(shù)服務(wù)器,比如第一參數(shù)客戶端第一參數(shù)客戶端上報(bào)給第一參數(shù)服務(wù)器,第二參數(shù)客戶端上報(bào)給第二參數(shù)服務(wù)器,第一參數(shù)服務(wù)器更新存儲(chǔ)的主模型1的子模型1,第二參數(shù)服務(wù)器更新存儲(chǔ)的 主模型1的子模型2(在更新時(shí),第一參數(shù)服務(wù)器可以獲取第二參數(shù)服務(wù)器中的子模型2的信息,從而可以加權(quán)后對子模型1進(jìn)行更新,對于第二參數(shù)服務(wù)器來說也是同樣),這樣就相當(dāng)于主模型1得到了更新,即相當(dāng)于主模型1訓(xùn)練完畢。如果要將訓(xùn)練完畢的主模型1發(fā)送給用戶,那么第一參數(shù)服務(wù)器和第二參數(shù)服務(wù)器可以分別將子模型1和子模型2發(fā)送給主節(jié)點(diǎn)101,主節(jié)點(diǎn)101對子模型1和子模型2進(jìn)行整合后發(fā)送給用戶。
其中,參數(shù)客戶端在對模型進(jìn)行訓(xùn)練時(shí),可能需要進(jìn)行多次迭代,即可能需要進(jìn)行多次訓(xùn)練過程,根據(jù)參數(shù)客戶端的性能、以及所執(zhí)行的訓(xùn)練任務(wù)等的不同,各個(gè)參數(shù)客戶端的執(zhí)行速度可能也有所不同,比如有的參數(shù)客戶端的速度較快,有的參數(shù)客戶端的速度較慢。因?yàn)槟壳暗募夹g(shù)要求同步,因此可能需要執(zhí)行速度較快的參數(shù)客戶端停下來等待執(zhí)行速度較慢的參數(shù)客戶端,比如可能要等到所有參數(shù)客戶端的步伐一致后再一起進(jìn)行后續(xù)的過程。這樣顯然較為浪費(fèi)時(shí)間,也影響了速度較快的參數(shù)客戶端的性能。
為解決這些問題,本發(fā)明實(shí)施例提出:在第一從節(jié)點(diǎn)中的參數(shù)客戶端(例如為第一參數(shù)客戶端第一參數(shù)客戶端)進(jìn)行第k輪訓(xùn)練完畢時(shí),第一參數(shù)客戶端第一參數(shù)客戶端確定該分布式系統(tǒng)中訓(xùn)練速度最慢的參數(shù)客戶端(例如稱為第二參數(shù)客戶端)正在訓(xùn)練的輪數(shù)與k之間的差值,若該差值大于預(yù)設(shè)差值,則第一參數(shù)客戶端第一參數(shù)客戶端可以從工作狀態(tài)切換為等待狀態(tài),以等待第二參數(shù)客戶端進(jìn)行訓(xùn)練,在第二參數(shù)客戶端訓(xùn)練的輪數(shù)與k之間的差值小于等于預(yù)設(shè)差值時(shí),第一參數(shù)客戶端第一參數(shù)客戶端再從等待狀態(tài)切換為工作狀態(tài),其中,k為正整數(shù)。其中,第二參數(shù)客戶端與第一參數(shù)客戶端第一參數(shù)客戶端可以位于同一個(gè)從節(jié)點(diǎn)中,比如都位于第一從節(jié)點(diǎn)中,或者也可以位于不同的從節(jié)點(diǎn)中。
比如,每個(gè)參數(shù)客戶端中都可以維護(hù)總共需要迭代的輪數(shù)(也可稱為次數(shù)),還可以維護(hù)當(dāng)前正在執(zhí)行的迭代運(yùn)算的輪數(shù)。比如,一個(gè)參數(shù)客戶端總共需要迭代10輪,當(dāng)前執(zhí)行到其中的第3輪。那么,第一參數(shù)客戶端在進(jìn)行 一輪訓(xùn)練完畢時(shí),比如進(jìn)行第k輪訓(xùn)練完畢時(shí),可以確定其他參數(shù)客戶端分別訓(xùn)練到了第幾輪,比如第一參數(shù)客戶端可以通過參數(shù)服務(wù)器獲知其他參數(shù)客戶端的訓(xùn)練情況,或者也可以通過直接與其他參數(shù)客戶端通信的方式獲知其他參數(shù)客戶端的訓(xùn)練情況。比如系統(tǒng)中還包括第二參數(shù)客戶端、第三參數(shù)客戶端和第四參數(shù)客戶端,其中第二參數(shù)客戶端訓(xùn)練到第2輪,第三參數(shù)客戶端訓(xùn)練到第3輪,第四參數(shù)客戶端訓(xùn)練到第5輪,而k=8,則第一參數(shù)客戶端確定第二參數(shù)客戶端為系統(tǒng)中訓(xùn)練速度最慢的參數(shù)客戶端。在每個(gè)參數(shù)客戶端中可以預(yù)先設(shè)置輪數(shù)之間的最大差值,例如稱為預(yù)設(shè)差值,每個(gè)參數(shù)客戶端中設(shè)置的預(yù)設(shè)差值可以相同也可以不同,比如對于第一參數(shù)服務(wù)器來說,設(shè)置的預(yù)設(shè)差值為4,即第一參數(shù)客戶端與系統(tǒng)中訓(xùn)練速度最慢的參數(shù)客戶端之間的訓(xùn)練輪數(shù)的差值需小于等于4,那么此時(shí),第一參數(shù)客戶端和第二參數(shù)客戶端的訓(xùn)練輪數(shù)之間的差值為6,顯然大于4,則第一參數(shù)客戶端可以停止工作,開始等待第二參數(shù)客戶端的訓(xùn)練,直到第二參數(shù)客戶端訓(xùn)練的輪數(shù)與k之間的差值小于等于4時(shí),第一參數(shù)客戶端再繼續(xù)開始工作。這樣,盡量保證各個(gè)參數(shù)客戶端之間訓(xùn)練的輪數(shù)的差距不會(huì)太大,使得最終得到的模型收斂,最快的參數(shù)客戶端無需等到最慢的參數(shù)客戶端完全趕上后再進(jìn)行后續(xù)工作,節(jié)省時(shí)間,提高訓(xùn)練效率,而且也盡量保證速度快的參數(shù)客戶端可以保持訓(xùn)練速度,盡量減小對參數(shù)客戶端的性能的影響。
可選的,第一參數(shù)客戶端在重新開始工作后,可以繼續(xù)進(jìn)行下一輪訓(xùn)練,或者也可以將第k輪訓(xùn)練得到的訓(xùn)練結(jié)果發(fā)送給對應(yīng)的參數(shù)服務(wù)器,例如可以將第k輪訓(xùn)練得到的訓(xùn)練結(jié)果發(fā)送給該分布式系統(tǒng)中的至少一個(gè)從節(jié)點(diǎn)102中的參數(shù)服務(wù)器(其中包括第一參數(shù)服務(wù)器),或者可以將第k輪訓(xùn)練得到的訓(xùn)練結(jié)果發(fā)送給第一參數(shù)服務(wù)器,具體如何操作可根據(jù)系統(tǒng)的需要而定。
在介紹圖1a和圖1b時(shí)介紹了,主節(jié)點(diǎn)101可以接收任務(wù)列表,并可以將任務(wù)列表中的訓(xùn)練任務(wù)分別分配給從節(jié)點(diǎn)102執(zhí)行。下面提供第二種分布式系統(tǒng)中的模型訓(xùn)練方法,用于介紹主節(jié)點(diǎn)102如何為從節(jié)點(diǎn)102分配訓(xùn)練任務(wù)。
請參見圖3,為本發(fā)明實(shí)施例提供的另一種分布式系統(tǒng)中的模型訓(xùn)練方法,同樣的,該方法可以通過圖1a或圖1b所示的分布式系統(tǒng)實(shí)現(xiàn),例如該方法的流程描述如下。
步驟301:主節(jié)點(diǎn)101將用于訓(xùn)練模型的原子任務(wù)分配給至少一個(gè)進(jìn)程;其中,一個(gè)訓(xùn)練任務(wù)包括至少一個(gè)原子任務(wù);
步驟302:主節(jié)點(diǎn)101建立任務(wù)管理進(jìn)程,任務(wù)管理進(jìn)程用于對至少一個(gè)進(jìn)程中的原子任務(wù)進(jìn)行管理。
主節(jié)點(diǎn)101在接收客戶端發(fā)送的任務(wù)列表后,可以將任務(wù)列表中包括的原子任務(wù)(比如,一個(gè)模型對應(yīng)于至少一個(gè)訓(xùn)練任務(wù),這些訓(xùn)練任務(wù)都可以認(rèn)為是大任務(wù),而一個(gè)大任務(wù)又可以包括至少一個(gè)原子任務(wù),例如,一個(gè)大任務(wù)包括5個(gè)原子任務(wù),將這5個(gè)原子任務(wù)全部執(zhí)行完畢,就認(rèn)為將這個(gè)大任務(wù)執(zhí)行完畢)分發(fā)到多個(gè)任務(wù)隊(duì)列中,任務(wù)隊(duì)列可以是主節(jié)點(diǎn)101在接收任務(wù)列表后生成的,或者也可以是之前就生成的。每個(gè)任務(wù)隊(duì)列比如可以采用先入先出(fifo)的規(guī)則,那么主節(jié)點(diǎn)101在將原子任務(wù)放到任務(wù)隊(duì)列中時(shí),可以對原子任務(wù)進(jìn)行排序,比如可以按照原子任務(wù)的優(yōu)先級進(jìn)行排序,可以將優(yōu)先級高的原子任務(wù)先放到任務(wù)隊(duì)列中,以提前執(zhí)行,或者比如可以按照原子任務(wù)的執(zhí)行時(shí)間進(jìn)行排序,可以將所需要的執(zhí)行時(shí)間較長的原子任務(wù)先放到任務(wù)隊(duì)列中,以提前執(zhí)行,等等,這樣可以充分考慮到將所需的執(zhí)行時(shí)間較長的任務(wù)或重要任務(wù)優(yōu)先執(zhí)行,縮短整個(gè)任務(wù)執(zhí)行的時(shí)間,提高模型訓(xùn)練效率。
可選的,主節(jié)點(diǎn)101在接收客戶端發(fā)送的任務(wù)列表后,還可以劃分兩組進(jìn)程,其中一組進(jìn)程可以是單一進(jìn)程,這組單一進(jìn)程可以用于維護(hù)所有訓(xùn)練任務(wù)的標(biāo)識(比如這組單一進(jìn)程可以對應(yīng)于圖1a或圖1b中的調(diào)度器),另一組進(jìn)程可以是多進(jìn)程,在這組多進(jìn)程里可以包括多個(gè)進(jìn)程,主節(jié)點(diǎn)101可以將所有的原子任務(wù)分配到這組多進(jìn)程(比如圖1a或圖1b中的每個(gè)任務(wù)隊(duì)列可以對應(yīng)于多進(jìn)程中的一個(gè)進(jìn)程,一個(gè)任務(wù)隊(duì)列中包括多個(gè)原子任務(wù),一個(gè)任務(wù)隊(duì)列里的原子任務(wù)可以由對應(yīng)的進(jìn)程處理)中。為了描述方便,將單一進(jìn)程組稱為任務(wù) 管理進(jìn)程組,將多進(jìn)程組稱為任務(wù)運(yùn)行進(jìn)程組。
任務(wù)管理進(jìn)程組可以維護(hù)任務(wù)運(yùn)行進(jìn)程組中的每個(gè)原子任務(wù)的標(biāo)識,還可以維護(hù)每個(gè)原子任務(wù)當(dāng)前的狀態(tài),比如標(biāo)識1所對應(yīng)的原子任務(wù)1的狀態(tài)是已處理還是未處理,等等,類似公告牌。
任務(wù)運(yùn)行進(jìn)程組中的任意一個(gè)原子任務(wù)可以向任務(wù)管理進(jìn)程組申請執(zhí)行,任務(wù)管理進(jìn)程組在接收原子任務(wù)發(fā)送的執(zhí)行請求后,可以為申請執(zhí)行的原子任務(wù)分配執(zhí)行時(shí)長,以及可以分配從節(jié)點(diǎn)102,從而可以將通過承載該原子任務(wù)的進(jìn)程(即任務(wù)運(yùn)行進(jìn)程組中與該原子任務(wù)所在的任務(wù)隊(duì)列對應(yīng)的進(jìn)程)下發(fā)到從節(jié)點(diǎn)102去執(zhí)行,即下發(fā)到參數(shù)客戶端1021中執(zhí)行。比如一個(gè)大任務(wù)包括多個(gè)原子任務(wù),那么這個(gè)大任務(wù)包括的原子任務(wù)可能被分配到不同的從節(jié)點(diǎn)102去執(zhí)行,或者理解為這個(gè)大任務(wù)包括的原子任務(wù)可能被分配到不同的參數(shù)客戶端中執(zhí)行,其中每個(gè)原子任務(wù)由一個(gè)參數(shù)客戶端執(zhí)行,所以,可以理解為多個(gè)參數(shù)客戶端分配了相同的任務(wù)(即大任務(wù)),而不同的參數(shù)客戶端執(zhí)行任務(wù)的不同部分(即執(zhí)行不同的原子任務(wù))。
可選的,比如任務(wù)運(yùn)行進(jìn)程組中的任務(wù)隊(duì)列1中的原子任務(wù)1和原子任務(wù)2都申請執(zhí)行,那么任務(wù)管理進(jìn)程組在收到原子任務(wù)1和原子任務(wù)2發(fā)送的執(zhí)行請求后,確定原子任務(wù)1在任務(wù)隊(duì)列1中排在原子任務(wù)2前面,則任務(wù)管理進(jìn)程組可以先讓原子任務(wù)1執(zhí)行,即為原子任務(wù)1分配執(zhí)行時(shí)長以及分配從節(jié)點(diǎn)(或者理解為分配參數(shù)客戶端),并通過承載原子任務(wù)1的進(jìn)程將原子任務(wù)1下發(fā)到參數(shù)客戶端去執(zhí)行。這樣就實(shí)現(xiàn)了任務(wù)隊(duì)列中先入先出的原則。
由于一個(gè)任務(wù)隊(duì)列對應(yīng)于一個(gè)進(jìn)程,因此本發(fā)明實(shí)施例中任務(wù)運(yùn)行進(jìn)程組中的每個(gè)進(jìn)程在一個(gè)時(shí)刻可以只執(zhí)行一個(gè)原子任務(wù),有效利用了資源,使得原子任務(wù)的執(zhí)行效率更高。
可選的,任務(wù)管理進(jìn)程組可以在收到原子任務(wù)發(fā)送的執(zhí)行請求后再預(yù)估該原子任務(wù)所需的執(zhí)行時(shí)長,或者,任務(wù)管理進(jìn)程組可以在主節(jié)點(diǎn)將原子任務(wù)分配到任務(wù)隊(duì)列之后即預(yù)估每個(gè)原子任務(wù)所需的執(zhí)行時(shí)長,這樣,在原子任務(wù)申 請執(zhí)行時(shí),無需再預(yù)估該原子任務(wù)所需的執(zhí)行時(shí)長,能夠盡快將該原子任務(wù)分配下去進(jìn)行執(zhí)行,提高執(zhí)行效率。當(dāng)然,如果主節(jié)點(diǎn)在將原子任務(wù)分配給任務(wù)隊(duì)列時(shí),按照原子任務(wù)的執(zhí)行時(shí)長對多個(gè)原子任務(wù)進(jìn)行排序,那么顯然,任務(wù)管理進(jìn)程組需要在主節(jié)點(diǎn)將原子任務(wù)分配到任務(wù)隊(duì)列之后即預(yù)估每個(gè)原子任務(wù)所需的執(zhí)行時(shí)長。
可選的,任務(wù)管理進(jìn)程可以采用加權(quán)評估算法預(yù)估每個(gè)原子任務(wù)大概的執(zhí)行時(shí)長。
可選的,在從節(jié)點(diǎn)將一個(gè)原子任務(wù)處理完成后,可以報(bào)告主節(jié)點(diǎn)101(例如,參數(shù)客戶端將一個(gè)原子任務(wù)處理完畢后,可以通過參數(shù)服務(wù)器上報(bào)主節(jié)點(diǎn)101,或者也可以直接上報(bào)主節(jié)點(diǎn)101),則主節(jié)點(diǎn)101可以更新任務(wù)管理進(jìn)程組里該原子任務(wù)的狀態(tài),比如可以將該原子任務(wù)的狀態(tài)由未處理更新為已處理。任務(wù)管理進(jìn)程組在處理原子任務(wù)發(fā)送的執(zhí)行請求時(shí),可以優(yōu)先處理未處理過的原子任務(wù)發(fā)送的執(zhí)行請求。
目前為了實(shí)現(xiàn)任務(wù)并行,是將原子任務(wù)分配到不同的進(jìn)程上執(zhí)行,在分配時(shí)可能是任意的,那么可能有些進(jìn)程中的原子任務(wù)先執(zhí)行完,有些進(jìn)程中的原子任務(wù)后執(zhí)行完,原子任務(wù)先執(zhí)行完成的進(jìn)程就會(huì)頻繁地從原子任務(wù)未執(zhí)行完的進(jìn)程中竊取任務(wù),導(dǎo)致進(jìn)程間的頻繁調(diào)度,性能開銷較大,由于進(jìn)程之間搶占資源,也會(huì)有死鎖的風(fēng)險(xiǎn)。本發(fā)明實(shí)施例中,通過任務(wù)管理進(jìn)程進(jìn)行統(tǒng)一調(diào)度,各個(gè)進(jìn)程都在調(diào)度下工作,先執(zhí)行完任務(wù)的進(jìn)程不會(huì)竊取其他進(jìn)程中的原子任務(wù),有效解決了進(jìn)程搶占的問題,節(jié)省性能開銷,也避免了死鎖的風(fēng)險(xiǎn)。
下面結(jié)合附圖介紹本發(fā)明實(shí)施例中的裝置。
可選的,基于同一發(fā)明構(gòu)思,本發(fā)明實(shí)施例提供一種分布式系統(tǒng)中的計(jì)算節(jié)點(diǎn),該計(jì)算節(jié)點(diǎn)例如可以是圖1a或圖1b中的任意一個(gè)從節(jié)點(diǎn)102,該計(jì)算節(jié)點(diǎn)可以完成如圖2-圖3所介紹的功能。
在一個(gè)實(shí)施例中,該計(jì)算節(jié)點(diǎn)可以是一臺(tái)物理機(jī),如圖4所示,該物理機(jī)1200包括硬件層100,運(yùn)行在硬件層100之上的vmm(virtualmachinemonitor, 虛擬機(jī)監(jiān)視器)110,以及運(yùn)行在vmm110之上的宿主機(jī)host1201和若干虛擬機(jī)(vm,virtualmachine),其中,硬件層包括但不限于:i/o設(shè)備、cpu和memory。計(jì)算節(jié)點(diǎn)中的參數(shù)服務(wù)器和參數(shù)客戶端分別可以為物理機(jī)1200中的一臺(tái)虛擬機(jī),比如vm1202;或者參數(shù)服務(wù)器和參數(shù)客戶端可以用運(yùn)行在同一虛擬機(jī)上的不同進(jìn)程或線程來實(shí)現(xiàn)。具體地,vm1202通過運(yùn)行可執(zhí)行程序,并在程序運(yùn)行的過程中通過宿主機(jī)host1201來調(diào)用硬件層100的硬件資源,以實(shí)現(xiàn)以上各個(gè)實(shí)施例所描述的參數(shù)客戶端和參數(shù)服務(wù)器的功能。。
在另一個(gè)實(shí)施例中,參見圖5,該計(jì)算節(jié)點(diǎn)可以包括存儲(chǔ)器501和處理器502。
其中,處理器502可以是cpu或asic,可以是一個(gè)或多個(gè)用于控制程序執(zhí)行的集成電路,可以是使用fpga開發(fā)的硬件電路,可以是基帶芯片。
存儲(chǔ)器501的數(shù)量可以是一個(gè)或多個(gè)。存儲(chǔ)器501可以包括只讀存儲(chǔ)器(readonlymemory,rom)、隨機(jī)存取存儲(chǔ)器(randomaccessmemory,ram)和磁盤存儲(chǔ)器。
這些存儲(chǔ)器501可以通過總線與處理器502相連接(圖5以此為例),或者也可以通過專門的連接線分別與處理器502連接。
通過對處理器502進(jìn)行設(shè)計(jì)編程,將前述實(shí)施例所示的方法所對應(yīng)的代碼固化到芯片內(nèi),從而使芯片在運(yùn)行時(shí)能夠執(zhí)行前述圖2-圖3所示的方法。如何對處理器502進(jìn)行設(shè)計(jì)編程為本領(lǐng)域技術(shù)人員所公知的技術(shù),這里不再贅述。
本發(fā)明實(shí)施例中可以在從節(jié)點(diǎn)中設(shè)置參數(shù)服務(wù)器和參數(shù)客戶端,參數(shù)客戶端用于進(jìn)行訓(xùn)練過程,參數(shù)服務(wù)器可以更新子模型,那么,主節(jié)點(diǎn)只需負(fù)責(zé)將模型進(jìn)行切分,并將切分后得到的子模型分別分配給多個(gè)參數(shù)服務(wù)器,多個(gè)參數(shù)服務(wù)器就可以分別更新子模型,也就相當(dāng)于主模型得到了更新,這樣,將更新模型的工作從主節(jié)點(diǎn)轉(zhuǎn)移到多個(gè)參數(shù)服務(wù)器,在較大幅度上減少了主節(jié)點(diǎn)的工作量,減輕了主節(jié)點(diǎn)的負(fù)擔(dān),每個(gè)參數(shù)服務(wù)器可能只承擔(dān)對一部分子模型的更新工作,對于參數(shù)服務(wù)器來說負(fù)擔(dān)也不是很重,盡量避免模型的更新過程成 為整個(gè)訓(xùn)練過程的瓶頸,提高模型訓(xùn)練的效率。
在本發(fā)明中,應(yīng)該理解到,所揭露的設(shè)備和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元或單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本發(fā)明實(shí)施例。
在本發(fā)明實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,或者各個(gè)單元也可以均是獨(dú)立的物理模塊。
所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)或處理器(processor)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:通用串行總線閃存盤(universalserialbusflashdrive)、移動(dòng)硬盤、rom、ram、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
以上所述,以上實(shí)施例僅用以對本發(fā)明的技術(shù)方案進(jìn)行了詳細(xì)介紹,但以上實(shí)施例的說明只是用于幫助理解本發(fā)明實(shí)施例的方法,不應(yīng)理解為對本發(fā)明實(shí)施例的限制。本技術(shù)領(lǐng)域的技術(shù)人員可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明實(shí)施例的保護(hù)范圍之內(nèi)。