本發(fā)明涉及一種在包括神經(jīng)網(wǎng)絡(luò)處理單元(neural?processing?unit,npu)的計算設(shè)備中生成用于提升神經(jīng)網(wǎng)絡(luò)運算效率及計算資源利用率的指令的技術(shù)。
背景技術(shù):
1、本發(fā)明涉及安裝于計算設(shè)備中的npu中執(zhí)行的神經(jīng)網(wǎng)絡(luò)運算。在圖1中,以卷積神經(jīng)網(wǎng)絡(luò)(convolutional?neural?network,cnn)為例說明神經(jīng)網(wǎng)絡(luò)運算的示例。
2、圖1示出根據(jù)一實施例的cnn的計算結(jié)構(gòu)。在下文中,參照圖1進行說明。首先,可以對存儲于內(nèi)部存儲器中的輸入圖像數(shù)據(jù)(51)執(zhí)行卷積運算,該運算使用多個卷積核,以生成卷積層(52)。生成卷積層(52)的步驟可以包括對通過所述卷積運算而獲得的多個特征圖執(zhí)行非線性運算(例如:relu、sigmoid或tanh)。然后,可以通過對卷積層(52)執(zhí)行池化而生成池化層(53)。每個卷積層(52)可以包括能夠以m*n矩陣形式表達的數(shù)據(jù)。然后,可以對池化層(53)執(zhí)行扁平化(flattening)以生成輸入至內(nèi)部神經(jīng)網(wǎng)絡(luò)(54)的數(shù)組。然后,可以將所述數(shù)組輸入至所述內(nèi)部神經(jīng)網(wǎng)絡(luò)(54)以從所述內(nèi)部神經(jīng)網(wǎng)絡(luò)(54)生成輸出。
3、圖1所示的彼此區(qū)分的所有運算過程可以視為各自不同的層。此外,根據(jù)本發(fā)明的神經(jīng)網(wǎng)絡(luò)可以視為包括圖1所示的所有層,也可以視為表示所述內(nèi)部神經(jīng)網(wǎng)絡(luò)(54)。圖1是用于幫助理解的示例,因此根據(jù)本發(fā)明的神經(jīng)網(wǎng)絡(luò)的范圍不限于上述內(nèi)容。
4、在神經(jīng)網(wǎng)絡(luò)中,數(shù)據(jù)可以在沿一方向傳輸?shù)耐瑫r每當遇到層時進行運算和轉(zhuǎn)換。這種數(shù)據(jù)的變換及流動可以用流(stream)一詞來表示。所述神經(jīng)網(wǎng)絡(luò)可以包括第一層及第二層。此時,如果第一層輸出的輸出激活值直接或經(jīng)進一步轉(zhuǎn)換而輸入至第二層,則可以稱所述第一層為相對于所述第二層更位于上游的層,稱所述第二層為相對于所述第一層更位于下游的層。所述“上游”及“下游”術(shù)語是為便于說明本發(fā)明而引入的。
5、在例如臺式計算機、筆記本計算機、智能手機或平板電腦等計算設(shè)備中可以安裝有神經(jīng)網(wǎng)絡(luò)處理器(neural?processing?unit,npu)。npu可以具有適用于神經(jīng)網(wǎng)絡(luò)運算的結(jié)構(gòu)。此時,如果npu要執(zhí)行神經(jīng)網(wǎng)絡(luò)運算,則npu內(nèi)部的控制部必須執(zhí)行用于神經(jīng)網(wǎng)絡(luò)運算的預(yù)定的指令,從而控制npu內(nèi)部資源。所述指令可以在所述用戶設(shè)備的制造過程中存儲于所述npu內(nèi),或者也可以所述用戶設(shè)備制造完成后提供給所述npu。
6、當預(yù)定神經(jīng)網(wǎng)絡(luò)在npu上運行時,所述預(yù)定神經(jīng)網(wǎng)絡(luò)中定義的特定層的輸入輸出數(shù)據(jù)的大小可能大于npu內(nèi)部的內(nèi)部存儲器。在這種情況下,有必要將所述輸入輸出數(shù)據(jù)分割為能夠存儲于所述內(nèi)部存儲器中的大小來處理。
7、為執(zhí)行與一個特定層對應(yīng)的運算,npu可以從npu外部的存儲器(例如:dram)通過總線獲取需輸入至所述特定層的輸入激活值及其他輸入數(shù)據(jù)(例如,權(quán)重等)等運算所需的輸入數(shù)據(jù)。并且,可以將所述一特定層輸出的輸出激活值(輸出數(shù)據(jù))通過所述總線再次提供給npu外部的存儲器。每當執(zhí)行各層的運算時,通過總線在外部存儲器進行寫入操作和讀取操作,因此隨著神經(jīng)網(wǎng)絡(luò)中層數(shù)的增加,會消耗大量計算資源,并存在整體運算效率降低的問題。該問題即使將所述輸入輸出數(shù)據(jù)分割為能夠存儲于所述內(nèi)部存儲器中的大小進行運算時也同樣會發(fā)生。
8、構(gòu)成神經(jīng)網(wǎng)絡(luò)的層與層之間可以由神經(jīng)網(wǎng)絡(luò)制作者設(shè)定具有多種輸入輸出連接形態(tài),因此難以對所有連接情況都實現(xiàn)有效的運算分割。因此,在功耗及帶寬(bandwidth)等方面,存在難以實現(xiàn)高效硬件運作的問題。
9、在神經(jīng)網(wǎng)絡(luò)運算方法的一實施例中,為執(zhí)行層運算,需要輸入張量、層參數(shù)、權(quán)重及偏置等數(shù)據(jù)??赡艹霈F(xiàn)該數(shù)據(jù)的大小大于npu內(nèi)部存儲器(sram)的容量的情況。并且,所述層運算可以生成如結(jié)果輸出激活值的輸出張量,所述輸出張量的大小可能大于npu的內(nèi)部存儲器的容量。
10、從特定層輸出的輸出激活值可以被記錄在npu的外部存儲器中。為了將所述輸出激活值輸入至所述特定層的下一層,所述npu應(yīng)讀取記錄在所述外部存儲器的所述輸出激活值并存儲于內(nèi)部存儲器。因此,為了傳輸層之間的激活值,可能分別發(fā)生一次通過總線進行的寫入操作及讀取(read)操作。
11、在一實施例中,輸入通過行維分區(qū)分割輸入激活值而生成的部分輸入激活值的層可以是卷積層。此時,所述各部分輸入激活值所包含的行數(shù)應(yīng)大于或等于用于所述卷積層運算的卷積核的大小。此外,所述各部分輸入激活值的大小應(yīng)小于或等于npu的內(nèi)部存儲器的容量。此外,隨著被分區(qū)的層數(shù)增加,額外重復(fù)運算的次數(shù)增加,因此存在讀取帶寬(readbandwidth)和運算量可能增加的問題。
12、如上所述,當為npu的運行而進行層分區(qū)時,存在不可避免地發(fā)生對外部存儲器的讀取操作及寫入操作的問題。
技術(shù)實現(xiàn)思路
1、技術(shù)課題
2、本發(fā)明的目的在于,提供一種生成npu指令的技術(shù),該技術(shù)能夠減少npu與其他外部存儲器之間交換的數(shù)據(jù)量來減少計算設(shè)備的帶寬(bandwidth),并且提高npu的運算效率。
3、技術(shù)方案
4、npu執(zhí)行的指令可能是由想要提供使用預(yù)定神經(jīng)網(wǎng)絡(luò)運算的應(yīng)用程序的開發(fā)者生成并提供的。本發(fā)明包括關(guān)于幫助上述開發(fā)者生成上述指令的開發(fā)工具的內(nèi)容。
5、本發(fā)明可以利用層分區(qū)(layer?partitioning)的概念。層分區(qū)可以指在使用npu的運算裝置(數(shù)據(jù)運算部)根據(jù)構(gòu)成所述神經(jīng)網(wǎng)絡(luò)的層的運算規(guī)則進行運算時,在上述情況下,基于一個層定義多個層,從而生成能夠在npu運行的層的方法。
6、在本發(fā)明中,可以將所述多個部分輸出激活值相互合并而生成一個輸出激活值的作業(yè)稱為層連接(concat?layer)作業(yè)。當所述層連接作業(yè)在所述用戶計算裝置執(zhí)行時,所述層連接作業(yè)可以通過npu將所述多個部分輸出激活值分別寫入(write)至npu外部的外部存儲器(例如,dram)的操作來實現(xiàn)。即,當所述多個部分輸出激活值全部分別存儲至外部存儲器的適當指定部分時,可以視為所述一個輸出激活已生成。
7、根據(jù)本發(fā)明的一方面提供的神經(jīng)網(wǎng)絡(luò)運算方法,為了減少通過總線在npu與dram之間傳輸?shù)臄?shù)據(jù)量,可以定義在構(gòu)成npu處理的神經(jīng)網(wǎng)絡(luò)的層中由相互連接的連續(xù)層構(gòu)成的一個組。由此,可以減小包含所述npu與dram的系統(tǒng)的通信帶寬。為此,可以將整個神經(jīng)網(wǎng)絡(luò)分組為有利于運算分割的預(yù)定義層輸入輸出結(jié)構(gòu)。
8、根據(jù)本發(fā)明的一方面提供的組至少具有三種類型。第一種類組可以稱為inverse-y組,第二種類組可以稱為串行組,第三種類組可以稱為殘差組。根據(jù)本發(fā)明的一方面提供的組不限于上述三種類型。
9、此時,由所述定義的組定義的網(wǎng)絡(luò)可以被分區(qū)為多個部分網(wǎng)絡(luò),作為所述分區(qū)的基準,可以使用包含于所述npu的內(nèi)部存儲器的容量。
10、此時,構(gòu)成各所述組的層中的起始層(最上游層)與結(jié)束層(最下游層)可以根據(jù)使硬件資源的消耗最小化的基準來確定。為了優(yōu)化硬件資源需要考慮的因素包括:重疊激活大小(overlap?activation?size)、權(quán)重重載大小(weight?reloading?size)及dram輸入輸出大小(size)。
11、根據(jù)本發(fā)明的一方面,可以將多個層進行分組而生成層組,并對所述生成的層組進行分區(qū),這樣可以減少在定義的層組內(nèi)各層的執(zhí)行期間發(fā)生的對于外部存儲器的讀取操作和寫入操作的次數(shù)。結(jié)果,可以減小用于npu運行的帶寬。在本說明書中,所述層組可以簡稱為組。
12、根據(jù)本發(fā)明的一方面,可以提供一種由開發(fā)者計算設(shè)備生成由構(gòu)成神經(jīng)網(wǎng)絡(luò)的多個層構(gòu)成的組的分組進程。
13、根據(jù)本發(fā)明的一方面,可以提供一種由開發(fā)者計算設(shè)備分區(qū)由構(gòu)成神經(jīng)網(wǎng)絡(luò)的多個層構(gòu)成的組的組分區(qū)進程。
14、此時,分組進程可以先于所述組分區(qū)進程執(zhí)行。
15、為了執(zhí)行所述分組進程,可以預(yù)先定義層分組模式(layer?grouping?pattern),該層分組模式表征可以進行分組的連續(xù)層的特定模式。在神經(jīng)網(wǎng)絡(luò)所述層中存在于所述預(yù)定義的層分組模式相同的部分的情況下,可以執(zhí)行對該部分的分組。
16、所述神經(jīng)網(wǎng)絡(luò)在執(zhí)行根據(jù)本發(fā)明的方法之前已被設(shè)計了其結(jié)構(gòu),可能未經(jīng)過用于特定npu的優(yōu)化進程。
17、通過所述組分區(qū)進程,可以基于由所述組定義的第一網(wǎng)絡(luò)生成第二網(wǎng)絡(luò)。所述第二網(wǎng)絡(luò)可以稱為分區(qū)網(wǎng)絡(luò)(partitioned?network)。
18、所述分區(qū)網(wǎng)絡(luò)可以包括:p個部分網(wǎng)絡(luò),具有與第一網(wǎng)絡(luò)相同的網(wǎng)絡(luò)結(jié)構(gòu)信息;p個切片層,生成將輸入至所述p個部分網(wǎng)絡(luò)的p個輸入激活值;以及連接層,結(jié)合從所述p個部分網(wǎng)絡(luò)輸出的p個輸出激活值。
19、在此,所述第一網(wǎng)絡(luò)的網(wǎng)絡(luò)結(jié)構(gòu)信息可以為包含構(gòu)成所述組(第一網(wǎng)絡(luò))的層、所述層的運算規(guī)則及所述層之間的激活值傳輸路徑的鏈路的信息。
20、所述組分區(qū)進程可以包括以下步驟:
21、在步驟s310中,開發(fā)者計算設(shè)備可以定義由構(gòu)成神經(jīng)網(wǎng)絡(luò)的多個層構(gòu)成的一個組。
22、定義所述一個組的規(guī)則可以是使用所述神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)結(jié)構(gòu)信息的特征的規(guī)則。
23、在步驟s320中,所述開發(fā)者計算設(shè)備可以定義p個切片層,該p個切片層分割需輸入至所述組的輸入激活值并生成p個部分輸入激活值。
24、此時,所述各部分輸入激活值的大小可以小于用戶計算設(shè)備中包含的npu的內(nèi)部存儲器中存儲輸入激活值的存儲體的容量。
25、此時,輸入至所述切片層的激活值可以是相同的。并且,各切片層輸出的激活值可以具有不同的值。
26、在步驟s330中,所述開發(fā)者計算設(shè)備可以定義p個部分網(wǎng)絡(luò),該p個部分網(wǎng)絡(luò)分別接收所述p個部分輸入激活值。
27、此時,各所述部分網(wǎng)絡(luò)的網(wǎng)絡(luò)結(jié)構(gòu)信息可以與由所述組定義的第一網(wǎng)絡(luò)的網(wǎng)絡(luò)結(jié)構(gòu)信息相同。
28、此時,輸入至各部分網(wǎng)絡(luò)的部分輸入激活值可以僅包含應(yīng)輸入至屬于所述組的層中最上游層的輸入激活值的部分數(shù)據(jù)。
29、在步驟s340中,所述開發(fā)者計算設(shè)備可以定義連接層,該連接層將所述p個部分網(wǎng)絡(luò)分別輸出的p個部分輸出激活值進行組合。
30、在步驟s350中,所述開發(fā)者計算設(shè)備可以定義多個鏈路,該多個鏈路表示所述p個切片層、所述p個部分網(wǎng)絡(luò)及所述連接層之間的激活值傳輸路徑。
31、可以通過定義所述p個切片層、所述p個部分網(wǎng)絡(luò)、所述連接層及所述多個鏈路以定義分區(qū)網(wǎng)絡(luò)。
32、根據(jù)本發(fā)明的一方面,可以提供一種npu指令生成方法,所述方法包括以下步驟:計算設(shè)備生成第p部分網(wǎng)絡(luò),該第p部分網(wǎng)絡(luò)具有與由預(yù)定義神經(jīng)網(wǎng)絡(luò)中包含的第一組層所定義的第一網(wǎng)絡(luò)結(jié)構(gòu)相同的結(jié)構(gòu);所述計算設(shè)備在包含于另一計算設(shè)備的第一存儲器中確定第p讀取地址,該第p讀取地址是存儲作為將輸入至所述第p部分網(wǎng)絡(luò)的最上游層的數(shù)據(jù)的第p部分輸入激活值的地址的位置;所述計算設(shè)備在第一存儲器中確定第p寫入地址,該第p寫入地址是應(yīng)存儲作為所述第p部分網(wǎng)絡(luò)的最下游層輸出的數(shù)據(jù)的第p部分輸出激活值的地址的位置;以及所述計算設(shè)備生成npu指令[p],該npu指令包括第一指令集、第二指令集及第三指令集。此時,所述第一指令集包含使所述另一計算設(shè)備包含的npu基于所述第p讀取地址從所述第一存儲器讀取所述第p部分輸入激活值并存儲于所述npu的內(nèi)部存儲器的指令。所述第二指令集包含使所述npu基于存儲于所述內(nèi)部存儲器中的所述第p部分輸入激活值以生成所述第p部分輸出激活值的指令。并且,所述第三指令集包含使所述npu基于所述第p寫入地址將所述第p部分輸出激活值存儲于所述第一存儲器的指令。
33、此時,所述第p部分輸入激活值可以是輸入至所述第一組的層中最上游層的輸入激活值的一部分,
34、此時,所述第一存儲器可以是提供于所述npu外部的存儲器,所述第p部分輸入激活值可以通過所述另一計算設(shè)備的總線從所述第一存儲器傳輸至所述npu的內(nèi)部存儲器,所述第p部分輸出激活值可以通過所述總線從所述內(nèi)部存儲器傳輸?shù)剿龅谝淮鎯ζ鳌?/p>
35、此時,所述第p部分輸出激活值可以是將存儲于所述內(nèi)部存儲器中的所述第p部分輸入激活值基于所述第p部分網(wǎng)絡(luò)包含的各層的運算規(guī)則進行運算而生成的。
36、此時,所述生成第p部分網(wǎng)絡(luò)的步驟可以包括:所述計算設(shè)備定義由包含于預(yù)定義神經(jīng)網(wǎng)絡(luò)的多個連續(xù)的層構(gòu)成的所述第一組;所述計算設(shè)備生成關(guān)于由包含于所述定義的第一組的多個層及多個鏈路構(gòu)成的所述第一網(wǎng)絡(luò)的結(jié)構(gòu)信息;以及所述計算設(shè)備生成與所述第一網(wǎng)絡(luò)結(jié)構(gòu)相同的所述第p部分網(wǎng)絡(luò)。此時,關(guān)于所述第一網(wǎng)絡(luò)的結(jié)構(gòu)信息可以是關(guān)于表示構(gòu)成所述第一組的各層、所述各層的運算規(guī)則及所述各層之間的激活值傳輸路徑的鏈路的信息。
37、此時,所述第一組可以包含多個層,所述最上游層可以是所述多個層中從所述第一組的外部接收激活值的層,所述最下游層可以是所述多個層中向所述第一組的外部提供激活值的層。
38、根據(jù)本發(fā)明的另一方面,可以提供一種npu指令生成方法,所述方法包括以下步驟:計算設(shè)備基于由包含于預(yù)定義神經(jīng)網(wǎng)絡(luò)的第一組的層構(gòu)成的第一網(wǎng)絡(luò)以生成包含第p部分網(wǎng)絡(luò)的分區(qū)網(wǎng)絡(luò)(p為1,2,...,或p);以及所述計算設(shè)備針對第p部分網(wǎng)絡(luò)生成使包含于另一計算設(shè)備的npu執(zhí)行的npu指令[p](p為1,2,...,或p)。所述生成分區(qū)網(wǎng)絡(luò)的步驟可以包括:所述計算設(shè)備定義第p切片層(p為1,2,...,或p),該第p切片層接收需輸入至所述第一組的輸入激活值,并輸出作為所述輸入激活值的一部分的部分輸入激活值;所述計算設(shè)備定義第p部分網(wǎng)絡(luò)(p為1,2,...,或p),該第p部分網(wǎng)絡(luò)接收所述第p切片層輸出的第p部分輸入激活值;所述計算設(shè)備定義連接層,該連接層將p個所述部分網(wǎng)絡(luò)輸出的p個部分輸出激活值進行組合;以及所述計算設(shè)備通過定義p個所述切片層、p個所述部分網(wǎng)絡(luò)及表示所述連接層之間的激活值傳輸路徑的多個鏈路以完成所述分區(qū)網(wǎng)絡(luò)。
39、此時,所述第一組的層可以是包含于所述預(yù)定義神經(jīng)網(wǎng)絡(luò)的多個連續(xù)的層。
40、此時,所述第p部分輸入激活值可以是輸入至所述第一組的層中最上游層的輸入激活值的一部分,并且,所述輸入激活值可以是能夠由所述第一部分輸入激活值至第p部分輸入激活值重構(gòu)。
41、此時,所述第p部分網(wǎng)絡(luò)的結(jié)構(gòu)與所述第一網(wǎng)絡(luò)的結(jié)構(gòu)可以相同(p為1,2,...,或p)。并且,所述生成npu指令[p]的步驟可以包括:所述計算設(shè)備在包含于所述另一計算設(shè)備的第一存儲器中確定第p讀取地址,該第p讀取地址是存儲作為將輸入至所述第p部分網(wǎng)絡(luò)的最上游層的數(shù)據(jù)的第p部分輸入激活值的地址的位置;所述計算設(shè)備在第一存儲器中確定第p寫入地址,該第p寫入地址是應(yīng)存儲作為所述第p部分網(wǎng)絡(luò)的最下游層輸出的數(shù)據(jù)的第p部分輸出激活值的地址的位置;以及所述計算設(shè)備生成npu指令[p],該npu指令包括第一指令集、第二指令集及第三指令集。并且,所述第一指令集可以包含使所述npu基于所述第p讀取地址從所述第一存儲器讀取所述第p部分輸入激活值并存儲于所述npu的內(nèi)部存儲器的指令。所述第二指令集可以包含使所述npu基于存儲于所述內(nèi)部存儲器中的所述第p部分輸入激活值以生成所述第p部分輸出激活值的指令。并且,所述第三指令集可以包含使所述npu基于所述第p寫入地址將所述第p部分輸出激活值存儲于所述第一存儲器的指令。
42、此時,所述第一存儲器可以是提供于所述npu外部的存儲器。并且,所述第p部分輸入激活值可以通過所述另一計算設(shè)備的總線從所述第一存儲器傳輸至所述npu的內(nèi)部存儲器,所述第p部分輸出激活值可以通過所述總線從所述內(nèi)部存儲器傳輸?shù)剿龅谝淮鎯ζ鳌?/p>
43、此時,所述生成第p部分網(wǎng)絡(luò)的步驟可以包括:所述計算設(shè)備定義由包含于所述預(yù)定義神經(jīng)網(wǎng)絡(luò)的多個連續(xù)的層構(gòu)成的所述第一組;所述計算設(shè)備生成關(guān)于由包含于所述定義的第一組的多個層及多個鏈路構(gòu)成的所述第一網(wǎng)絡(luò)的結(jié)構(gòu)信息;以及所述計算設(shè)備生成與所述第一網(wǎng)絡(luò)結(jié)構(gòu)相同的所述第p部分網(wǎng)絡(luò)。此時,關(guān)于所述第一網(wǎng)絡(luò)的結(jié)構(gòu)信息可以是關(guān)于表示構(gòu)成所述第一組的各層、所述各層的運算規(guī)則及所述各層之間的激活值傳輸路徑的鏈路的信息。
44、根據(jù)本發(fā)明的另一方面,可以提供一種包含存儲部;以及主處理器的計算設(shè)備。所述存儲部存儲有包含指令的程序,使所述主處理器執(zhí)行以下步驟:生成第p部分網(wǎng)絡(luò),該第p部分網(wǎng)絡(luò)具有與由預(yù)定義神經(jīng)網(wǎng)絡(luò)中包含的第一組層所定義的第一網(wǎng)絡(luò)結(jié)構(gòu)相同的結(jié)構(gòu);在包含于另一計算設(shè)備的第一存儲器中確定第p讀取地址,該第p讀取地址是存儲作為將輸入至所述第p部分網(wǎng)絡(luò)的最上游層的數(shù)據(jù)的第p部分輸入激活值的地址的位置;在所述第一存儲器中確定第p寫入地址,該第p寫入地址是應(yīng)存儲作為所述第p部分網(wǎng)絡(luò)的最下游層輸出的數(shù)據(jù)的第p部分輸出激活值的地址的位置;以及生成npu指令[p],該npu指令包括第一指令集、第二指令集及第三指令集。所述第一指令集包含使所述另一計算設(shè)備包含的npu基于所述第p讀取地址從所述第一存儲器讀取所述第p部分輸入激活值并存儲于所述npu的內(nèi)部存儲器的指令。所述第二指令集包含使所述npu基于存儲于所述內(nèi)部存儲器中的所述第p部分輸入激活值以生成所述第p部分輸出激活值的指令。并且,所述第三指令集包含使所述npu基于所述第p寫入地址將所述第p部分輸出激活值存儲于所述第一存儲器的指令。
45、根據(jù)本發(fā)明的又一方面,可以提供一種包含存儲部;以及主處理器的計算設(shè)備。所述存儲部存儲有包含指令的程序,使所述主處理器執(zhí)行以下步驟:基于由包含于預(yù)定義神經(jīng)網(wǎng)絡(luò)的第一組的層構(gòu)成的第一網(wǎng)絡(luò)以生成包含第p部分網(wǎng)絡(luò)的分區(qū)網(wǎng)絡(luò)(p為1,2,...,或p);針對第p部分網(wǎng)絡(luò)生成使包含于另一計算設(shè)備的npu執(zhí)行的npu指令[p](p為1,2,...,或p)。所述生成分區(qū)網(wǎng)絡(luò)的步驟包括:所述計算設(shè)備定義第p切片層(p為1,2,...,或p),該第p切片層接收需輸入至所述第一組的輸入激活值,并輸出作為所述輸入激活值的一部分的部分輸入激活值;所述計算設(shè)備定義第p部分網(wǎng)絡(luò)(p為1,2,...,或p),該第p部分網(wǎng)絡(luò)接收所述第p切片層輸出的第p部分輸入激活值;所述計算設(shè)備定義連接層,該連接層將p個所述部分網(wǎng)絡(luò)輸出的p個部分輸出激活值進行組合;以及所述計算設(shè)備通過定義多個鏈路以完成所述分區(qū)網(wǎng)絡(luò),該多個鏈路表示p個所述切片層、p個所述部分網(wǎng)絡(luò)及所述連接層之間的激活值傳輸路徑。
46、根據(jù)本發(fā)明的一方面,可以提供一種在包含內(nèi)部存儲器的npu中執(zhí)行的神經(jīng)網(wǎng)絡(luò)運算方法。所述神經(jīng)網(wǎng)絡(luò)運算方法包括以下步驟:將預(yù)定的第一進程[p]從p=1至p=p依次重復(fù)執(zhí)行(p=1,...,p,p為大于等于2的自然數(shù))。此時,所述第一進程[p]包括以下步驟:從通過總線連接的外部存儲器讀取部分輸入激活值[1][p]并將其存儲于所述內(nèi)部存儲器的第一存儲體;對存儲于所述第一存儲體的所述部分輸入激活值[1][p]按照層[1]的運算規(guī)則進行運算,并將生成的部分輸出激活值[1][p]存儲于所述第一存儲體;將第二進程從s=1至s=l-1依次重復(fù)執(zhí)行(l為大于等于2的自然數(shù)),該第二進程是對存儲于所述第一存儲體的部分輸出激活值[s][p]按照與層[s]的輸出端相連的層[s+1]的運算規(guī)則進行運算,并將生成的部分輸出激活值[s+1][p]存儲于所述第一存儲體;以及將存儲于第一存儲體的所述部分輸出激活值[l][p]通過總線寫入所述外部存儲器。
47、此時,所述部分輸入激活值[1][p]可以是輸入至神經(jīng)網(wǎng)絡(luò)的所述層[1]的輸入激活值[1]的一部分,或者可以是基于所述一部分而生成的值(p=1,...,p,p為大于等于2的自然數(shù))。
48、此時,所述神經(jīng)網(wǎng)絡(luò)運算方法可以進一步包括以下步驟:在依次重復(fù)所述第一進程[p]之前,通過總線從所述外部存儲器讀取用于所述層[1]的運算規(guī)則的權(quán)重[1]及用于所述層[s+1]的運算規(guī)則的權(quán)重[s+1]
49、(s=1,...,l-1),并將其存儲于所述內(nèi)部存儲器的第二存儲體。此時,所述輸出激活值[1][p]可以是基于存儲于所述第一存儲體的所述輸入激活值[1][p]和存儲于所述第二存儲體的所述權(quán)重[1]而生成的,所述輸出激活值[s+1][p]可以是基于存儲于所述第一存儲體的所述輸出激活值[s][p]和存儲于所述第二存儲體的所述權(quán)重[s+1]而生成的(s=1,...,l-1)。
50、此時,所述重復(fù)預(yù)定的第一進程[p]的步驟可以基于所述npu執(zhí)行的一組npu指令執(zhí)行,所述外部存儲器中存儲有所述部分輸入激活值
51、[1][p]的地址可以包含在所述npu指令中,且所述外部存儲器中應(yīng)存儲有所述部分輸出激活值[l][p]的地址也可以包含在所述npu指令中。
52、此時,由所述部分輸出激活值[l][p](p=1,...,p)構(gòu)成的輸出激活值可以是輸入至層[l+1]的輸入激活值[l+1]。并且,所述神經(jīng)網(wǎng)絡(luò)運算方法可以進一步包括以下步驟:在重復(fù)所述第一進程[p]之后,將第三進程[q]從q=1至q=q依次重復(fù)執(zhí)行(q為大于等于2的自然數(shù))。此時,所述第三進程[q]可以包括以下步驟:從通過總線連接的外部存儲器讀取輸入激活值[l+1][q]并將其存儲于所述內(nèi)部存儲器的第一存儲體;對存儲于所述第一存儲體的所述輸入激活值[l+1][q]按照層[l+1]的運算規(guī)則進行運算,并將生成的輸出激活值[l+1][q]存儲于所述第一存儲體;將第四進程從s=l+1至s=m-1依次重復(fù)執(zhí)行(m為大于等于l+2的自然數(shù)),該第四進程是對存儲于所述第一存儲體的輸出激活值[s][q]按照與層[s]的輸出端相連的層[s+1]的運算規(guī)則進行運算,并將生成的輸出激活值[s+1][q]存儲于所述第一存儲體;以及將存儲于第一存儲體的所述輸出激活值[m][q]通過總線寫入所述外部存儲器。
53、此時,所述部分輸入激活值[l+1][q]可以是輸入至神經(jīng)網(wǎng)絡(luò)的所述層[l+1]的輸入激活值[l+1]的一部分,或者可以是基于所述一部分而生成的值(q=1,...,q,q為大于等于2的自然數(shù))。
54、此時,所述層[1]、所述層[s+1](s=1,...,l-1)、所述層[l+1]及所述層[s+1](s=l+1,...,m-1)可以包含于所述神經(jīng)網(wǎng)絡(luò)。
55、此時,部分輸出激活值[sc][p]可以是基于存儲于所述第一存儲體的部分輸入激活值[sc][p]和存儲于所述內(nèi)部存儲器的第二存儲體的權(quán)重
56、[sc]而生成的,所述層[sc]的運算規(guī)則可以是卷積運算規(guī)則(sc=1,...,或l),所述輸入激活值[1]可以是由寬度維、高度維及輸入通道維構(gòu)成的三維張量,所述權(quán)重[sc]可以是由寬度維、高度維、輸入通道維及輸出通道維構(gòu)成的四維張量,所述輸入激活值[1]的輸入通道維的大小可以與所述權(quán)重[sc]的輸入通道維的大小相同,所述部分輸入激活值[1][p]可以是基于所述輸入激活值[1]沿寬度維或高度維分割的一部分,或者基于該部分而生成(p=1,...,p,p為大于等于2的自然數(shù))。
57、根據(jù)本發(fā)明的另一方面,可以提供一種npu裝置,其包括:內(nèi)部存儲器、控制部及數(shù)據(jù)運算部。所述控制部被配置為使用所述數(shù)據(jù)運算部執(zhí)行將預(yù)定的第一進程[p]從p=1至p=p依次重復(fù)執(zhí)行(p=1,...,p,p為大于等于2的自然數(shù))。所述第一進程[p]包括以下步驟:從通過總線連接的外部存儲器讀取部分輸入激活值[1][p]并將其存儲于所述內(nèi)部存儲器的第一存儲體;對存儲于所述第一存儲體的所述部分輸入激活值
58、[1][p]按照層[1]的運算規(guī)則進行運算,并將生成的部分輸出激活值
59、[1][p]存儲于所述第一存儲體;將第二進程從s=1至s=l-1依次重復(fù)執(zhí)行(l為大于等于2的自然數(shù)),該第二進程是對存儲于所述第一存儲體的部分輸出激活值[s][p]按照與層[s]的輸出端相連的層[s+1]的運算規(guī)則進行運算,并將生成的部分輸出激活值[s+1][p]存儲于所述第一存儲體;以及將存儲于所述第一存儲體的所述部分輸出激活值[l][p]通過總線寫入所述外部存儲器。
60、根據(jù)本發(fā)明的另一方面,可以提供一種計算設(shè)備,其包括:所述npu裝置;所述總線;以及所述外部存儲器。
61、發(fā)明效果
62、根據(jù)本發(fā)明,可以提供一種生成npu指令的技術(shù),該技術(shù)能夠減少npu與其他外部存儲器之間交換的數(shù)據(jù)量來減少計算設(shè)備的帶寬(bandwidth),并且提高npu的運算效率。