本公開涉及人工智能,具體而言,本公開涉及一種數(shù)據(jù)處理方法、裝置、電子設備及存儲介質(zhì)。
背景技術(shù):
1、在深度學習神經(jīng)網(wǎng)絡模型中,為了更高的性能,一般會采取多l(xiāng)ayout的機制,即不同的算子可能會支持不同的數(shù)據(jù)布局格式,因此可能會出現(xiàn)相鄰的兩個算子之間的數(shù)據(jù)布局格式不匹配的情況。
2、現(xiàn)有技術(shù)中通常是會兩個算子之間插入一個layout?convert算子(一種用于調(diào)整張量的內(nèi)存布局的算子),layout?convert算子是純內(nèi)存操作的訪存密集型算子,layoutconvert算子的插入會帶來大量數(shù)據(jù)訪存的耗時,從而降低了性能。
技術(shù)實現(xiàn)思路
1、本公開實施例提供了一種數(shù)據(jù)處理方法、裝置、電子設備及存儲介質(zhì),可以解決現(xiàn)有技術(shù)中l(wèi)ayout?convert算子的插入會導致性能降低的問題。本公開提供的技術(shù)方案如下:
2、根據(jù)本公開實施例的一個方面,提供了一種數(shù)據(jù)處理方法,該方法包括:
3、獲取待處理的初始數(shù)據(jù),以及所述初始數(shù)據(jù)對應的目標算子;
4、將所述目標算子的輸出通道數(shù)量除以預設數(shù)量所得到的商作為第一數(shù)量,將所述目標算子切分為第一數(shù)量個子算子;
5、將所述第一數(shù)量個子算子分配至神經(jīng)網(wǎng)絡處理器中的至少兩個目標核心;其中,神經(jīng)網(wǎng)絡處理器中的多個核心至少包括所述至少兩個目標核心;
6、針對每個目標核心中的每個子算子,通過該目標核心執(zhí)行該子算子對所述初始數(shù)據(jù)的運算,將運算所得到的結(jié)果作為該子算子對應的子數(shù)據(jù);
7、將各個子算子各自對應的各個子數(shù)據(jù)進行拼接,將拼接后的數(shù)據(jù)作為所述初始數(shù)據(jù)對應的目標數(shù)據(jù);
8、其中,所述初始數(shù)據(jù)是基于第一內(nèi)存布局格式進行存儲布局的;所述目標數(shù)據(jù)是基于第二內(nèi)存布局格式進行存儲布局的;所述第二內(nèi)存布局格式是在所述第一內(nèi)存布局格式的基礎上以所述預設數(shù)量在通道維度上進行分組得到的。
9、可選地,所述將所述第一數(shù)量個子算子分配至神經(jīng)網(wǎng)絡處理器中的至少兩個目標核心,包括:
10、確定所述神經(jīng)網(wǎng)絡處理器中多個核心的第二數(shù)量;
11、基于所述第一數(shù)量與所述第二數(shù)量之間的大小關(guān)系,確定各個核心中的至少一個目標核心,以及各個目標核心各自對應的子算子的處理數(shù)量;所述目標核心對應的子算子的處理數(shù)量不為零;
12、針對每個目標核心,從第一數(shù)量個子算子中確定該目標核心對應的處理數(shù)量個子算子;其中,各個目標核心各自對應的至少一個子算子之間不重疊;
13、針對每個目標核心,將所述該目標核心對應的處理數(shù)量個子算子分配給所述目標核心。
14、可選地,所述基于所述第一數(shù)量與所述第二數(shù)量之間的大小關(guān)系,確定各個核心中的至少一個目標核心,以及各個目標核心各自對應的子算子的處理數(shù)量,包括:
15、若所述第一數(shù)量小于所述第二數(shù)量,則將所述第二數(shù)量個核心中的第一數(shù)量的核心作為目標核心,將每個目標核心的處理數(shù)量設置為1;
16、若所述第一數(shù)量不小于第二數(shù)量,則將每個核心作為目標核心,并基于所述第一數(shù)量和所述第二數(shù)量,確定各個目標核心各自對應的處理數(shù)量。
17、可選地,所述基于所述第一數(shù)量和所述第二數(shù)量,確定各個目標核心各自對應的處理數(shù)量,包括:
18、將所述第一數(shù)量對所述第二數(shù)量進行整數(shù)除法所得到的計算結(jié)果作為第一數(shù)值;
19、將所述第一數(shù)量對所述第二數(shù)量進行取余運算所得到的計算結(jié)果作為第二數(shù)值;
20、若所述第二數(shù)值為零,則將所述第一數(shù)值作為每個目標核心對應的處理數(shù)量;
21、若所述第二數(shù)值不為零,則從所述各個目標核心中確定第二數(shù)值個第一目標核心,將所述第一目標核心對應的處理數(shù)量設置為第三數(shù)值;將所述各個目標核心中每個第二目標核心對應的處理數(shù)量設置為所述第一數(shù)值;
22、所述第二目標核心為所述各個目標核心中除所述第一目標核心之外的目標核心;所述第三數(shù)值比所述第一數(shù)值大1。
23、可選地,所述每個目標核心分別對應一個核心序號;
24、所述從所述各個目標核心中確定第二數(shù)值個第一目標核心,包括:
25、將所述各個目標核心中核心序號排序靠前的第二數(shù)值個目標核心作為所述第一目標核心。
26、可選地,所述將各個子算子各自對應的各個子數(shù)據(jù)進行拼接,包括:
27、確定各個子算子對應的順序關(guān)系;
28、按照各個子算子對應的順序關(guān)系對各個子算子各自對應的各個子數(shù)據(jù)順次拼接。
29、可選地,所述目標算子與所述目標算子的相鄰算子存在連接關(guān)系;所述目標算子用于處理基于第一內(nèi)存布局格式進行存儲布局的數(shù)據(jù),所述相鄰算子用于處理基于第二內(nèi)存布局格式進行存儲布局的數(shù)據(jù)。
30、根據(jù)本公開實施例的另一個方面,提供了一種數(shù)據(jù)處理裝置,該裝置包括:
31、獲取模塊,用于獲取待處理的初始數(shù)據(jù),以及所述初始數(shù)據(jù)對應的目標算子;
32、切分模塊,用于將所述目標算子的輸出通道數(shù)量除以預設數(shù)量所得到的商作為第一數(shù)量,將所述目標算子切分為第一數(shù)量個子算子;
33、分配模塊,用于將所述第一數(shù)量個子算子分配至神經(jīng)網(wǎng)絡處理器中的至少兩個目標核心;其中,神經(jīng)網(wǎng)絡處理器中的多個核心至少包括所述至少兩個目標核心;
34、運算模塊,用于針對每個目標核心中的每個子算子,通過該目標核心執(zhí)行該子算子對所述初始數(shù)據(jù)的運算,將運算所得到的結(jié)果作為該子算子對應的子數(shù)據(jù);
35、拼接模塊,用于將各個子算子各自對應的各個子數(shù)據(jù)進行拼接,將拼接后的數(shù)據(jù)作為所述初始數(shù)據(jù)對應的目標數(shù)據(jù);
36、其中,所述初始數(shù)據(jù)是基于第一內(nèi)存布局格式進行存儲布局的;所述目標數(shù)據(jù)是基于第二內(nèi)存布局格式進行存儲布局的;所述第二內(nèi)存布局格式是在所述第一內(nèi)存布局格式的基礎上以所述預設數(shù)量在通道維度上進行分組得到的。
37、根據(jù)本公開實施例的另一個方面,提供了一種電子設備,該電子設備包括存儲器、處理器及存儲在存儲器上并可在處理器上運行的計算機程序,處理器執(zhí)行程序時實現(xiàn)上述任一種數(shù)據(jù)處理方法的步驟。
38、根據(jù)本公開實施例的再一個方面,提供了一種計算機可讀存儲介質(zhì),該計算機可讀存儲介質(zhì)上存儲有計算機程序,該計算機程序被處理器執(zhí)行時實現(xiàn)如上述任一種數(shù)據(jù)處理方法的步驟。
39、根據(jù)本公開實施例的一個方面,提供了一種計算機程序產(chǎn)品,其包括計算機程序,該計算機程序被處理器執(zhí)行時實現(xiàn)如上述任一種數(shù)據(jù)處理方法的步驟。
40、本公開實施例提供的技術(shù)方案帶來的有益效果是:
41、通過將目標算子切分為第一數(shù)量個子算子,使得每個子算子對初始數(shù)據(jù)進行運算,得到對應的子數(shù)據(jù),對各個子數(shù)據(jù)進行拼接,將拼接后的數(shù)據(jù)作為目標數(shù)據(jù),使得目標數(shù)據(jù)可以直接轉(zhuǎn)換為第二內(nèi)存布局格式,不需要插入layout?convert算子,減少了layoutconvert密集訪存數(shù)據(jù)所帶來的耗時,提高了神經(jīng)網(wǎng)絡處理器的性能。
42、通過將第一數(shù)量個子算子分配給神經(jīng)網(wǎng)絡處理器中多個目標核心,將目標算子的任務劃分為多個子算子的子任務,通過將多個子任務分配給多個核心進行并行處理,進一步提高了神經(jīng)網(wǎng)絡處理器的性能。