[go: up one dir, main page]

TWI869788B - 人工智慧模型的處理電路及運算排程方法 - Google Patents

人工智慧模型的處理電路及運算排程方法 Download PDF

Info

Publication number
TWI869788B
TWI869788B TW112108662A TW112108662A TWI869788B TW I869788 B TWI869788 B TW I869788B TW 112108662 A TW112108662 A TW 112108662A TW 112108662 A TW112108662 A TW 112108662A TW I869788 B TWI869788 B TW I869788B
Authority
TW
Taiwan
Prior art keywords
sub
intermediate data
operator
tensor
memory
Prior art date
Application number
TW112108662A
Other languages
English (en)
Other versions
TW202437087A (zh
Inventor
俞清
Original Assignee
大陸商星宸科技股份有限公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 大陸商星宸科技股份有限公司 filed Critical 大陸商星宸科技股份有限公司
Priority to TW112108662A priority Critical patent/TWI869788B/zh
Publication of TW202437087A publication Critical patent/TW202437087A/zh
Application granted granted Critical
Publication of TWI869788B publication Critical patent/TWI869788B/zh

Links

Images

Landscapes

  • Complex Calculations (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

一種人工智慧模型的處理電路包含一記憶體、一記憶體管理電路及一運算電路。記憶體管理電路從一外部記憶體讀取一張量,並儲存至該記憶體。運算電路被配置以進行以下操作:對該張量的一第一子張量、一第二子張量分别進行一第一種類的運算,以產生一第一中間資料及一第二中間資料;對該第一中間資料及該第二中間資料進行一第二種類的運算,以產生一第三中間資料;對該張量的一第三子張量進行該第一種類的運算,以產生一第四中間資料;以及,對該第一中間資料、該第二中間資料及該第四中間資料進行該第二種類的運算,以產生一第五中間資料。

Description

人工智慧模型的處理電路及運算排程方法
本發明是關於人工智慧模型,尤其是關於人工智慧模型的處理電路與運算排程方法。
在一個晶片上系統(例如,系統單晶片(system-on-chip, SoC))中,記憶體頻寬總量往往是固定的,且被多個模組使用。當某個模組所佔用的記憶體頻寬過大時,會導致其他模組獲取記憶體發生阻塞,進而導致系統性能降低。人工智慧(artificial intelligence, AI)模型作為晶片上系統中的一個模組,經常需要處理大量的資料,對記憶體的頻寬需求大;因此,減小AI模型的頻寬需求成為一個重要的課題。
鑑於先前技術之不足,本發明之一目的在於提供一種人工智慧模型的處理電路及運算排程方法,以改善先前技術的不足。
本發明之一實施例提供一種人工智慧模型的處理電路。該處理電路耦接一外部記憶體並且包含一記憶體、一記憶體管理電路以及一運算電路。記憶體管理電路用來從該外部記憶體讀取一張量,並將該張量儲存至該記憶體。運算電路被配置以進行以下操作:對該張量的一第一子張量進行一第一種類的運算,以產生一第一中間資料;對該張量的一第二子張量進行該第一種類的運算,以產生一第二中間資料;對該第一中間資料及該第二中間資料進行一第二種類的運算,以產生一第三中間資料;對該張量的一第三子張量進行該第一種類的運算,以產生一第四中間資料;以及,對該第一中間資料、該第二中間資料及該第四中間資料進行該第二種類的運算,以產生一第五中間資料。
本發明之另一實施例提供一種人工智慧模型的處理電路。該處理電路耦接一外部記憶體並且包含一記憶體。該處理電路執行以下操作:從該外部記憶體讀取一張量及複數個核心參數,並將該張量及該些核心參數儲存至該記憶體,其中,該張量包含一第一子張量及一第二子張量,該些核心參數包含一向量核心參數;參考該向量核心參數的一第一部分對該第一子張量進行一第一向量運算,以產生一第一中間資料;以及,參考該向量核心參數的一第二部分對該第二子張量進行一第二向量運算,以產生一第二中間資料。該向量核心參數的該第一部分不等於該向量核心參數的該第二部分。
本發明之另一實施例提供一種人工智慧模型的運算排程方法。該人工智慧模型包含一第一運算子及一第二運算子。該運算排程方法包含:將一張量分為H個子張量,H係大於1之整數;將該第一運算子分為H個第一子運算子;將該第二運算子分為H個第二子運算子;確定該H個第一子運算子及該H個第二子運算子之間的一依賴關係;根據該依賴關係排序該H個第一子運算子及該H個第二子運算子,以得到一操作順序;以及,根據該操作順序決定執行該人工智慧模型之一處理電路何時從該處理電路所包含的一記憶體中刪除一目標資料,該目標資料係該H個第一子運算子及該H個第二子運算子的其中一者的一輸出資料。
本發明之實施例所體現的技術手段可以改善先前技術之缺點的至少其中之一,因此本發明相較於先前技術可以減少記憶體用量及/或降低對記憶體的頻寬需求。
有關本發明的特徵、實作與功效,茲配合圖式作實施例詳細說明如下。
以下說明內容之技術用語係參照本技術領域之習慣用語,如本說明書對部分用語有加以說明或定義,該部分用語之解釋係以本說明書之說明或定義為準。
本發明之揭露內容包含人工智慧模型的處理電路及運算排程方法。由於本發明之人工智慧模型的處理電路所包含之部分元件單獨而言可能為已知元件,因此在不影響該裝置發明之充分揭露及可實施性的前提下,以下說明對於已知元件的細節將予以節略。
圖1是AI網路的一個例子,可視為一個簡單的AI模型,或一個複雜的AI模型的一部分。AI網路100用來對輸入資料Din進行運算,以產生輸出資料Dout。圖1的AI網路100包含三個運算子(operator):減法運算子110(「SUB」)、卷積(convolution)運算子120(「CONV」)及加法運算子130(「ADD」)。減法運算子110對張量(tensor)TS1(即,輸入資料Din)進行減法運算,以產生張量TS2。卷積運算子120對張量TS2進行卷積運算,以產生張量TS3。加法運算子130對張量TS3進行加法運算,以產生張量TS4(即,輸出資料Dout)。在圖1的例子中,張量TS1、張量TS2、張量TS3及張量TS4的大小(維度資訊)皆為[1,3,224,224]。
圖2為本發明人工智慧模型的運算排程方法之一實施例的流程圖。圖2的流程由晶片開發工具(例如,電腦)執行,包含以下步驟。
步驟S210:將張量切分為H個子張量(或稱為塊(tile)),H可以是張量的任一維度(H為大於1的整數)。更明確地說,此步驟是根據AI網路100的最後一個運算子的輸出張量的其中一個維度,來決定H的值,然後將張量分為H個子張量。以圖1的AI網路100為例,因為最後一個運算子(加法運算子130)的輸出張量(即,張量TS4)的大小是[1,3,224,224],所以H可以是3或224。切分張量的細節將於下方配合圖3做說明。
步驟S220:將運算子切分為H個子運算子。本步驟將連同步驟S210於下方配合圖3做說明。
步驟S230:確定多個子運算子之間的依賴關係。此步驟將於下方配合圖5做說明。
步驟S240:根據子運算子之間的依賴關係排序子運算子,以得到操作順序。此步驟將於下方配合圖7做說明。
步驟S250:根據該操作順序決定執行人工智慧模型之電子裝置(更明確地說,該電子裝置之處理電路)何時從記憶體中刪除一目標資料,該目標資料是其中一個子運算子的輸出資料(也就是AI網路100的中間資料)。此步驟將於下方配合圖10、圖11、圖12A及圖12B做說明。
請參閱圖3,圖3是圖1之張量及運算子經切分後的結果。在圖3的實施例中,切分張量之操作(即,步驟S210)所根據的維度是張量TS4的第二個維度(即,H=3)。因此,減法運算子110被切分成減法子運算子110_1(「SUB1」)、減法子運算子110_2(「SUB2」)及減法子運算子110_3(「SUB3」);卷積運算子120被切分成卷積子運算子120_1(「CONV1」)、卷積子運算子120_2(「CONV2」)及卷積子運算子120_3(「CONV3」);加法運算子130被切分成加法子運算子130_1(「ADD1」)、加法子運算子130_2(「ADD2」)及加法子運算子130_3(「ADD3」)。張量TS1被切分成子張量TS1_i1、子張量TS1_i2及子張量TS1_i3(分別為減法子運算子110_1、減法子運算子110_2及減法子運算子110_3的輸入子張量,大小皆為[1,1,224,224],且對應到張量TS1的同一維度(例如,第二個維度))。張量TS4被切分成子張量TS3_o1、子張量TS3_o2及子張量TS3_o3(分別為加法子運算子130_1、加法子運算子130_2及加法子運算子130_3的輸出子張量,大小皆為[1,1,224,224],且對應到張量TS4的同一維度)。張量TS3被切分成子張量TS3_i1、子張量TS3_i2、子張量TS3_i3(分別為加法子運算子130_1、加法子運算子130_2及加法子運算子130_3的輸入子張量,大小皆為[1,1,224,224],且對應到張量TS3的同一維度)。卷積子運算子120_1、卷積子運算子120_2及卷積子運算子120_3的個別的輸出子張量(即,子張量TS2_o1、子張量TS2_o2及子張量TS2_o3)分別等於子張量TS3_i1、子張量TS3_i2及子張量TS3_i3。
需注意的是,因為可視域放大(Visual Field Enlargement)的問題,減法子運算子110_1(減法子運算子110_2或減法子運算子110_3)所輸出的子張量TS1_o1(子張量TS1_o2或子張量TS1_o3)不等於卷積子運算子120_1(卷積子運算子120_2或卷積子運算子120_3)的輸入子張量TS2_i1(子張量TS2_i2或子張量TS2_i3);更明確地說,子張量TS1_o1、TS1_o2、TS1_o3的大小皆為[1,1,224,224],但子張量TS2_i1與子張量TS2_i3的大小皆為[1,2,224,224],而子張量TS2_i2的大小為[1,3,224,224]。
由圖3可知,由於子張量TS1_o1、子張量TS1_o2與子張量TS1_o3分別對應到子張量TS1_i1、子張量TS1_i2與子張量TS1_i3,且子張量TS1_i1、子張量TS1_i2與子張量TS1_i3對應到張量TS1的同一維度(例如,第二個維度),所以子張量TS1_o1、子張量TS1_o2與子張量TS1_o3也對應到張量TS1的同一維度。
圖2的流程可以有效地管理目標資料在電子裝置的記憶體中的存續時間,有助於減少記憶體的使用量及/或降低對記憶體的頻寬需求。細節將於下方配合圖9、圖10、圖11、圖12A及圖12B做說明。
基於同一張量所切分出來的子張量之間的重疊(overlapping)關係(請參閱圖3),可以得到如圖4所示的子運算子之間的連線的拓樸圖。具體地,基於同一運算子切分出來的各個子運算子的輸入子張量與其所依賴的來源運算子的各個子運算子的輸出子張量之間的重疊關係得到該拓樸圖。如圖所示,卷積子運算子120_1的輸入子張量TS2_i1包含子張量TS1_o1與子張量TS1_o2;也就是說,卷積子運算子120_1需要等減法子運算子110_1及減法子運算子110_2皆結束後才能開始。同理,卷積子運算子120_2需要等減法子運算子110_1、減法子運算子110_2及減法子運算子110_3皆結束後才能開始;卷積子運算子120_3需要等減法子運算子110_2及減法子運算子110_3皆結束後才能開始。加法子運算子130_1、加法子運算子130_2及加法子運算子130_3分別需要等卷積子運算子120_1、卷積子運算子120_2及卷積子運算子120_3結束後才能開始。
請參閱圖5,圖5是圖2之步驟S230之一實施例的詳細流程,包含以下步驟。以下配合圖4說明圖5的細節。
步驟S510:決定目標子運算子。例如,選取卷積子運算子120_1作為目標子運算子。
步驟S520:決定該目標子運算子之來源子運算子。承上例,因為卷積子運算子120_1的輸入子張量TS2_i1的來源包含子張量TS1_o1及子張量TS1_o2,所以卷積子運算子120_1的來源子運算子是減法子運算子110_1及減法子運算子110_2(即,減法子運算子110_1的輸出子張量TS1_o1與減法子運算子110_2的輸出子張量TS1_o2是卷積子運算子120_1的輸入子張量)。同理,卷積子運算子120_2的來源子運算子是減法子運算子110_1、減法子運算子110_2及減法子運算子110_3,卷積子運算子120_3的來源子運算子是減法子運算子110_2及減法子運算子110_3;加法子運算子130_1的來源子運算子是卷積子運算子120_1。
步驟S530:決定該目標子運算子依賴於該來源子運算子,也就是說,來源子運算子是該目標子運算子的依賴子運算子。舉例來說,減法子運算子110_1、減法子運算子110_2及減法子運算子110_3是卷積子運算子120_2的依賴子運算子。
輪流以圖4的每個子運算子作為目標子運算子並且重複圖5的流程即可確定多個子運算子之間的依賴關係,如圖6所示。卷積子運算子120_1依賴於減法子運算子110_1及減法子運算子110_2。卷積子運算子120_2依賴於減法子運算子110_1、減法子運算子110_2及減法子運算子110_3。卷積子運算子120_3依賴於減法子運算子110_2及減法子運算子110_3。加法子運算子130_1、加法子運算子130_2及加法子運算子130_3分別依賴於卷積子運算子120_1、卷積子運算子120_2及卷積子運算子120_3。
請參閱圖7,圖7是圖2之步驟S240之一實施例的詳細流程,包含以下步驟。圖7的流程是基於深度優先搜尋演算法(Depth first search algorithm)。
步驟S710:尋找入度(indegree)為0的子運算子,並標記該入度為0的子運算子為目標子運算子且已訪問。入度為0的子運算子是沒有被依賴的子運算子。以圖6為例,加法子運算子130_1、加法子運算子130_2及加法子運算子130_3是入度為0的子運算子,也就是最上層的子運算子。
步驟S720:判斷是否有找到入度為0的子運算子。如果是,則執行步驟S730;如果否,則執行步驟S795。以下以加法子運算子130_1為例做說明。
步驟S730:尋找目標子運算子的未訪問過的依賴子運算子。如圖6所示,因為卷積子運算子120_1是加法子運算子130_1的依賴子運算子(即,加法子運算子130_1依賴於卷積子運算子120_1),所以步驟S730找到卷積子運算子120_1。
步驟S740:判斷是否找到依賴子運算子。如果是,則執行步驟S750;如果否,則執行步驟S760。
步驟S750:標記該依賴子運算子為目標子運算子且已訪問,然後執行步驟S730。承上例,在步驟S750中,卷積子運算子120_1被標記為目標子運算子且已訪問,然後於再次執行步驟S730時找到卷積子運算子120_1的依賴子運算子(假設找到減法子運算子110_1)。接者再次執行步驟S730及步驟S740;此時因為減法子運算子110_1不依賴於任何子運算子(即沒有依賴子運算子,步驟S740為否),所以流程前往步驟S760。
步驟S760:將目標子運算子加入隊列800。承上例,此時將減法子運算子110_1加入隊列800。請參考圖8A及圖8B,圖8A及圖8B顯示隊列800內容的變化(圖8B接續圖8A)。如圖8A的第一列所示,此時隊列800僅包含減法子運算子110_1(「SUB1」)。
步驟S770:判斷目標子運算子是否為最上層的子運算子(即,入度為0的子運算子)。如果是,則執行步驟S710;如果否,則執行步驟S780。承上例,因為減法子運算子110_1不是最上層的子運算子,所以步驟S770的判斷結果為否。
步驟S780:決定依賴於該目標子運算子之一上層子運算子(即,退回上一層子運算子),並將該上層子運算子標記為目標子運算子。承上例,此時流程會退回到卷積子運算子120_1。
步驟S790:判斷是否有未標記過的依賴子運算子。承上例,此時因為目標子運算子(卷積子運算子120_1)的依賴子運算子(減法子運算子110_1與減法子運算子110_2)中還有未被標記過的子運算子(即,減法子運算子110_2),所以步驟S790的判斷結果為是;接著,流程執行以下的步驟:步驟S730(找到減法子運算子110_2)→步驟S740(判斷結果為是)→步驟S750(將減法子運算子110_2標記為已訪問)→步驟S730(找不到減法子運算子110_2的依賴子運算子)→步驟S740(判斷結果為否)→步驟S760(將減法子運算子110_2加入隊列800後(如圖8A的第二列所示))→步驟S770(判斷結果為否)→步驟S780(將卷積子運算子120_1標記為目標子運算子)→步驟S790。此時因為目標子運算子(即,卷積子運算子120_1)的所有依賴子運算子(即,減法子運算子110_1與減法子運算子110_2)都已經被訪問過,所以步驟S790的判斷結果為否,而因此卷積子運算子120_1在接下來的步驟S760中被加入隊列800(如圖8A的第三列所示)。繼續執行步驟S770、步驟S780(將加法子運算子130_1標記為目標子運算子)、步驟S790及步驟S760(加法子運算子130_1被加入隊列800)後,步驟S770的判斷結果為是(因為加法子運算子130_1是最上層的子運算子),流程回到步驟S710以選取下一個入度為0的子運算子(例如加法子運算子130_2)。
上述的步驟S710~步驟S790將被重複執行(圖6的所有子運算子被加入隊列800的過程如圖8A及圖8B所示,不再贅述),直到所有的入度為0的子運算子都被訪問過(即,步驟S720的結果為否,流程前往步驟S795)。
步驟S795:依序取出隊列800中的所有子運算子。以圖8B為例,子運算子被取出隊列800的順序(也就是子運算子的操作順序)是:SUB1→SUB2→CONV1→…→CONV3→ADD3(即,與子運算子被加入隊列的順序相反)。
圖9是本發明電子裝置之一實施例的功能方塊圖。電子裝置900包含晶片901及外部記憶體902(例如,動態隨機存取記憶體(Dynamic Random Access Memory, DRAM))。晶片901與外部記憶體902互相耦接或電連接。晶片901包含處理電路910及處理器920。處理電路910與處理器920互相耦接或電連接。
處理器920控制處理電路910來共同實現晶片901的功能。處理器920可以是具有程式執行能力的電路或電子元件,例如中央處理器、微處理器、微處理單元、數位訊號處理器、特殊應用積體電路(Application Specific Integrated Circuit, ASIC),或其等效電路。
處理電路910可以是一個智能處理單元(intelligence processing unit, IPU)或神經網路處理單元(neural-network processing unit, NPU)。處理電路910包含運算電路912(例如包含但不限於卷積引擎、向量(vector)引擎)、暫存電路914(例如包含但不限於多個暫存器)、記憶體管理電路916(例如,直接記憶體存取(Direct Memory Access, DMA))及記憶體918(例如,靜態隨機存取記憶體(Static Random Access Memory, SRAM))。暫存電路914用來儲存運算電路912執行卷積運算或向量運算時所需的資料。記憶體918可以儲存圖3之各個子運算子的輸出子張量。
外部記憶體902儲存輸入資料Din、核心參數Kp及輸出資料Dout。記憶體管理電路916用來從外部記憶體902讀取輸入資料Din及核心參數Kp並且將其存入記憶體918、從記憶體918讀取輸入資料Din的至少一部分及核心參數Kp的至少一部分並且將其存入暫存電路914,以及將運算電路912所產生的輸出資料Dout儲存至外部記憶體902。
以下配合圖9、圖10、圖11、圖12A及圖12B說明圖2之步驟S250的細節。圖10顯示圖3的部分的子運算子的輸出子張量的生命週期(life span)列表。橫軸對應到前述的子運算子的操作順序(不必然對應到實際的時間長度);更明確地說,減法子運算子110_1的輸出子張量TS1_o1在操作順序為0的時間點產生,並且在操作順序為5的時間點結束(即,不會再被其他子運算子使用)。請注意,子張量TS3_o1、子張量TS3_o2及子張量TS3_o3分別於操作順序為3、6及8的時間點開始產生;然而,因為子張量TS3_o1、子張量TS3_o2及子張量TS3_o3不會被提前從記憶體918中刪除(因為各為輸出資料Dout的一部分),所以圖10的生命週期列表未繪示該三個子張量。
圖2之步驟S250的細節包含根據圖10之生命週期列表分配記憶體918,分配記憶體918的流程如圖11所示。圖12A及圖12B為本發明的活躍列表之一實施例的示意圖。以下的說明請同時參考圖10、圖11、圖12A及圖12B。活躍列表用來顯示子張量於記憶體918中的活躍情形(更明確地說,顯示子張量被存入記憶體918以及被從記憶體918刪除的時間點)。圖11包含以下步驟。
步驟S1110:建立生命週期列表。生命週期列表的一個例子如圖10所示。
步驟S1120:搜尋生命週期列表,以找出當前生命週期活躍的子張量。例如,子張量TS1_o1在操作順序為0的時間點開始變得活躍,而子張量TS1_o1的活躍期間為操作順序為0的時間點至操作順序為5的時間點。
步驟S1130:將活躍的子張量加入活躍列表。如圖12A所示,子張量TS1_o1在生命週期為0時被加入活躍列表。
步驟S1140:對活躍的子張量分配記憶體,即,在記憶體918中安排相對應的儲存空間。承上例,如圖12A所示,部分的記憶體918在生命週期為0時分配給子張量TS1_o1。
步驟S1150:刪除活躍列表中不再活躍的子張量。舉例來說,因為在圖10中子張量TS2_o1在操作順序為3的時間點之後便不再活躍,所以在圖12A中子張量TS2_o1在生命週期為3時被刪除。
步驟S1160:釋放對應於不再活躍的子張量的記憶體。因應前一步的從活躍列表中刪除子張量,此步驟釋放記憶體918中相對應的儲存空間,如此一來可以更及時且彈性地使用記憶體918。
步驟S1170:生命週期加1。
若當前生命週期無不再活躍的子張量,則跳過步驟S1150和S1160直接執行步驟S1170。
步驟S1180:判斷生命週期是否結束(即,判斷圖10的操作順序是否結束)。如果是,則結束圖11的流程;如果否,則執行步驟S1120以繼續找出活躍的子張量。
如上所述,根據圖10的生命週期列表及圖11的流程可以得到圖12A及圖12B的活躍列表。圖12A及圖12B的生命週期對應到圖10的操作順序。舉例來說,在圖10中,子張量TS1_o1在操作順序為0的時間點產生並且在操作順序為5的時間點結束;因此,在圖12A中子張量TS1_o1的生命週期是0~4。類似地,在圖10中子張量TS2_o2存在於操作順序為5的時間點及操作順序為6的時間點之間;因此,在圖12B中,子張量TS2_o2只存在於生命週期5。如此一來,晶片901的開發者或設計者便可根據圖12A及圖12B的活躍列表來設計或管理記憶體918;因此,可以在不增加記憶體918的前提下(為了節省成本)降低對外部記憶體902的頻寬需求(可以提升外部記憶體902的整體效能),或是在不增加外部記憶體902的記憶體頻寬的前提下進一步節省記憶體918。
作為比較,若沒有對圖1的運算子及張量進行切分,則晶片開發者必須預先分配記憶體918的其中一個儲存區塊給張量TS2(總資料量等效於子張量TS1_o1的資料量、子張量TS1_o2的資料量與子張量TS1_o3的資料量的總和),而且該儲存區塊直到卷積運算子120結束才能被釋放;另外,若對運算子切分後的各子運算未進行操作順序排序,則需對同一子張量如子張量TS1_i1重複運算多次,使整個AI模型的數據量增大,導致成本上升(因為對記憶體918的需求增加)或是效能下降(因為對外部記憶體902的頻寬需求增加)。在實際操作時,由於運算子的數量以及張量的尺寸都非常龐大,所以本發明所能達成的功效相當顯著。
本發明可以擴展至包含更多運算子的AI模型。請參閱圖13,圖13是另一個AI模型的示意圖。圖13的左邊顯示AI模型包含N個運算子(運算子1、運算子2、……、運算子N),圖13的右邊顯示一個運算子被切分成H個子運算子。箭頭表示子運算子執行時的依賴關係。舉例來說,運算子2的第1子運算子需等到運算子1的第3子運算子執行完畢後才能執行。
圖14是另一個AI模型的示意圖。AI網路1400包含加法運算子1410及卷積運算子1420,張量的大小為[1,56,56,224]。經切分後(如圖14的下半部所示),加法運算子1410及卷積運算子1420各被切分成56個子運算子(「ADD1」~「ADD56」及「CONV1」~「CONV56」)。每個加法子運算子(「ADD1」~「ADD56」)所輸出的子張量的大小為[1,1,56,224]。然而,並非所有卷積子運算子(「CONV1」~「CONV56」)的輸入子張量的大小都相同。更明確地說,第一卷積子運算子(「CONV1」)的輸入子張量的大小為[1,2,56,224],而第二卷積子運算子(「CONV2」)的輸入子張量的大小為[1,3,56,224](即,前述之可視域放大的問題)。
圖15A及圖15B是本發明人工智慧模型的執行方法之一實施例的流程圖。圖15A及圖15B包含以下步驟。
步驟S1505:記憶體管理電路916從外部記憶體902讀取一個張量(即,輸入資料Din)及複數個核心參數Kp,並將該張量及核心參數Kp儲存至記憶體918。
步驟S1510:處理電路910(更明確地說,運算電路912)對該張量的一第一子張量進行一第一種類的運算,以產生一第一中間資料,並且記憶體管理電路916將第一中間資料存入記憶體918。以圖4為例,第一子張量可以是減法子運算子110_1的輸入子張量(即,子張量TS1_i1),第一種類的運算可以是減法運算(向量運算的一種),而第一中間資料可以是減法子運算子110_1的輸出子張量(即,子張量TS1_o1)。以圖14為例,第一子張量可以是加法子運算子(例如「ADD1」)的輸入子張量,第一種類的運算可以是加法運算(向量運算的一種),而第一中間資料可以是加法子運算子(例如「ADD1」)的輸出子張量。
步驟S1520:處理電路910(更明確地說,運算電路912)對該張量的一第二子張量進行該第一種類的運算,以產生一第二中間資料,並且記憶體管理電路916將第二中間資料存入記憶體918。以圖4為例,第二子張量可以是減法子運算子110_2的輸入子張量(即,子張量TS1_i2),第一種類的運算可以是減法運算,而第二中間資料可以是減法子運算子110_2的輸出子張量(即,子張量TS1_o2)。以圖14為例,第二子張量可以是加法子運算子(例如「ADD2」)的輸入子張量,第一種類的運算可以是加法運算,而第二中間資料可以是加法子運算子(例如「ADD2」)的輸出子張量。
步驟S1530:處理電路910(更明確地說,運算電路912)對該第一中間資料及該第二中間資料進行一第二種類的運算,以產生一第三中間資料,並且記憶體管理電路916將第三中間資料存入記憶體918。以圖4及圖14為例,第二種類的運算可以是卷積運算(例如,卷積子運算子120_1或「CONV1」),而第三中間資料可以是該卷積運算的結果(例如,圖4之子張量TS2_o1)。
步驟S1540:記憶體管理電路916將第三中間資料從記憶體918中刪除。如圖10所示,因為操作順序為3的時間點之後的操作不會再使用子張量TS2_o1(即,子張量TS2_o1於圖12A的生命週期3開始變得不再活躍),所以可以將子張量TS2_o1從記憶體918中刪除,以釋放部分的記憶體918。
步驟S1550:處理電路910(更明確地說,運算電路912)對該張量的一第三子張量進行該第一種類的運算,以產生一第四中間資料,並且記憶體管理電路916將第四中間資料存入記憶體918。以圖4為例,第三子張量可以是減法子運算子110_3的輸入子張量(即,子張量TS1_i3),第一種類的運算可以是減法運算,而第四中間資料可以是減法子運算子110_3的輸出子張量(即,子張量TS1_o3)。以圖14為例,第三子張量可以是加法子運算子(例如「ADD3」)的輸入子張量,第一種類的運算可以是加法運算,而第四中間資料可以是加法子運算子(例如「ADD3」)的輸出子張量。
步驟S1560:處理電路910(更明確地說,運算電路912)對該第一中間資料、該第二中間資料及該第四中間資料進行該第二種類的運算,以產生一第五中間資料,並且記憶體管理電路916將第五中間資料存入記憶體918。以圖4及圖14為例,第二種類的運算可以是卷積運算(例如,卷積子運算子120_2或「CONV2」),而第五中間資料可以是該卷積運算的結果(例如,圖4之子張量TS2_o2)。
步驟S1570:記憶體管理電路916將第一中間資料從記憶體918中刪除。如圖10所示,因為操作順序為5的時間點之後的操作不會再使用子張量TS1_o1(即,子張量TS1_o1於圖12B的生命週期5開始變得不再活躍),所以可以將子張量TS1_o1從記憶體918中刪除,以釋放部分的記憶體918。
步驟S1580:記憶體管理電路916將第五中間資料從記憶體918中刪除。如圖10所示,因為操作順序為6的時間點之後的操作不會再使用子張量TS2_o2(即,子張量TS2_o2於圖12B的生命週期6開始變得不再活躍),所以可以將子張量TS2_o2從記憶體918中刪除,以釋放部分的記憶體918。
如圖15A及圖15B的討論所示,晶片901的開發者可以預先根據記憶體918的使用狀態來安排處理電路910(更明確地說,記憶體管理電路916)所執行的指令(在一些實施例中由處理器920提供給處理電路910),以達到充分利用記憶體918的目的。
請參閱圖16,圖16是本發明暫存電路914及記憶體918的儲存內容之一實施例的示意圖。在圖16的例子中,儲存在記憶體918的核心參數Kp包含減法核心參數Kp_s(向量核心參數的一種)、卷積核心參數Kp_c及加法核心參數Kp_a(向量核心參數的一種)。
減法核心參數Kp_s包含子參數Kp_s1、子參數Kp_s2及子參數Kp_s3。減法核心參數Kp_s是減法運算子110對張量TS1進行減法運算時所需的參數,而子參數Kp_s1、子參數Kp_s2及子參數Kp_s3可以分別對應到圖4的減法子運算子110_1、減法子運算子110_2及減法子運算子110_3。也就是說,運算電路912在執行減法子運算子110_1(110_2或110_3)時參考子參數Kp_s1(Kp_s2或Kp_s3)來對子張量TS1_i1(TS1_i2或TS1_i3)進行運算。在一些實施例中,子參數Kp_s1不等於子參數Kp_s2及子參數Kp_s3,且子參數Kp_s2不等於子參數Kp_s3。
加法核心參數Kp_a包含子參數Kp_a1、子參數Kp_a2及子參數Kp_a3。加法核心參數Kp_a是加法運算子130對張量TS3進行加法運算時所需的參數,而子參數Kp_a1、子參數Kp_a2及子參數Kp_a3可以分別對應到圖4的加法子運算子130_1、加法子運算子130_2及加法子運算子130_3。也就是說,運算電路912在執行加法子運算子130_1(130_2或130_3)時參考子參數Kp_a1(Kp_a2或Kp_a3)來對子張量TS3_i1(TS3_i2或TS3_i3)進行運算。在一些實施例中,子參數Kp_a1不等於子參數Kp_a2及子參數Kp_a3,且子參數Kp_a2不等於子參數Kp_a3。
卷積核心參數Kp_c包含子參數Kp_c1、子參數Kp_c2及子參數Kp_c3。不同於減法運算及加法運算,雖然運算子及張量皆經過切分,但是卷積子運算子120_1、卷積子運算子120_2及卷積子運算子120_3進行卷積運算時仍需要參考完整的卷積核心參數Kp_c。
請參閱圖17,圖17是圖15A之步驟S1510或步驟S1520的細部流程,包含以下步驟。以下的說明請同時參閱圖16。
步驟S1710:記憶體管理電路916從記憶體918讀取該向量核心參數的一目標部分,並且將該目標部分儲存至暫存電路914。更明確地說,對步驟S1510而言,目標部分可以是子參數Kp_s1。對步驟S1520而言,目標部分可以是子參數Kp_s2。如圖16所示,暫存電路914儲存子參數Kp_s1及/或子參數Kp_s2及其他資料(例如待運算的子張量)。由於步驟S1510及步驟S1520的第一種類的運算(例如,向量運算)只需用到減法核心參數Kp_s的一部分(即,目標部分),所以此時暫存電路914可以不用儲存完整的減法核心參數Kp_s以節省儲存空間。在一些實施例中,記憶體管理電路916於步驟S1510(S1520)之前將子參數Kp_s1(Kp_s2)存入暫存電路914,並且於步驟S1510(S1520)完成後將子參數Kp_s1(Kp_s2)從暫存電路914中刪除,以節省儲存空間。
步驟S1720:運算電路912參考該向量核心參數的該目標部分對目標子張量進行目標向量運算,以產生目標中間資料。更明確地說,對步驟S1510而言,目標子張量可以是子張量TS1_i1,目標向量運算可以是減法子運算子110_1,而目標中間資料可以是子張量TS1_o1。對步驟S1520而言,目標子張量可以是子張量TS1_i2,目標向量運算可以是減法子運算子110_2,而目標中間資料可以是子張量TS1_o2。對圖14而言,目標部分可以是子參數Kp_a1,目標子張量可以是一加法子運算子(例如「ADD1」)的輸入子張量,目標向量運算可以是該加法子運算子,而第一中間資料可以是該加法子運算子的輸出子張量。
如上所述,因為原本的張量被切分為多個子張量,所以對子張量進行向量運算只需參考部分的核心參數即可。
本技術領域具有通常知識者可以從圖17的說明了解圖15B之步驟S1550的細節,故不再贅述。舉例來說,對步驟S1550而言,目標部分可以是子參數Kp_s3,目標子張量可以是子張量TS1_i3,目標向量運算可以是減法子運算子110_3,而目標中間資料可以是子張量TS1_o3。
請參閱圖18,圖18是圖15A之步驟S1530的細部流程,包含以下步驟。以下的說明請同時參閱圖19。
步驟S1810:記憶體管理電路916從記憶體918讀取卷積核心參數Kp_c,並且將卷積核心參數Kp_c儲存至暫存電路914。如圖19所示,暫存電路914於卷積運算開始前儲存卷積核心參數Kp_c及其他資料(例如待運算的子張量)。由於步驟S1530的第二種類的運算(例如,卷積運算)需用到完整的卷積核心參數Kp_c,所以此時暫存電路914需儲存完整卷積核心參數Kp_c。
步驟S1820:運算電路912參考卷積核心參數Kp_c對第一中間資料及第二中間資料進行該第二種類的運算,以產生第三中間資料。參考卷積核心參數Kp_c來對張量進行卷積運算為本技術領域具有通常知識者所熟知,故不再贅述。在一些實施例中,記憶體管理電路916於步驟S1820結束後從暫存電路914刪除卷積核心參數Kp_c。
請參閱圖20,圖20是圖15B之步驟S1560的細部流程,包含以下步驟。以下的說明請同時參閱圖19。
步驟S2010:步驟S2010與步驟S1810相似,故不再贅述。請注意,若記憶體管理電路916於步驟S1530結束後沒有將卷積核心參數Kp_c從暫存電路914刪除,則可以略過步驟S2010。
步驟S2020:運算電路912參考卷積核心參數Kp_c對第一中間資料、第二中間資料及第四中間資料進行該第二種類的運算,以產生第五中間資料。步驟S2020與步驟S1820相似,故不再贅述。
請參閱圖21,圖21是本發明記憶體管理電路916之一實施例的功能方塊圖。記憶體管理電路916包含至少2個通道(通道916a及通道916b),每個通道可以獨立操作,而且多個通道可以同時操作。基於此特性,本發明進一步將子運算子及子張量切分為數個小塊,使得處理電路910可以採用多級流水線(multistage pipeline)的方式對AI模型的運算,以提升晶片901的效能。
請參閱圖22,圖22是本發明多級流水線的示意圖。圖22以減法子運算子110_1、減法子運算子110_2及卷積子運算子120_1為例做說明。在圖22的例子中,減法子運算子110_1進一步被切分為運算塊110_1a(「SUB1a」)及運算塊110_1b(「SUB1b」),且子張量TS1_i1進一步被切分為資料塊TS1_i1a及資料塊TS1_i1b;減法子運算子110_2進一步被切分為運算塊110_2a(「SUB2a」)及運算塊110_2b(「SUB2b」),且子張量TS1_i2進一步被切分為資料塊TS1_i2a及資料塊TS1_i2b;卷積子運算子120_1進一步被切分為運算塊120_1a(「CONV1a」)及運算塊120_1b(「CONV1b」),且子張量TS2_i1進一步被切分為資料塊TS2_i1a及資料塊TS2_i1b。如此一來,當通道916a進行與運算塊110_1a相關的操作時(時間點T0與時間點T3之間),通道916b可以實質上同時進行與運算塊110_1b相關的操作(時間點T1與時間點T4之間)。相較於單級流水線(single-stage pipeline)(即,沒有同時使用多個通道來對AI模型進行運算),同時使用2個通道約可節省一半的時間。類似地,同時使用N個通道大約只需單級流水線的處理時間的1/N。
請參閱圖23,圖23是本發明多級流水線操作之一實施例的流程圖,包含以下步驟。
步驟S2310:記憶體管理電路916使用第一通道(例如,通道916a)從記憶體918讀取第一子張量(例如,子張量TS1_i1)的第一資料塊(例如,資料塊TS1_i1a),並將第一資料塊存入暫存電路914。舉例來說,步驟S2310可以對應到圖22的時間點T0與時間點T1之間(即,「SUB1a載入(load)」操作)。
步驟S2320:運算電路912對第一資料塊(例如,資料塊TS1_i1a)進行第一種類的運算(例如,減法運算)以產生該第一中間資料的一第一部分(例如,子張量TS1_o1的一部分)。舉例來說,步驟S2320可以對應到圖22的時間點T1與時間點T2之間(即,「SUB1a計算(compute)」操作)。
步驟S2330:記憶體管理電路916使用第二通道(例如,通道916b)從記憶體918讀取第一子張量的第二資料塊(例如,資料塊TS1_i1b),並將第二資料塊存入暫存電路914。舉例來說,步驟S2330可以對應到圖22的時間點T1與時間點T2之間(即,「SUB1b載入」操作)。換言之,步驟S2320與步驟S2330至少部分同時執行。
步驟S2340:記憶體管理電路916使用第一通道(例如,通道916a)將該第一中間資料的該第一部分(例如,子張量TS1_o1的一部分)儲存至記憶體918。舉例來說,步驟S2340可以對應到圖22的時間點T2與時間點T3之間(即,「SUB1a儲存(store)」操作)。
步驟S2350:運算電路912對該第二資料塊(例如,資料塊TS1_i1b)進行該第一種類的運算(例如,減法運算)以產生該第一中間資料的一第二部分(例如,子張量TS1_o1的一部分)。舉例來說,步驟S2350可以對應到圖22的時間點T2與時間點T3之間(即,「SUB1b計算」操作)。換言之,步驟S2340與步驟S2350至少部分同時執行。
步驟S2360:記憶體管理電路916使用該第二通道(例如,通道916b)將該第一中間資料的該第二部分(例如,子張量TS1_o1的一部分)儲存至記憶體918。舉例來說,步驟S2360可以對應到圖22的時間點T3與時間點T4之間(即,「SUB1b儲存」操作)。
本技術領域具有通常知識者可以根據圖23的說明了解圖22的時間點T4以後的其他操作,故不再贅述。
雖然本發明之實施例如上所述,然而該些實施例並非用來限定本發明,本技術領域具有通常知識者可根據本發明之明示或隱含之內容對本發明之技術特徵施以變化,凡此種種變化均可能屬於本發明所尋求之專利保護範疇,換言之,本發明之專利保護範圍須視本說明書之申請專利範圍所界定者為準。
100,1400:AI網路 Din:輸入資料 Dout:輸出資料 110,SUB:減法運算子 120,1420,CONV:卷積運算子 130,1410,ADD:加法運算子 TS1,TS2,TS3,TS4:張量 110_1,110_2,110_3,SUB1,SUB2,SUB3:減法子運算子 120_1,120_2,120_3,CONV1,CONV2,CONV3,CONV56:卷積子運算子 130_1,130_2,130_3,ADD1,ADD2,ADD3,ADD56:加法子運算子 TS1_i1,TS1_i2,TS1_i3,TS3_o1,TS3_o2,TS3_o3,TS3_i1,TS3_i2,TS3_i3,TS2_o1,TS2_o2,TS2_o3,TS1_o1,TS1_o2,TS1_o3,TS2_i1,TS2_i2,TS2_i3:子張量 800:隊列 900:電子裝置 901:晶片 902:外部記憶體 910:處理電路 920:處理器 912:運算電路 914:暫存電路 916:記憶體管理電路 918:記憶體 Kp:核心參數 Kp_s:減法核心參數 Kp_c:卷積核心參數 Kp_a:加法核心參數 Kp_s1,Kp_s2,Kp_s3,Kp_a1,Kp_a2,Kp_a3,Kp_c1,Kp_c2,Kp_c3:子參數 916a,916b:通道 110_1a,110_1b,110_2a,110_2b,120_1a,120_1b,SUB1a,SUB1b,SUB2a,SUB2b,CONV1a,CONV1b:運算塊 TS1_i1a,TS1_i1b,TS1_i2a,TS1_i2b,TS2_i1a,TS2_i1b:資料塊 T0,T1,T2,T3,T4:時間點 S210,S220,S230,S240,S250,S510,S520,S530,S710,S720,S730,S740,S750,S760,S770,S780,S790,S795,S1110,S1120,S1130,S1140,S1150,S1160,S1170,S1180,S1505,S1510,S1520,S1530,S1540,S1550,S1560,S1570,S1580,S1710,S1720,S1810,S1820,S2010,S2020,S2310,S2320,S2330,S2340,S2350,S2360:步驟
圖1顯示AI網路的一個例子; 圖2為本發明人工智慧模型的運算排程方法之一實施例的流程圖; 圖3是圖1之張量及運算子經切分後的結果; 圖4顯示子運算子之間的連線的拓樸圖(topological graph); 圖5是圖2之步驟S230之一實施例的詳細流程; 圖6顯示多個子運算子之間的依賴關係; 圖7是圖2之步驟S240之一實施例的詳細流程; 圖8A及圖8B顯示本發明的隊列之一實施例的示意圖; 圖9是本發明電子裝置之一實施例的功能方塊圖; 圖10顯示本發明的生命週期列表之一實施例的示意圖; 圖11顯示分配記憶體的流程圖; 圖12A及圖12B為本發明的活躍列表之一實施例的示意圖; 圖13是另一個AI模型的示意圖; 圖14是另一個AI模型的示意圖; 圖15A及圖15B是本發明人工智慧模型的執行方法之一實施例的流程圖; 圖16是本發明暫存電路及記憶體的儲存內容之一實施例的示意圖; 圖17是圖15A之步驟S1510或步驟S1520的細部流程; 圖18是圖15A之步驟S1530的細部流程; 圖19是本發明暫存電路及記憶體的儲存內容之另一實施例的示意圖; 圖20是圖15B之步驟S1560的細部流程; 圖21是本發明記憶體管理電路之一實施例的功能方塊圖; 圖22是本發明多級流水線的示意圖;以及 圖23是本發明多級流水線操作之一實施例的流程圖。
900:電子裝置
901:晶片
902:外部記憶體
910:處理電路
912:運算電路
914:暫存電路
916:記憶體管理電路
918:記憶體
920:處理器
Kp:核心參數
Din:輸入資料
Dout:輸出資料

Claims (16)

  1. 一種人工智慧模型的處理電路,耦接一外部記憶體,包含:一記憶體;一記憶體管理電路,耦接該記憶體,用來從該外部記憶體讀取一張量,並將該張量儲存至該記憶體;以及一運算電路,耦接該記憶體管理電路,被配置以進行以下操作:對該張量的一第一子張量進行一第一種類的運算,以產生一第一中間資料;對該張量的一第二子張量進行該第一種類的運算,以產生一第二中間資料;對該第一中間資料及該第二中間資料進行一第二種類的運算,以產生一第三中間資料;對該張量的一第三子張量進行該第一種類的運算,以產生一第四中間資料;以及對該第一中間資料、該第二中間資料及該第四中間資料進行該第二種類的運算,以產生一第五中間資料;其中,該記憶體管理電路基於該第一種類的運算和該第二種類的運算之間的依賴關係所決定該第一中間資料、該第二中間資料的一操作順序將要參與該第二種類的運算的該第一中間資料及該第二中間資料存入該記憶體,並且基於該第一中間資料的該操作順序獲 知該第一中間資料於進行該第二種類的運算產生該第五中間資料產生之後不再參與運算而從該記憶體中刪除該第一中間資料。
  2. 如請求項1之處理電路,其中,該第一種類的運算係一加法運算及一減法運算的其中之一,而該第二種類的運算係一卷積運算。
  3. 如請求項1之處理電路,其中,該第一中間資料、該第二中間資料及該第四中間資料係對應到該張量的同一維度。
  4. 如請求項3之處理電路,其中,該第四中間資料係於該第三中間資料產生後才產生。
  5. 如請求項1之處理電路,更包含:一暫存電路;其中,當該運算電路進行該第一種類的運算時,該記憶體管理電路從該記憶體讀取一核心參數的至少一部分至該暫存電路,並且該運算電路係僅參考該核心參數的該至少一部分來進行該第一種類的運算;其中,該第一種類的運算係一減法運算及一加法運算的其中之一。
  6. 如請求項1之處理電路,其中,該第一中間資料、該第二中間資料及該第四中間資料的大小相同。
  7. 如請求項1之處理電路,其中,該記憶體管理電路包含一第一通道及一第二通道,該對該張量的該第一子張量進行該第一種類的運算包含以下的步驟:(A)使用該第一通道從該記憶體讀取該第一子張量之一第一資料塊; (B)對該第一資料塊進行該第一種類的運算以產生該第一中間資料的一第一部分;(C)使用該第二通道從該記憶體讀取該第一子張量之一第二資料塊;(D)使用該第一通道將該第一中間資料的該第一部分儲存至該記憶體;(E)對該第二資料塊進行該第一種類的運算以產生該第一中間資料的一第二部分;以及(F)使用該第二通道將該第一中間資料的該第二部分儲存至該記憶體;其中,該步驟(B)及該步驟(C)係至少部分同時執行,且該步驟(D)及該步驟(E)係至少部分同時執行。
  8. 一種人工智慧模型的處理電路,耦接一外部記憶體並且包含一記憶體,該處理電路執行以下操作:從該外部記憶體讀取一張量及複數個核心參數,並將該張量及該些核心參數儲存至該記憶體,其中,該張量包含一第一子張量及一第二子張量,該些核心參數包含一向量核心參數;參考該向量核心參數的一第一部分對該第一子張量進行一第一向量運算,以產生一第一中間資料;以及參考該向量核心參數的一第二部分對該第二子張量進行一第二向量運算,以產生一第二中間資料;其中,該向量核心參數的該第一部分不等於該向量核心參數的該第二部分;其中,該張量更包含一第三子張量,該些核心參數更包含用於一卷積運算之一卷積核心參數,該處理電路更執行以下操作: 參考該卷積核心參數對該第一中間資料及該第二中間資料進行該卷積運算,以產生一第三中間資料;以及於該卷積運算後,參考該向量核心參數的一第三部分對該第三子張量進行一第三向量運算,以產生一第四中間資料;其中,該卷積運算係一第一卷積運算,該處理電路更執行以下操作:參考該卷積核心參數對該第一中間資料、該第二中間資料及該第四中間資料進行一第二卷積運算,以產生一第五中間資料;其中,該第一中間資料係儲存於該記憶體,該處理電路更執行以下操作:於該第二卷積運算後,將該第一中間資料從該記憶體中刪除;其中,要參與一第二種類的運算的該第一中間資料及該第二中間資料基於一第一種類的運算和該第二種類的運算之間的依賴關係所決定該第一中間資料、該第二中間資料的一操作順序被存入該記憶體,並且該第一中間資料係於基於該第一中間資料的該操作順序獲知該第一中間資料於進行該第二種類的運算產生該第五中間資料產生之後不再參與運算而從該記憶體中刪除。
  9. 如請求項8之處理電路,其中,該第一子張量及該第二子張量係對應到該張量的同一維度。
  10. 如請求項8之處理電路,其中,該第一向量運算及該第二向量運算係一加法運算及一減法運算的其中之一。
  11. 如請求項8之處理電路,其中,該處理電路更包含一記憶體管理電路,該記憶體管理電路包含一第一通道及一第二通道,該對該第一子張量進行該第一向量運算以產生該第一中間資料包含以下的步驟:(A)使用該第一通道從該記憶體讀取該第一子張量之一第一資料塊;(B)對該第一資料塊進行一運算以產生該第一中間資料的一第一部分;(C)使用該第二通道從該記憶體讀取該第一子張量之一第二資料塊;(D)使用該第一通道將該第一中間資料的該第一部分儲存至該記憶體;(E)對該第二資料塊進行該運算以產生該第一中間資料的一第二部分;以及(F)使用該第二通道將該第一中間資料的該第二部分儲存至該記憶體;其中,該步驟(B)及該步驟(C)係至少部分同時執行,且該步驟(D)及該步驟(E)係至少部分同時執行。
  12. 一種人工智慧模型的運算排程方法,該人工智慧模型包含一第一運算子及一第二運算子,該第一運算子的輸出係該第二運算子的輸入,該運算排程方法包含:將一張量分為H個子張量,H係大於1之整數;將該第一運算子分為H個第一子運算子;將該第二運算子分為H個第二子運算子;根據該H個第二子運算子其中每一的輸入確定該H個第一子運算子及該H個第二子運算子之間的一依賴關係;根據該依賴關係排序該H個第一子運算子及該H個第二子運算子,以得到一操作順序;以及 根據該操作順序決定執行該人工智慧模型之一處理電路何時從該處理電路所包含的一記憶體中刪除一目標資料,該目標資料係該H個第一子運算子及該H個第二子運算子的其中一者的一輸出資料。
  13. 如請求項12之運算排程方法,其中,該確定該H個第一子運算子及該H個第二子運算子的該依賴關係之步驟包含:決定一目標子運算子;根據該目標子運算子的輸入決定該目標子運算子之一來源子運算子,其中,該來源子運算子的輸出係該目標子運算子的輸入;以及決定該目標子運算子依賴於該來源子運算子。
  14. 如請求項12之運算排程方法,其中,該根據該依賴關係排序該H個第一子運算子及該H個第二子運算子以得到該操作順序之步驟包含:(A)決定一目標子運算子;(B)決定該目標子運算子所依賴之一來源子運算子;(C)當該來源子運算子不依賴於任何子運算子時,將該來源子運算子加入一隊列;(D)重複該步驟(B)至該步驟(C),直到該目標子運算子所依賴之全部的來源子運算子皆已被加入該隊列;以及(E)將該目標子運算子加入該隊列。
  15. 如請求項14之運算排程方法,其中,該根據該依賴關係排序該H個第一子運算子及該H個第二子運算子以得到該操作順序之步驟更包含:(F)決定依賴於該目標子運算子之一上層子運算子; (G)以該上層子運算子作為該目標子運算子,重複該步驟(B)至該步驟(E);以及(H)重複該步驟(F)及該步驟(G),直到該目標子運算子係一最上層子運算子。
  16. 如請求項14之運算排程方法,其中,該根據該操作順序決定何時從該記憶體中刪除該目標資料之步驟包含:根據該隊列決定最後使用該目標資料之一子運算子,該子運算子係該H個第一子運算子及該H個第二子運算子的其中一者;其中,該目標資料係於該子運算子結束運算後被刪除。
TW112108662A 2023-03-09 2023-03-09 人工智慧模型的處理電路及運算排程方法 TWI869788B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
TW112108662A TWI869788B (zh) 2023-03-09 2023-03-09 人工智慧模型的處理電路及運算排程方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
TW112108662A TWI869788B (zh) 2023-03-09 2023-03-09 人工智慧模型的處理電路及運算排程方法

Publications (2)

Publication Number Publication Date
TW202437087A TW202437087A (zh) 2024-09-16
TWI869788B true TWI869788B (zh) 2025-01-11

Family

ID=93609508

Family Applications (1)

Application Number Title Priority Date Filing Date
TW112108662A TWI869788B (zh) 2023-03-09 2023-03-09 人工智慧模型的處理電路及運算排程方法

Country Status (1)

Country Link
TW (1) TWI869788B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110674936A (zh) * 2019-09-24 2020-01-10 上海寒武纪信息科技有限公司 一种神经网络处理方法、装置、计算机设备及存储介质
EP3888012A1 (en) * 2018-12-31 2021-10-06 Microsoft Technology Licensing, LLC Adjusting precision and topology parameters for neural network training based on a performance metric
US20220391665A1 (en) * 2019-09-24 2022-12-08 Anhui Cambricon Information Technology Co., Ltd. Method for splitting neural network model by using multi-core processor, and related product
TW202301109A (zh) * 2021-06-17 2023-01-01 美商萬國商業機器公司 執行組合矩陣乘法及偏差加法運算之單一函式

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3888012A1 (en) * 2018-12-31 2021-10-06 Microsoft Technology Licensing, LLC Adjusting precision and topology parameters for neural network training based on a performance metric
CN110674936A (zh) * 2019-09-24 2020-01-10 上海寒武纪信息科技有限公司 一种神经网络处理方法、装置、计算机设备及存储介质
US20220391665A1 (en) * 2019-09-24 2022-12-08 Anhui Cambricon Information Technology Co., Ltd. Method for splitting neural network model by using multi-core processor, and related product
TW202301109A (zh) * 2021-06-17 2023-01-01 美商萬國商業機器公司 執行組合矩陣乘法及偏差加法運算之單一函式

Also Published As

Publication number Publication date
TW202437087A (zh) 2024-09-16

Similar Documents

Publication Publication Date Title
US20200201763A1 (en) Memory hierarchy-aware processing
CN109992366B (zh) 任务调度方法及调度装置
US11645120B2 (en) Memory bandwidth allocation for multi-tenant FPGA cloud infrastructures
WO2020125396A1 (zh) 一种共享数据的处理方法、装置及服务器
CN105786603A (zh) 一种基于分布式的高并发业务处理系统及方法
US20080127193A1 (en) Scheduling method for executing jobs, scheduling apparatus for executing jobs, rewritable recording medium on which scheduling program for executing jobs is recorded
CN115576924B (zh) 一种数据迁移的方法
CN116881299A (zh) 一种查询任务执行方法、装置、计算机设备及存储介质
CN109788013B (zh) 分布式系统中作业资源分配方法、装置及设备
CN113296788B (zh) 指令调度方法、装置、设备及存储介质
TWI706343B (zh) 樣本回放資料存取方法、裝置及電腦設備
US20250284539A1 (en) Distributed graph data processing system, method, apparatus and device, and storage medium
TWI869788B (zh) 人工智慧模型的處理電路及運算排程方法
WO2024119988A1 (zh) 多cpu环境下的进程调度方法、装置、电子设备和介质
WO2013058396A1 (ja) タスク配置装置及びタスク配置方法
CN109343859A (zh) 一种信息处理方法、装置及存储介质
JP7367365B2 (ja) タスク実行管理装置、タスク実行管理方法、および、タスク実行管理プログラム
CN116069722A (zh) 人工智能模型的处理电路及运算排程方法
WO2025112505A1 (zh) 一种数据存储方法、装置、设备及计算机可读存储介质
JP2018132948A (ja) 読込プログラム、読込方法および情報処理装置
JP5048072B2 (ja) 情報検索システム、情報検索方法及びプログラム
CN112307272B (zh) 确定对象之间关系信息的方法、装置、计算设备及存储介质
Song et al. Compress blocks or not: Tradeoffs for energy consumption of a big data processing system
CN116226042B (zh) 一种对科学数据文件进行读写优化的中间件系统及方法
CN119847762A (zh) 一种基于数据并行的作业调度系统及方法