本技術(shù)涉及人工智能(artificial?intelligence,ai),尤其涉及一種機(jī)器學(xué)習(xí)模型編譯優(yōu)化方法、裝置及計(jì)算設(shè)備集群。
背景技術(shù):
1、目前,深度學(xué)習(xí)技術(shù)蓬勃發(fā)展,在多個(gè)領(lǐng)域廣泛應(yīng)用,產(chǎn)生了深遠(yuǎn)的影響。深度學(xué)習(xí)技術(shù)不僅在傳統(tǒng)的計(jì)算機(jī)視覺、自然語言處理等方向上有很大的突破,而且在多個(gè)交叉應(yīng)用領(lǐng)域也取得了巨大的成功和商業(yè)應(yīng)用價(jià)值,例如:電子商務(wù)、自動(dòng)駕駛、藥物發(fā)現(xiàn)等。隨著深度學(xué)習(xí)的廣泛應(yīng)用,加速模型部署也逐漸成為一個(gè)重要的難題。一方面深度學(xué)習(xí)模型越來越多樣化,諸多新的深度學(xué)習(xí)模型架構(gòu)被提出,如卷積神經(jīng)網(wǎng)絡(luò)(convolutionalneural?networks,cnn)、長(zhǎng)短期記憶網(wǎng)絡(luò)(long?short-term?memory,lstm)、transformer等架構(gòu)。另一方面深度學(xué)習(xí)模型越來越大型化,新提出的模型參數(shù)量和計(jì)算量劇增。但隨著機(jī)器學(xué)習(xí)模型大小的顯著增加,模型推理延遲隨之提高,內(nèi)存占用也隨之增大,對(duì)硬件資源也提出了更高的要求,致使機(jī)器學(xué)習(xí)模型的推理性能較差。
技術(shù)實(shí)現(xiàn)思路
1、本技術(shù)提供了一種機(jī)器學(xué)習(xí)模型編譯優(yōu)化方法、裝置、計(jì)算設(shè)備集群、計(jì)算機(jī)存儲(chǔ)介質(zhì)及計(jì)算機(jī)產(chǎn)品,能夠?qū)C(jī)器學(xué)習(xí)模型的計(jì)算圖中稀疏節(jié)點(diǎn)的輸入和輸出的內(nèi)存布局、配置參數(shù)、權(quán)重張量的稀疏格式等進(jìn)行調(diào)整,以實(shí)現(xiàn)對(duì)模型中稀疏的張量計(jì)算進(jìn)行優(yōu)化,提升了機(jī)器學(xué)習(xí)模型的推理性能。
2、第一方面,本技術(shù)提供一種機(jī)器學(xué)習(xí)模型編譯優(yōu)化方法,包括:對(duì)機(jī)器學(xué)習(xí)模型的計(jì)算圖中的節(jié)點(diǎn)進(jìn)行識(shí)別,以識(shí)別到計(jì)算圖中的稀疏節(jié)點(diǎn),其中,稀疏節(jié)點(diǎn)的權(quán)重張量中0元素的占比大于預(yù)設(shè)閾值;確定稀疏節(jié)點(diǎn)的最優(yōu)稀疏實(shí)現(xiàn)方案,最優(yōu)稀疏實(shí)現(xiàn)方案中包括:稀疏節(jié)點(diǎn)的輸入和輸出的內(nèi)存布局、稀疏節(jié)點(diǎn)的配置參數(shù)和稀疏節(jié)點(diǎn)的權(quán)重張量的稀疏格式中的一項(xiàng)或多項(xiàng);若在最優(yōu)稀疏實(shí)現(xiàn)方案下稀疏節(jié)點(diǎn)的性能數(shù)據(jù)優(yōu)于目標(biāo)性能數(shù)據(jù),則基于最優(yōu)稀疏實(shí)現(xiàn)方案,生成第一節(jié)點(diǎn),并在計(jì)算圖中將稀疏節(jié)點(diǎn)替換為第一節(jié)點(diǎn),其中,目標(biāo)性能數(shù)據(jù)是在原始稀疏實(shí)現(xiàn)方案下稀疏節(jié)點(diǎn)的性能數(shù)據(jù);;對(duì)計(jì)算圖進(jìn)行代碼生成,以得到計(jì)算圖的執(zhí)行代碼。
3、這樣,通過考慮計(jì)算圖中節(jié)點(diǎn)在不同稀疏實(shí)現(xiàn)的性能收益,以最優(yōu)稀疏實(shí)現(xiàn)為依據(jù),對(duì)計(jì)算圖中稀疏節(jié)點(diǎn)的輸入和輸出的內(nèi)存布局、配置參數(shù)、權(quán)重張量的稀疏格式等進(jìn)行調(diào)整,實(shí)現(xiàn)了對(duì)模型中稀疏的張量計(jì)算進(jìn)行優(yōu)化,提升了機(jī)器學(xué)習(xí)模型的推理性能。
4、在一種可能的實(shí)現(xiàn)方式中,確定稀疏節(jié)點(diǎn)的最優(yōu)稀疏實(shí)現(xiàn)方案,包括:執(zhí)行每個(gè)稀疏實(shí)現(xiàn)方案下稀疏節(jié)點(diǎn)的執(zhí)行代碼,以得到至少一個(gè)性能數(shù)據(jù),其中,一個(gè)性能數(shù)據(jù)與一個(gè)稀疏實(shí)現(xiàn)方案相關(guān);在至少一個(gè)性能數(shù)據(jù)中最優(yōu)的性能數(shù)據(jù)優(yōu)于目標(biāo)性能數(shù)據(jù)的情況下,確定與最優(yōu)的性能數(shù)據(jù)相關(guān)的稀疏實(shí)現(xiàn)方案為最優(yōu)稀疏實(shí)現(xiàn)方案;在至少一個(gè)性能數(shù)據(jù)中最優(yōu)的性能數(shù)據(jù)不優(yōu)于目標(biāo)性能數(shù)據(jù)的情況下,確定原始稀疏實(shí)現(xiàn)方案為最優(yōu)稀疏實(shí)現(xiàn)方案。這樣,通過執(zhí)行每種稀疏實(shí)現(xiàn)方案下稀疏節(jié)點(diǎn)的執(zhí)行代碼,可以得到每種稀疏實(shí)現(xiàn)方案的性能數(shù)據(jù),從而可以與不進(jìn)行優(yōu)化時(shí)稀疏節(jié)點(diǎn)的性能數(shù)據(jù)進(jìn)行對(duì)比,以篩選出最優(yōu)稀疏實(shí)現(xiàn)方案。
5、在一種可能的實(shí)現(xiàn)方式中,在計(jì)算圖中將稀疏節(jié)點(diǎn)替換為第一節(jié)點(diǎn)之后,還包括:在最優(yōu)稀疏實(shí)現(xiàn)方案和原始稀疏實(shí)現(xiàn)方案中的內(nèi)存布局不同的情況下,在第一節(jié)點(diǎn)之前添加第一布局轉(zhuǎn)換節(jié)點(diǎn),在第一節(jié)點(diǎn)之后添加第二布局轉(zhuǎn)換節(jié)點(diǎn),其中,第一布局轉(zhuǎn)換節(jié)點(diǎn)用于對(duì)第一節(jié)點(diǎn)的輸入進(jìn)行內(nèi)存布局轉(zhuǎn)換,第二布局轉(zhuǎn)換節(jié)點(diǎn)用于對(duì)第一節(jié)點(diǎn)的輸出進(jìn)行內(nèi)存布局轉(zhuǎn)換。這樣,就可以在對(duì)稀疏節(jié)點(diǎn)的內(nèi)存布局調(diào)整后,通過添加布局轉(zhuǎn)換節(jié)點(diǎn)來保證計(jì)算圖的等價(jià)性。
6、在一種可能的實(shí)現(xiàn)方式中,機(jī)器學(xué)習(xí)模型的計(jì)算圖中包括第二節(jié)點(diǎn),第二節(jié)點(diǎn)為新生成的節(jié)點(diǎn)。此時(shí),在對(duì)計(jì)算圖進(jìn)行代碼生成之前,還包括:在第一節(jié)點(diǎn)和第二節(jié)點(diǎn)之間存在未進(jìn)行內(nèi)存布局調(diào)整的至少一個(gè)節(jié)點(diǎn)的情況下,若至少一個(gè)節(jié)點(diǎn)中節(jié)點(diǎn)為對(duì)內(nèi)存布局不敏感的節(jié)點(diǎn),則對(duì)至少一個(gè)節(jié)點(diǎn)中節(jié)點(diǎn)的輸入和輸出的內(nèi)存布局進(jìn)行調(diào)整;基于調(diào)整后的內(nèi)存布局,生成新的節(jié)點(diǎn),并替換至少一個(gè)節(jié)點(diǎn)中的節(jié)點(diǎn)。這樣,通過對(duì)內(nèi)存布局不敏感的節(jié)點(diǎn)的內(nèi)存布局進(jìn)行調(diào)整,為對(duì)計(jì)算圖進(jìn)一步進(jìn)行優(yōu)化提供了機(jī)會(huì)。
7、在一種可能的實(shí)現(xiàn)方式中,在對(duì)計(jì)算圖進(jìn)行代碼生成之前,還包括:在計(jì)算圖中兩個(gè)相鄰的節(jié)點(diǎn)均為新生成的節(jié)點(diǎn)的情況下,若兩個(gè)相鄰的節(jié)點(diǎn)中第一個(gè)節(jié)點(diǎn)的輸出的內(nèi)存布局與第二個(gè)節(jié)點(diǎn)的輸入的內(nèi)存布局相同,則刪除兩個(gè)相鄰的節(jié)點(diǎn)之間存在的節(jié)點(diǎn)。這樣,可以將計(jì)算圖中的冗余節(jié)點(diǎn)消除,降低計(jì)算圖中的計(jì)算量,提升機(jī)器學(xué)習(xí)模型的推理性能。
8、在一種可能的實(shí)現(xiàn)方式中,該方法還包括:對(duì)稀疏節(jié)點(diǎn)的權(quán)重張量進(jìn)行行重排和列重排;對(duì)重排后的權(quán)重張量進(jìn)行壓縮,并以預(yù)設(shè)的稀疏格式存儲(chǔ)權(quán)重張量,該稀疏格式包括:權(quán)重?cái)?shù)組、行重排數(shù)組、下標(biāo)數(shù)組、偏移數(shù)組和塊數(shù)量數(shù)組,其中,權(quán)重?cái)?shù)組用于記錄重排后的權(quán)重張量中的元素,行重排數(shù)組用于記錄重排后的權(quán)重張量的行信息,下標(biāo)數(shù)組用于記錄權(quán)重?cái)?shù)組中記錄的每個(gè)元素所屬的列,塊數(shù)量數(shù)組用于記錄重排后的權(quán)重張量中稠密塊的數(shù)量,稠密塊中的元素用于在計(jì)算過程中從全局內(nèi)存加載到共享內(nèi)存進(jìn)行計(jì)算,偏移數(shù)組用于標(biāo)識(shí)重排后的權(quán)重張量中每行元素的數(shù)量。這樣,通過對(duì)稀疏節(jié)點(diǎn)的權(quán)重張量進(jìn)行行重排和列重排,就可以提高稀疏節(jié)點(diǎn)的權(quán)重張量中非0元素的結(jié)構(gòu)化程度,解決了稀疏分布的不規(guī)則性導(dǎo)致節(jié)點(diǎn)中算子執(zhí)行效率低下的問題,使算子的性能得到提升。
9、第二方面,本技術(shù)提供一種機(jī)器學(xué)習(xí)模型編譯優(yōu)化裝置,包括:節(jié)點(diǎn)識(shí)別模塊,方案確定模塊,節(jié)點(diǎn)處理模塊和代碼生成模塊。其中,節(jié)點(diǎn)識(shí)別模塊,用于對(duì)機(jī)器學(xué)習(xí)模型的計(jì)算圖中的節(jié)點(diǎn)進(jìn)行識(shí)別,以識(shí)別到計(jì)算圖中的稀疏節(jié)點(diǎn),其中,稀疏節(jié)點(diǎn)的權(quán)重張量中0元素的占比大于預(yù)設(shè)閾值;方案確定模塊,用于確定稀疏節(jié)點(diǎn)的最優(yōu)稀疏實(shí)現(xiàn)方案,最優(yōu)稀疏實(shí)現(xiàn)方案中包括:稀疏節(jié)點(diǎn)的輸入和輸出的內(nèi)存布局、稀疏節(jié)點(diǎn)的配置參數(shù)和稀疏節(jié)點(diǎn)的權(quán)重張量的稀疏格式中的一項(xiàng)或多項(xiàng);節(jié)點(diǎn)處理模塊,用于當(dāng)在最優(yōu)稀疏實(shí)現(xiàn)方案下稀疏節(jié)點(diǎn)的性能數(shù)據(jù)優(yōu)于目標(biāo)性能數(shù)據(jù)時(shí),基于最優(yōu)稀疏實(shí)現(xiàn)方案,生成第一節(jié)點(diǎn),并在計(jì)算圖中將稀疏節(jié)點(diǎn)替換為第一節(jié)點(diǎn),其中,目標(biāo)性能數(shù)據(jù)是在原始稀疏實(shí)現(xiàn)方案下稀疏節(jié)點(diǎn)的性能數(shù)據(jù);代碼生成模塊,用于對(duì)計(jì)算圖進(jìn)行代碼生成,以得到計(jì)算圖的執(zhí)行代碼。
10、在一種可能的實(shí)現(xiàn)方式中,方案確定模塊在確定稀疏節(jié)點(diǎn)的最優(yōu)稀疏實(shí)現(xiàn)方案時(shí),具體用于:執(zhí)行每個(gè)稀疏實(shí)現(xiàn)方案下稀疏節(jié)點(diǎn)的執(zhí)行代碼,以得到至少一個(gè)性能數(shù)據(jù),其中,一個(gè)性能數(shù)據(jù)與一個(gè)稀疏實(shí)現(xiàn)方案相關(guān);在至少一個(gè)性能數(shù)據(jù)中最優(yōu)的性能數(shù)據(jù)優(yōu)于目標(biāo)性能數(shù)據(jù)的情況下,確定與最優(yōu)的性能數(shù)據(jù)相關(guān)的稀疏實(shí)現(xiàn)方案為最優(yōu)稀疏實(shí)現(xiàn)方案;在至少一個(gè)性能數(shù)據(jù)中最優(yōu)的性能數(shù)據(jù)不優(yōu)于目標(biāo)性能數(shù)據(jù)的情況下,確定原始稀疏實(shí)現(xiàn)方案為最優(yōu)稀疏實(shí)現(xiàn)方案。
11、在一種可能的實(shí)現(xiàn)方式中,節(jié)點(diǎn)處理模塊在計(jì)算圖中將稀疏節(jié)點(diǎn)替換為第一節(jié)點(diǎn)之后,還用于:在最優(yōu)稀疏實(shí)現(xiàn)方案和原始稀疏實(shí)現(xiàn)方案中的內(nèi)存布局不同的情況下,在第一節(jié)點(diǎn)之前添加第一布局轉(zhuǎn)換節(jié)點(diǎn),在第一節(jié)點(diǎn)之后添加第二布局轉(zhuǎn)換節(jié)點(diǎn),其中,第一布局轉(zhuǎn)換節(jié)點(diǎn)用于對(duì)第一節(jié)點(diǎn)的輸入進(jìn)行內(nèi)存布局轉(zhuǎn)換,第二布局轉(zhuǎn)換節(jié)點(diǎn)用于對(duì)第一節(jié)點(diǎn)的輸出進(jìn)行內(nèi)存布局轉(zhuǎn)換。
12、在一種可能的實(shí)現(xiàn)方式中,計(jì)算圖中包括第二節(jié)點(diǎn),第二節(jié)點(diǎn)為新生成的節(jié)點(diǎn)。此時(shí),節(jié)點(diǎn)處理模塊在代碼生成模塊對(duì)計(jì)算圖進(jìn)行代碼生成之前,還用于:在第一節(jié)點(diǎn)和第二節(jié)點(diǎn)之間存在未進(jìn)行內(nèi)存布局調(diào)整的至少一個(gè)節(jié)點(diǎn)的情況下,若至少一個(gè)節(jié)點(diǎn)中節(jié)點(diǎn)為對(duì)內(nèi)存布局不敏感的節(jié)點(diǎn),則對(duì)至少一個(gè)節(jié)點(diǎn)中節(jié)點(diǎn)的輸入和輸出的內(nèi)存布局進(jìn)行調(diào)整;基于調(diào)整后的內(nèi)存布局,生成新的節(jié)點(diǎn),并替換至少一個(gè)節(jié)點(diǎn)中的節(jié)點(diǎn)。
13、在一種可能的實(shí)現(xiàn)方式中,在代碼生成模塊對(duì)計(jì)算圖進(jìn)行代碼生成之前,節(jié)點(diǎn)處理模塊,還用于:在計(jì)算圖中兩個(gè)相鄰的節(jié)點(diǎn)均為新生成的節(jié)點(diǎn)的情況下,若兩個(gè)相鄰的節(jié)點(diǎn)中第一個(gè)節(jié)點(diǎn)的輸出的內(nèi)存布局與第二個(gè)節(jié)點(diǎn)的輸入的內(nèi)存布局相同,則刪除兩個(gè)相鄰的節(jié)點(diǎn)之間存在的節(jié)點(diǎn)。
14、在一種可能的實(shí)現(xiàn)方式中,節(jié)點(diǎn)處理模塊,還用于:對(duì)稀疏節(jié)點(diǎn)的權(quán)重張量進(jìn)行行重排和列重排;對(duì)重排后的權(quán)重張量進(jìn)行壓縮,并以預(yù)設(shè)的稀疏格式存儲(chǔ)權(quán)重張量,該稀疏格式包括:權(quán)重?cái)?shù)組、行重排數(shù)組、下標(biāo)數(shù)組、偏移數(shù)組和塊數(shù)量數(shù)組,其中,權(quán)重?cái)?shù)組用于記錄重排后的權(quán)重張量中的元素,行重排數(shù)組用于記錄重排后的權(quán)重張量的行信息,下標(biāo)數(shù)組用于記錄權(quán)重?cái)?shù)組中記錄的每個(gè)元素所屬的列,塊數(shù)量數(shù)組用于記錄重排后的權(quán)重張量中稠密塊的數(shù)量,稠密塊中的元素用于在計(jì)算過程中從全局內(nèi)存加載到共享內(nèi)存進(jìn)行計(jì)算,偏移數(shù)組用于標(biāo)識(shí)重排后的權(quán)重張量中每行元素的數(shù)量。
15、第三方面,本技術(shù)提供一種計(jì)算設(shè)備集群,包括至少一個(gè)計(jì)算設(shè)備,每個(gè)計(jì)算設(shè)備均包括處理器和存儲(chǔ)器;至少一個(gè)計(jì)算設(shè)備的處理器用于執(zhí)行至少一個(gè)計(jì)算設(shè)備的存儲(chǔ)器中存儲(chǔ)的指令,以使得計(jì)算設(shè)備集群執(zhí)行第一方面或第一方面的任一種可能的實(shí)現(xiàn)方式所描述的方法。
16、第四方面,本技術(shù)提供一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),包括計(jì)算機(jī)程序指令,當(dāng)計(jì)算機(jī)程序指令由計(jì)算設(shè)備集群執(zhí)行時(shí),計(jì)算設(shè)備集群執(zhí)行第一方面或第一方面的任一種可能的實(shí)現(xiàn)方式所描述的方法,或者,執(zhí)行第二方面或第二方面的任一種可能的實(shí)現(xiàn)方式所描述的方法。其中,計(jì)算設(shè)備集群中可以包括一個(gè)或多個(gè)計(jì)算設(shè)備。
17、第五方面,本技術(shù)提供一種包含指令的計(jì)算機(jī)程序產(chǎn)品,當(dāng)指令被計(jì)算設(shè)備集群運(yùn)行時(shí),使得計(jì)算設(shè)備集群執(zhí)行第一方面或第一方面的任一種可能的實(shí)現(xiàn)方式所描述的方法。其中,計(jì)算設(shè)備集群中可以包括一個(gè)或多個(gè)計(jì)算設(shè)備。
18、可以理解的是,上述第二方面至第五方面的有益效果可以參見上述第一方面中的相關(guān)描述,在此不再贅述。