本發(fā)明涉及神經(jīng)網(wǎng)絡(luò),尤其涉及一種npu異構(gòu)平臺(tái)的內(nèi)存分配方法及裝置。
背景技術(shù):
1、npu(neural?network?processor?unit,神經(jīng)網(wǎng)絡(luò)處理器)是一種特殊的處理器,npu利用電路模擬人類的神經(jīng)元和突觸結(jié)構(gòu),來(lái)處理特定的任務(wù)。
2、隨著神經(jīng)網(wǎng)絡(luò)模型規(guī)模的增大,神經(jīng)網(wǎng)絡(luò)模型執(zhí)行深度學(xué)習(xí)計(jì)算時(shí)所需npu的內(nèi)存也越來(lái)越多。npu可能會(huì)為神經(jīng)網(wǎng)絡(luò)模型的深度學(xué)習(xí)運(yùn)算任務(wù)分配內(nèi)存存儲(chǔ)各運(yùn)算時(shí)的各種數(shù)據(jù),例如,每一模型分配到的內(nèi)存包括:為輸入數(shù)據(jù)分配輸入內(nèi)存,為權(quán)重?cái)?shù)據(jù)分配權(quán)重內(nèi)存,為指令數(shù)據(jù)分配指令內(nèi)存,為各網(wǎng)絡(luò)層輸出數(shù)據(jù)分配臨時(shí)內(nèi)存,以及為各模型的整體輸出分配輸出內(nèi)存。
3、在實(shí)際的模型推理中,npu執(zhí)行神經(jīng)網(wǎng)絡(luò)模型的深度學(xué)習(xí)運(yùn)算任務(wù)時(shí)所分配的整體內(nèi)存較大,而內(nèi)存資源是有限的。
技術(shù)實(shí)現(xiàn)思路
1、有鑒于此,本發(fā)明提供一種npu異構(gòu)平臺(tái)的內(nèi)存分配方法及裝置,用于解決目前npu執(zhí)行神經(jīng)網(wǎng)絡(luò)模型的深度學(xué)習(xí)運(yùn)算任務(wù)時(shí)占用的內(nèi)存較大,處理效率較低的問(wèn)題。
2、為解決上述技術(shù)問(wèn)題,第一方面,本發(fā)明提供一種npu異構(gòu)平臺(tái)的內(nèi)存分配方法,該方法包括:
3、獲取所述npu異構(gòu)平臺(tái)中的第一目標(biāo)算子,對(duì)所述第一目標(biāo)算子的輸入張量和輸出張量、以及第一目標(biāo)張量進(jìn)行內(nèi)存分配,所述第一目標(biāo)算子為支持運(yùn)行推理加速的算子,所述第一目標(biāo)張量為被支持運(yùn)行推理加速的算子所使用的張量;
4、獲取所述npu異構(gòu)平臺(tái)中的第二目標(biāo)算子,將所述第二目標(biāo)算子的輸出張量的內(nèi)存復(fù)用所述第二目標(biāo)算子的輸入張量的內(nèi)存,所述第二目標(biāo)算子為支持原地操作的算子;
5、按照所述npu異構(gòu)平臺(tái)中的第三目標(biāo)算子的算子配置信息中的算子寬度由大到小的順序,逐一對(duì)各所述第三目標(biāo)算子的各個(gè)張量進(jìn)行內(nèi)存分配,所述第三目標(biāo)算子為除所述第一目標(biāo)算子、所述第二目標(biāo)算子以外的其他算子,所述算子配置信息包括算子寬度,所述算子寬度為運(yùn)行所述第三目標(biāo)算子時(shí)所需占用的最小內(nèi)存量。
6、可選的,所述按照所述npu異構(gòu)平臺(tái)中的第三目標(biāo)算子的算子配置信息中的算子寬度由大到小的順序,逐一對(duì)各所述第三目標(biāo)算子的各個(gè)張量進(jìn)行內(nèi)存分配的步驟包括:
7、獲取所述算子配置信息中記錄的所述第三目標(biāo)算子運(yùn)行時(shí)內(nèi)存中存在的所有第二目標(biāo)張量;
8、針對(duì)每一所述第二目標(biāo)張量,在已有的緩存池中查找是否存在與所述第二目標(biāo)張量相匹配的目標(biāo)緩存,若存在所述目標(biāo)緩存,則將所述目標(biāo)緩存分配給所述第二目標(biāo)張量復(fù)用,若不存在所述目標(biāo)緩存,則重新申請(qǐng)新緩存分配給所述第二目標(biāo)張量,并將重新申請(qǐng)的新緩存存放入緩存池中。
9、可選的,所述針對(duì)每一所述第二目標(biāo)張量,在已有的緩存池中查找是否存在與所述第二目標(biāo)張量相匹配的目標(biāo)緩存的步驟包括:
10、在已有的緩存池中查找是否存在大于或等于所述第二目標(biāo)張量尺寸的第一緩存;
11、若存在,則將與所述第二目標(biāo)張量尺寸相差最小的第一緩存確定為與所述第二目標(biāo)張量相匹配的目標(biāo)緩存。
12、可選的,所述針對(duì)每一所述第二目標(biāo)張量,在已有的緩存池中查找是否存在與所述第二目標(biāo)張量相匹配的目標(biāo)緩存的步驟包括:
13、在已有的緩存池中查找是否存在與所述第二目標(biāo)張量的使用周期不沖突的第二緩存;
14、若存在,則將與所述第二目標(biāo)張量使用周期相差最短的第二緩存確定為與所述第二目標(biāo)張量相匹配的目標(biāo)緩存。
15、可選的,所述按照所述npu異構(gòu)平臺(tái)中的第三目標(biāo)算子的算子配置信息中的算子寬度由大到小的順序,逐一對(duì)各所述第三目標(biāo)算子的各個(gè)張量進(jìn)行內(nèi)存分配的步驟之前,所述方法還包括:
16、根據(jù)所述npu異構(gòu)平臺(tái)中的網(wǎng)絡(luò)模型的拓?fù)浣Y(jié)構(gòu),確定所述拓?fù)浣Y(jié)構(gòu)中各算子運(yùn)行時(shí)內(nèi)存中存在的張量;
17、根據(jù)各所述算子運(yùn)行時(shí)內(nèi)存中存在的張量,確定各所述算子的算子寬度以及使用周期;
18、根據(jù)各所述算子的算子寬度以及使用周期,生成各所述算子的算子配置信息。
19、第二方面,本發(fā)明還提供一種npu異構(gòu)平臺(tái)的內(nèi)存分配裝置,該裝置包括:
20、第一內(nèi)存分配模塊,用于獲取所述npu異構(gòu)平臺(tái)中的第一目標(biāo)算子,對(duì)所述第一目標(biāo)算子的輸入張量和輸出張量、以及第一目標(biāo)張量進(jìn)行內(nèi)存分配,所述第一目標(biāo)算子為支持運(yùn)行推理加速的算子,所述第一目標(biāo)張量為被支持運(yùn)行推理加速的算子所使用的張量;
21、第二內(nèi)存分配模塊,用于獲取所述npu異構(gòu)平臺(tái)中的第二目標(biāo)算子,將所述第二目標(biāo)算子的輸出張量的內(nèi)存復(fù)用所述第二目標(biāo)算子的輸入張量的內(nèi)存,所述第二目標(biāo)算子為支持原地操作的算子;
22、第三內(nèi)存分配模塊,用于按照所述npu異構(gòu)平臺(tái)中的第三目標(biāo)算子的算子配置信息中的算子寬度由大到小的順序,逐一對(duì)各所述第三目標(biāo)算子的各個(gè)張量進(jìn)行內(nèi)存分配,所述第三目標(biāo)算子為除所述第一目標(biāo)算子、所述第二目標(biāo)算子以外的其他算子,所述算子配置信息包括算子寬度,所述算子寬度為運(yùn)行所述第三目標(biāo)算子時(shí)所需占用的最小內(nèi)存量。
23、可選的,所述第三內(nèi)存分配模塊包括:
24、第一獲取單元,用于獲取所述算子配置信息中記錄的所述第三目標(biāo)算子運(yùn)行時(shí)內(nèi)存中存在的所有第二目標(biāo)張量;
25、分配單元,用于針對(duì)每一所述第二目標(biāo)張量,在已有的緩存池中查找是否存在與所述第二目標(biāo)張量相匹配的目標(biāo)緩存,若存在所述目標(biāo)緩存,則將所述目標(biāo)緩存分配給所述第二目標(biāo)張量復(fù)用,若不存在所述目標(biāo)緩存,則重新申請(qǐng)新緩存分配給所述第二目標(biāo)張量,并將重新申請(qǐng)的新緩存存放入緩存池中。
26、可選的,所述分配單元包括:
27、第一查找子單元,用于在已有的緩存池中查找是否存在大于或等于所述第二目標(biāo)張量尺寸的第一緩存;
28、第一確定子單元,用于若存在,則將與所述第二目標(biāo)張量尺寸相差最小的第一緩存確定為與所述第二目標(biāo)張量相匹配的目標(biāo)緩存。
29、可選的,所述分配單元包括:
30、第二查找子單元,用于在已有的緩存池中查找是否存在與所述第二目標(biāo)張量的使用周期不沖突的第二緩存;
31、第二確定子單元,用于若存在,則將與所述第二目標(biāo)張量使用周期相差最短的第二緩存確定為與所述第二目標(biāo)張量相匹配的目標(biāo)緩存。
32、可選的,所述裝置還包括
33、第一確定模塊,用于根據(jù)所述npu異構(gòu)平臺(tái)中的網(wǎng)絡(luò)模型的拓?fù)浣Y(jié)構(gòu),確定所述拓?fù)浣Y(jié)構(gòu)中各算子運(yùn)行時(shí)內(nèi)存中存在的張量;
34、第二確定模塊,用于根據(jù)各所述算子運(yùn)行時(shí)內(nèi)存中存在的張量,確定各所述算子的算子寬度以及使用周期;
35、生成模塊,用于根據(jù)各所述算子的算子寬度以及使用周期,生成各所述算子的算子配置信息。
36、本發(fā)明的上述技術(shù)方案的有益效果如下:
37、本發(fā)明實(shí)施例中,基于npu異構(gòu)平臺(tái)的時(shí)間與空間信息結(jié)合進(jìn)行靜態(tài)內(nèi)存分配,可以有效提升處理效率,實(shí)現(xiàn)內(nèi)存復(fù)用,減少大量?jī)?nèi)存消耗。
1.一種npu異構(gòu)平臺(tái)的內(nèi)存分配方法,其特征在于,包括:
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述按照所述npu異構(gòu)平臺(tái)中的第三目標(biāo)算子的算子配置信息中的算子寬度由大到小的順序,逐一對(duì)各所述第三目標(biāo)算子的各個(gè)張量進(jìn)行內(nèi)存分配的步驟包括:
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述針對(duì)每一所述第二目標(biāo)張量,在已有的緩存池中查找是否存在與所述第二目標(biāo)張量相匹配的目標(biāo)緩存的步驟包括:
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述針對(duì)每一所述第二目標(biāo)張量,在已有的緩存池中查找是否存在與所述第二目標(biāo)張量相匹配的目標(biāo)緩存的步驟包括:
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述按照所述npu異構(gòu)平臺(tái)中的第三目標(biāo)算子的算子配置信息中的算子寬度由大到小的順序,逐一對(duì)各所述第三目標(biāo)算子的各個(gè)張量進(jìn)行內(nèi)存分配的步驟之前,所述方法還包括:
6.一種npu異構(gòu)平臺(tái)的內(nèi)存分配裝置,其特征在于,包括:
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述第三內(nèi)存分配模塊包括:
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述分配單元包括:
9.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述分配單元包括:
10.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述裝置還包括