TWI863083B - 用於硬體神經網路引擎的設備和方法 - Google Patents
用於硬體神經網路引擎的設備和方法 Download PDFInfo
- Publication number
- TWI863083B TWI863083B TW112100587A TW112100587A TWI863083B TW I863083 B TWI863083 B TW I863083B TW 112100587 A TW112100587 A TW 112100587A TW 112100587 A TW112100587 A TW 112100587A TW I863083 B TWI863083 B TW I863083B
- Authority
- TW
- Taiwan
- Prior art keywords
- layer
- configuration
- fnn
- mac
- pooling
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/048—Activation functions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/082—Learning methods modifying the architecture, e.g. adding, deleting or silencing nodes or connections
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Health & Medical Sciences (AREA)
- General Physics & Mathematics (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Image Analysis (AREA)
- Feedback Control In General (AREA)
Abstract
一種用於硬體神經網路引擎的系統、設備和方法。本裝置包含有一控制器、一配置緩衝區和一資料緩衝區。控制器係用以調度一神經網路之計算任務,載入複數個配置到配置緩衝區,並加載輸入數據和加權偏差的參數到資料緩衝區。本裝置還包括了一MAC層。配置包含有至少一FNN配置。MAC層可以應用FNN配置,FNN配置包括一FNN操作拓樸的設定,以MAC層對至少一FNN層執行計算。可選地,神經網路可以是一CNN,配置還可以包括至少一個CNN配置用於對至少一個CNN層進行計算。
Description
本發明係關於使用專用硬體進行神經網路計算,特別是涉及使用可配置的計算層進行神經網路計算。
在與計算相關的領域中產生了巨量的數據。在機器學習技術崛起之前,這些數據很難被有效利用。然而,隨著機器學習技術的發展,數據被收集和挖掘,提高了產品性能並提升附加價值。例如,在邊緣計算中,機器學習已被用於數據聚類和圖像識別。在固態硬碟(SSD)中,機器學習已被用於冷熱判斷和NAND故障預測。。
傳統的機器學習系統是使用中央處理單元(CPU)構建的。後來,圖形處理單元(GPU)被廣泛用於構建機器學習系統。最近,出現了硬體人工智能(AI)引擎。然而,深度學習網路的操作非常依賴矩陣乘法,其中包括大量的乘積累加(MAC)運算。但是在單晶片系統(SoC)芯片上,放置大量用於執行MAC操作的硬體組件的空間是有限的。此外,目前開源的人工智能引擎還不能滿足各個領域的特定需求。因此,需要實現AI神經網路的可配置硬體。
本發明所揭露的主題涉及使用硬體計算電路為神經網路執行計算的系統、方法和設備。在一具體實施例中,設備包括有一個控制器、一個配置緩衝區、一個資料緩衝區和複數個計算層。複數個計算層包括一個MAC層,MAC層包括複數個MAC單元。控制器係用以調度一神經網路之計算任務,並且用以:將用於複數個計算層之多個配置載入到配置緩衝區中以執行該神經網路的計算,該等配置包括用於該MAC層的至少一個FNN配置以執行至少一個FNN層的計算;將神經網路的參數載入到資料緩衝區中,參數包括多個計算層的權重和偏差;以及,將一輸入資料載入到資料緩衝區。其中,MAC層係用以提供至少一個FNN層配置來為該至少一個FNN層執行計算,該至少一個FNN層配置包括用於該等MAC單元之一FNN操作拓撲的設定設定,以便為至少一個FNN層執行計算。
在部分實施例中,該神經網路為一卷積神經網路,且其配置進一步包括用於MAC層的至少一個CNN配置,以執行用於至少一個CNN層的計算。至少一個CNN配置包括一CNN操作拓撲之設定和逐週期操作之設定,以使該等MAC單元執行至少一個CNN層的計算。CNN操作拓撲之設定包括一輸入資料矩陣之列方向的操作設定、該輸入資料矩陣之行方向的操作設定、一權重矩陣之列方向的操作設定以及該權重矩陣之行方向的操作設定。
MAC單元被分為複數組,每一組包括一個或多個MAC單元,用以根據至少一CNN配置執行一輸出通道的卷積,同一組中的一個或多個MAC單元共用同一批權重但具有不同的輸入資料元素。
FNN操作拓撲的設定包括一輸入資料矩陣和一權重矩陣於列方向上的操作的設定、輸入資料矩陣和權重矩陣於行方向上的操作的設
定、以及至少一FNN層的節點根據MAC層中MAC單元的數量分批操作的設定。
計算層進一步包括一K-Means層,用以根據一K-Means配置將輸入資料聚類為多個集群。
計算層進一步包括一量化層,用以將資料值從實數轉化為量化數以及從量化數轉化為實數。
量化層係用以執行由另一計算層驅動的資料轉換;或者量化層係用以根據一量化配置執行資料轉換。
計算層進一步包括一池化層,池化層包括複數個池化單元,每個池化單元係用以比較多個輸入值,池化層被係用以根據一池化配置執行一最大池化或一最小池化,池化配置包括用於池化單元之一池化操作拓撲結構的設定和逐週期操作設定。
計算層進一步包括一查閱資料表層,用以藉由查找包圍一輸入資料值的一啟動函數曲線的一片段來生成一啟動函數之一輸出值,並根據該啟動函數值對段的上值和下值進行插值。
在另一範疇中,本發明提供一種方法包括將一計算層的配置加載到一配置緩衝區,計算層包括一MAC層(Multiply-Accumulate,MAC),並且配置包括用於MAC層之至少一FNN(Fully-connected Neural Network,FNN)配置為至少一FNN層執行計算;將一神經網路之一參數加載到一資料緩衝區,參數包括計算層的複數個權重和複數個偏差;加載輸入數據到資料緩衝區;以及啟動計算層並應用配置來執行神經網路的計算,包括:將至少一FNN配置應用於MAC層,MAC層包括複數個MAC單元,至少一FNN
配置包括用於多個MAC單元之一FNN操作拓樸的設定以執行至少一FNN層的計算。
配置包括用於MAC層的至少一CNN(Convolutional Neural Network,CNN)配置,以執行至少一CNN層的計算,並且啟動計算層和應用配置以執行神經網路的計算,神經網路進一步包括將該至少一CNN配置應用於MAC層,其中,至少一CNN配置包括用於一CNN操作拓撲的設定和逐週期操作的設定,以執行至少一CNN層的計算,CNN操作拓撲的設定包括用於一輸入資料矩陣的列方向的操作的設定,用於輸入資料矩陣的行方向的操作的設定,以及用於一權重矩陣的列方向的操作的設定和用於權重矩陣的行方向的操作的設定。
該等MAC單元被分為複數組,每一組包括一個或多個MAC單元,用以根據該至少一CNN配置執行一個輸出通道的卷積,同一組中的一個或多個MAC單元共用同一批權重但具有不同的輸入資料元素。
FNN操作拓撲的設定包括一輸入資料矩陣和一權重矩陣於列方向上的操作的設定,輸入資料矩陣和權重矩陣於行方向的操作的設定,以及至少一個FNN層的節點根據MAC層中MAC單元的數量分批操作的設定。
本方法進一步包括根據計算層中的一K-Means層的一K-Means配置將輸入資料聚類為多個集群。
本方法進一步包括使用計算層中的一量化層將資料值從實數轉化為量化數,以及從量化數轉化為實數。
量化層用以執行由另一計算層驅動的資料轉換;或者量化層
用以根據一量化配置執行資料轉換。
本方法進一步包括根據使用計算層之一池化層之一池化配置執行最大池化或最小池化,其中池化層包括複數個個池化單元,每個池化單元用以比較多個輸入值,池化配置包括用於池化單元之一池化操作拓撲結構的設定和逐週期操作設定。
本方法進一步使用計算層之一查閱資料表層查找來生成啟動函數之一輸出值,其中該查閱資料表層被設定為查找包含一輸入資料值的啟動函數曲線的一片段,並根據一啟動函數值對該段的上值和下值進行插值。
100:計算系統
102:中央處理單元
104:儲存器
106:AI引擎
108:控制器
110:K-Means層
112:MAC層
114:量化層
116:LUT層
118:池化層
120:配置緩衝區
122:資料緩衝區
200:K-Means層
202:集群分類器
204:間隔計算器
206.1~206.N:集群緩衝區
208:解多工器
210:多工器
300:K-Means配置
302:第一列
304:第一欄位
306:第二欄位
308:第三欄位
310.1、310.2:中心點列
400:MAC層
402.1、402.2:MAC單元
404.1、404.2:緩衝區
406.1、406.M:資料寄存器
500:CNN配置
502:第一列
504:第二列
506:第三列
508:第四列
510:輸入資料矩陣
512:權重矩陣
514:列
600:FNN配置
602:第一列
604:第二列
606:第三列
700:量化層
702:量化單元
704:去量化單元
800:量化配置
802~808:列
900:LUT層
902:查找單元
904:內插單元
906:啟動函數曲線
1000:LUT配置
1002~1010:列
1100:池化層
1102.1、1102.2:池化單元
1104:資料寄存器
1106:池化部分結果緩衝區
1200:池化配置
1202~1208:列
1300:神經網路
1302:輸入層
1304:卷積層
1306:池化層
1308.1、1308.2:全連接層
1310:輸出層
1400:神經網路計算的方法
1402~1408:步驟
圖1揭示了根據本發明的實施例的計算系統。
圖2揭示了根據本發明的實施例的K-Means層。
圖3揭示了根據本發明的實施例的K-Means層的K-Means配置。
圖4揭示了根據本發明的實施例的MAC層。
圖5A揭示了本發明的實施例中MAC層執行卷積操作的CNN配置。
圖5B揭示了本發明的實施例中輸入資料矩陣和CNN層的內核。
圖6揭示了本發明的實施例中,用於MAC層執行全連接層的操作的FNN配置。
圖7揭示了根據本發明的實施例的量化層。
圖8揭示了根據本發明的實施例的量化配置。
圖9A揭示了根據本發明的實施例的查閱資料表層。
圖9B揭示了根據本發明的實施例的啟動函數。
圖9C揭示了根據本發明的實施例的插值。
圖10揭示了根據本發明的實施例的查閱資料表層的LUT配置。
圖11揭示了根據本發明的實施例的池化層。
圖12揭示了根據本發明的實施例的池化層的池化配置。
圖13揭示了根據本發明的實施例的神經網路。
圖14揭示了根據本發明的實施例的執行神經網路計算過程的流程圖。
為了讓本發明的優點,精神與特徵可以更容易且明確地了解,後續將以實施例並參照所附圖式進行詳述與討論。值得注意的是,這些實施例僅為本發明代表性的實施例。但是其可以許多不同的形式來實現,並不限於本說明書所描述的實施例。相反地,提供這些實施例的目的是使本發明的公開內容更加透徹且全面。在本發明公開的各種實施例中使用的術語僅用於描述特定實施例的目的,並非在限制本發明所公開的各種實施例。如在此所使用的單數形式係也包括複數形式,除非上下文清楚地另外指示。除非另有限定,否則在本說明書中使用的所有術語(包含技術術語和科學術語)具有與本發明公開的各種實施例所屬領域普通技術人員通常理解的涵義相同的涵義。上述術語(諸如在一般使用的辭典中限定的術語)將被解釋為具有與在相同技術領域中的語境涵義相同的涵義,並且將不被解釋為具有理想化的涵義或過於正式的涵義,除非在本發明公開的各種實施例中被清楚地限定。
在本說明書的描述中,參考術語”一實施例”、”一具體實施
例”等的描述意指結合該實施例描述地具體特徵、結構、材料或者特點包含於本發明的至少一實施例中。在本說明書中,對上述術語的示意性表述不一定指的是相同的實施例。而且,描述的具體特徵、結構、材料或者特點可以在任何一個或多個實施例中以合適的方式結合。
圖1揭示了根據本發明的實施例的計算系統。計算系統100可以包括中央處理單元(CPU)102、儲存器104和人工智能(AI)引擎106。CPU 102可以生成供AI引擎106執行的計算任務。儲存器104可以是臨時儲存器(例如,動態隨機存取儲存器(DRAM)或靜態隨機存取儲存器(SRAM))以儲存用於CPU 102和AI引擎106的配置和數據。應該注意的是,在一些實施例中,計算系統100可以包括多個CPU並且CPU 102可以只是多個CPU中的一個代表。
人工智慧引擎106可以包括一控制器108,以及多個硬體元件層,包括:K-Means層110、MAC層(乘積層)112、量化層114、查閱資料表(LUT)層116、池化層118。硬體元件層也可以被稱為計算層。控制器108可用以將計算任務分配給AI引擎106的各個層。AI引擎106可以進一步包括配置緩衝區120和資料緩衝區122。配置緩衝區120可以儲存各層的配置,資料緩衝區122可以儲存計算任務的資料。
在至少一實施例中,權重、偏差和量化因數可以從預先訓練的神經網路中生成並儲存在記憶體104中。在執行機器學習任務過程中,各層的權重、偏差和量化因數可以被載入並儲存在資料緩衝區120中。在一些實施例中,控制器108可以是一電腦處理器,用以執行可執行指令,例如軟體或韌體。在不同的實施例中,控制器108可以是一微處理器、一微控制器、
一現場可程式設計閘陣列(FPGA)、一特定應用積體電路(ASIC)或一圖形處理單元(GPU)。
AI引擎106可以使用K-Means層110、MAC層112、量化層114、查閱資料表(LUT)層116和池化層118來執行基於機器學習模型的計算任務。這些層可以由硬體電路實現,並且可以為K-Means層110、MAC層112、量化層114、查閱資料表(LUT)層116和池化層118中的每一生成硬體配置(也可以被稱為排程器)。配置可以是一控制序列,包括一個或多個欄位來描述計算層的行為,每個計算層可以有自己的排程器。在一個配置中,一些列可以指定重複操作的設定,例如迴圈。在一些配置中,除了迴圈的設定外,還可能有額外的列以指定逐個週期操作的設定。這些配置可以根據網路結構和功能需求進行預編譯。在運行時,配置可以由控制器108取到配置緩衝區120中。如果網路結構或功能被改變,配置可以被相應地更新。因此,人工智慧引擎106可以通過為每個計算層定義的配置支援具有不同拓撲結構的機器學習網路。
例如,對於一計算層來說,配置對於不同的網路可以有相同的格式,但有不同的欄位值。在一些實施例中,可以採用32位元配置列格式來描述硬體行為。應該注意的是,配置列的位元寬可以是靈活的,並針對不同的硬體問題進行修改。在神經網路計算過程的不同階段,不同的配置可以應用於一計算層,以便該計算層可以被重新用於不同的計算任務。
在一實施例中,計算系統100可以在固態硬碟(SSD)的儲存控制器上實現,並且固態硬碟可以耦合到主機計算系統。主機可以使用邏輯塊位址(LBA)來指定儲存在固態硬碟的資料存放裝置上的資料塊的位置,以
執行各種資料處理任務和資料存取操作,。邏輯塊位址可以是一個線性定址方案,其中塊(block)可以通過一個整數索引來定位,例如,第一個塊是LBA 0,第二個是LBA 1,以此類推。當主機要向固態硬碟讀取或寫入資料時,主機可以向固態硬碟發出帶有LBA和長度的讀取或寫入命令。一機器學習模型可被建立來預測與資料訪問命令相關的資料是熱的還是冷的,這可以被稱為熱/冷預測(hot/cold prediction)或熱/冷資料判斷(hot/cold data determination)。此機器學習模型可以是一神經網路,可以包括許多網路層。K-Means層110、MAC層112、量化層114、查閱資料表(LUT)層116和池化層118可用以根據各自的配置來執行分配給神經網路各層的計算任務。
在計算系統100可用於熱/冷資料確定的實施例中,儲存在SSD中的資料可根據訪問特性被分類為熱或冷。例如,當作業系統主機經常訪問該資料時,儲存在某一邏輯塊位址的資料可能是熱資料;而當作業系統主機很少訪問該資料時,儲存在某一邏輯塊位址的資料可能是冷資料。熱/冷資料的確定可用於提高固態硬碟的效率和壽命,例如但不限於,垃圾收集、超額配置、磨損均衡、將熱或冷資料儲存到不同類型的NVM(例如熱資料到fast NAND如單層單元(SLC);冷資料到slow NAND如四層單元(QLC))。
圖2示意性地顯示了根據本發明的一實施例的K-Means層200。K-Means層200可以是K-Means層110的一實施例,並且可以包括集群分類器202、間隔計算器204、解多工器208、多個集群緩衝區206.1至206.N和多工器210。K-Means層200可以根據K-Means配置執行計算任務。
圖3示意性地顯示了根據本發明的一實施例的K-Means層
200的K-Means配置300。K-Means配置300可以有一個第一列302,它可以包括K-Means操作的設定。例如,該設定可以包括第一欄位304指定要保存在每個集群緩衝區206.1至206.N中的歷史資料點的數量,第二欄位306係用於集群的數量,而第三欄位308用於最不重要位元(Least Significant Bits,LSBs)的資料劃分,且另一個用於最重要位元(Most Significant Bits,MSBs)。集群緩衝區206.1至206.N中的每一個係用以保留H個歷史資料點,而數字H可以在第一欄位304中指定。此外,K-Means層200中的集群緩衝區的數量可以是N,但是計算任務的集群數量可以在第二欄位306中指定,它可以是1到N的任何數字。
每個集群可以有一個中心點,中心點的位元可以分為兩部分:一是最不重要位元(LSBs),另一是最重要位元(MSBs)。配置300可進一步包括中心點列310.1和310.2。每個中心點列310.1可包含一個中心點的LSBs,每個中心點列310.2可包含一個中心點的MSBs。中心點列的數量可以是第二欄位306中指定的群組數量乘以2。例如,如果聚類的數量是16,那麼中心點列的數量可以是32(例如,16個中心點列310.1和16個中心點列310.2)。在最大N為64的實施例中(例如,64個集群緩衝區206),中心點列的最大數量可以是128。
在一些實施例中,資料登錄點中的資料欄位的位元寬並不正好是配置列的位元寬的兩倍。因此,劃分LSBs和MSBs的位元位置不需要在資料欄位的中心,可以在第三欄位308中指定。LSBs和MSBs可以在中心列310.1和310.2中用零填充。對於可能是LBAs的資料登錄,LSBs和MSBs的劃分也可以被稱為LBA移位元模式,因此第三欄位308也可以被稱為LBA移位
元模式欄位308。一個輸入的LBA可以被劃分為LSBs和MSBs,並以與集群的中心點相同的方式進行填充。例如在一實施例中,一個LBA可以有40位元,而一個配置列可以有32位元。LBA移位元模式欄位308可以指定40位元中哪些屬於LSBs,40位元中哪些屬於MSBs。
集群分類器202可以接收輸入資料和中心點,並確定輸入資料點可以發送到哪個集群緩衝區(例如藉由產生一個控制信號給解多工器208)。對於熱/代碼預測,輸入資料可以包括LBA、要存取的資料塊的長度和當前資料存取命令的命令索引。集群分類器202可以計算輸入資料點到集群中心點的距離,並根據計算的距離將輸入資料點分配到一個集群(例如,其中心點與輸入資料點間的距離最短的集群)。
間隔計算器204可以被配置為決定相關輸入LBA的間隔。例如,間隔計算器204可以保持對不同位址的先前訪問的記錄,並將記錄保存在臨時記憶體中。例如,間隔計算器204中的寄存器或記憶體(未顯示)。間隔計算器204可以獲得輸入LBA中的位址的最近一次訪問,並計算出當前命令和最近一次訪問之間的間隔。在一實施例中,間隔可以是當前命令和同一位址的最新訪問之間的索引差。例如,當前命令可能是來自主機的第20個命令(例如,索引是20),間隔計算器204可以找到具有相同LBA地址的第12個命令,並將間隔計算為8(20-12)。在另一實施例中,間隔可以是當前命令和具有相同位址的最新命令之間的時間差。
集群緩衝區206.1至206.N中的資料點可以包括歷史資料點和剛剛收到的當前資料點。數位H也可以被稱為集群緩衝區的深度。多工器210可用於從集群緩衝區206.1至206.N中輸出資料點。由集群分類器202發送
至解多工器208的控制信號也可被發送至多工器210,以選擇集群緩衝區來輸出集群緩衝區中的資料點。在一實施例中,每個輸出的資料點可以包括5個元素。LBA MSB部分、LBA LSB部分、長度、間隔和集群索引。而從選定的集群緩衝區輸出的資料點可以是一個H列5行的矩陣,其中H是集群緩衝區的深度,每個數據點有5個元素。
圖4示意性地顯示了根據本發明的一實施例的MAC層400。MAC層400可以是計算系統100的MAC層112的一實施例。MAC層400可以包括多個MAC單元402.1至402.2M。多個MAC單元402.1至402.2M中的每一個可以有相應的緩衝區404.1至404.2M用於權重和偏差。在一些實施例中,幾個MAC單元可以被組合在一起,為輸入資料共用一個緩衝區。例如,一對MAC單元可以被組合在一起以共用一組資料寄存器。如圖4所示,MAC單元402.1和402.2可以共用資料寄存器406.1,而MAC單元402.2M-1和402.2M可以共用資料寄存器406.M。
MAC單元402.1至402.2M中的任一個可以包括電路,以平行地執行B數量的乘法,以及乘法結果和部分結果的加法。每個乘法可以通過將來自資料寄存器406的輸入資料元素與來自緩衝區404的權重相乘來執行。加法結果可以是一個最終結果或部分結果。如果加法結果是部分結果,它可以被回饋回來,與下一輪乘法的乘法結果相加,直到可以得到最終結果。在第一輪計算中,沒有部分結果,對部分結果的MAC單元的輸入可以被設置為零。在一實施例中,數字B可以是4,因此,MAC單元402.1至402.2M中的每一個可以被配置為在4對輸入上執行4次乘法。也就是說,來自資料寄存器406的4個輸入資料元素可以分別與來自緩衝區404的4個權重相乘,
並且4個乘法結果可以被加在一起並與部分結果相加。
根據配置,MAC層400可用於為神經網路中的卷積層或全連接層執行MAC操作。卷積層也可以被稱為卷積神經網路(CNN)層,全連接層也可以被稱為全連接神經網路(FNN)層。圖5A示意性地顯示了用於MAC層400的CNN配置500,以根據本發明的一實施例執行CNN層的操作。CNN層的計算可包括使用權重矩陣(也稱為kernel)圍繞輸入資料矩陣進行卷積。圖5B示意性地顯示了根據本發明的一實施例的輸入資料矩陣510和權重矩陣512。
CNN配置500可以包括多個列。一些列可用於描述CNN操作拓撲結構,其他列可用於描述週期內的操作。例如,CNN配置500的前4列可用於描述CNN操作拓撲結構。第一列502可以描述輸入資料矩陣510的列方向上的操作,例如圖5B中的迴圈1方向;第二列504可以描述輸入資料矩陣510的行方向上的操作,例如圖5B中的迴圈2方向;第三列506可以描述在權重矩陣512的列方向上的操作,例如圖5B中的迴圈3方向;以及第四列508可以描述在權重矩陣512的行方向上的操作,例如圖5B中的迴圈4方向。
一般來說,輸入資料矩陣510可以具有t乘r的大小(例如,t列乘r行,t和r是正整數),並且權重矩陣512可以具有d乘k的大小(例如,d列乘k行,d和k是正整數)。因為MAC層400的每個MAC單元402可能具有有限的乘法和加法能力,一個MAC單元可能在每個計算週期中對權重矩陣的一部分進行乘法和加法。也就是說,一個MAC單元402可能需要幾個週期來產生一個輸出資料點。在一實施例中,每個MAC單元402可以被配置為執行4個乘法,輸入資料矩陣510的4個輸入資料元素和權
重矩陣512的4個權重可以在一個計算週期中被一個MAC單元402乘法。輸入資料矩陣510的4個輸入資料元素可以來自輸入資料矩陣510的一列,而權重矩陣512的4個權重可以來自權重矩陣512的一列。
CNN操作拓撲還可以包括步長(stride)和填充(padding),這可以幫助確定在迴圈1和迴圈2的每個方向上可能需要多少個迴圈。作為一個例子,當stride為1,padding為0時,為了完成對輸入資料矩陣510和權重矩陣512的CNN層操作,迴圈1方向可能需要r-k+1個迴圈,迴圈2方向可能需要t-d+1個迴圈。在至少一實施例中,第一列502可以包括指定迴圈1方向上的迴圈數和步長的欄位。填充數可以從迴圈1方向的迴圈數中得到,因此在設置中不需要。在一些實施例中,CNN層的計算結果可以受制於激活函數(例如sigmoid函數和tanh函數),並且第一列502還可以包括指定啟動函數的欄位。第二列504可以包括指定迴圈2方向的迴圈數的欄位,輸入資料元素的資料位址偏移,用於讀入前一個迴圈的部分結果的部分結果位址偏移。應該注意的是,當填充物不為零時,輸入資料矩陣510可以通過增加值為零的元素在記憶體中的列和行方向上擴展。因此,對MAC層400的輸入資料元素可以有填充元素。
迴圈3和迴圈4方向的迴圈數可以根據權重矩陣512的大小來確定。例如,迴圈3方向可能需要ceiling(k/4)迴圈,而迴圈4方向可能需要d迴圈。ceiling函數可用於獲得四捨五入到最近的整數的除法結果。第三列506可以包括指定迴圈3方向的迴圈數、輸入資料元素的資料列偏移和列方向下一批權重的權重位址偏移的欄位。如本文所使用的,一批權重可指在一個週期內載入到MAC單元的一組權重(例如,在一個週期內載入到一個
MAC單元的4個權重)。第四列508可以包括指定迴圈4方向的循環數、輸入資料元素的資料位址偏移和行方向的下一批權重位址偏移的欄位。
在一個例子中,如果輸入資料矩陣510是20乘5(例如,t是20,r是5),而權重矩陣512是4乘4(例如,d和k都是4),stride是1,padding是0,則迴圈1方向可能有兩個迴圈,迴圈2方向可能有17個迴圈,迴圈3方向可能有一個迴圈,迴圈4方向可能有4個迴圈。而輸出可以是一個17乘2的矩陣。應該注意的是,CNN層的計算還可以包括為每個輸出資料元素添加一個偏差,然後17乘2矩陣的資料元素可以由第一列502中指定的啟動函數進一步處理。在一些實施例中,第508列可以包括一個標誌,以指示是否需要添加偏差。
在另一個例子中,如果輸入資料矩陣510是64乘64,權重矩陣512是8乘8,stride是1,padding是0,那麼迴圈1方向可能有57個迴圈,迴圈2方向可能有57個迴圈,迴圈3方向可能有2個迴圈,迴圈4方向可能有8個迴圈。而輸出可以是一個57乘57的矩陣。可向57乘57矩陣的每個資料元素添加偏差,資料元素可由第一列502中指定的啟動函數進一步處理。
在前四列之後,CNN配置500可以包括一個或多個列514,該列按週期指定迴圈1的操作。在一些實施例中,一個組中的兩個MAC單元可以共用同一批權重,但有不同的輸入資料元素,計算結果可以分別儲存在部分結果緩衝區中。例如,在一個計算週期中,對於輸入資料,MAC單元402.1可以接收輸入資料矩陣510的第一列的前四個元素,MAC單元402.2可以接收輸入資料矩陣510的第一列的第二至第五個元素(假設跨度為1
且填充為零)。對於權重,MAC單元402.1和402.2都可以接收權重矩陣512的第一列的4個元素。
在一些實施例中,同一批次的權重可被重新用於處理下一批次的輸入資料元素。例如,在輸入資料矩陣510的前四個元素(例如,在MAC單元402.1中)和輸入資料矩陣510的第二至第五個元素(例如,在MAC單元402.2中)在第一個計算週期中被處理之後,輸入資料矩陣510的第一列的第三至第六個元素可以在MAC單元402.1中被接收,並且輸入資料矩陣510的第一列的第四至第七個元素可以在MAC單元402.2中被接收,用於下一個計算週期。在下一個計算週期中被乘以的權重可能仍然是權重矩陣512第一列的前四個元素。應該注意的是,由於這種方法可以重複使用MAC單元中已經載入的權重,計算過程可能不同于傳統的方法,即在轉到下一個輸出之前完成一個輸出資料點。
在一實施例中,每一列514可以包括指定設置清單的欄位,包括:是否在本週期內讀取權重、是否需要在本週期內讀取輸入資料、是否需要在本週期內儲存部分結果資料、是否需要在本週期內讀取以前的部分結果資料、記憶體104中的輸入資料讀取位址、一組中的第一MAC單元的允許標誌、一組中的第二MAC單元的允許標誌、在哪裡儲存部分結果資料以及從哪裡讀取部分結果資料。在一些實施例中,每個輸入資料寄存器406可以包括多個寄存器單元,並且該列514還可以包括指定哪些資料元素可以被儲存在輸入資料寄存器406的哪些寄存器單元中的欄位。
應該注意的是,一神經網路在一CNN層可以有多個內核(kernel)。一CNN層的這些多個內核可以被視為多個輸出通道。在一實施例
中,MAC層400的每組MAC單元可以被配置為對一輸出通道進行卷積。因此,在一實施例中,MAC層400可以被配置為並行執行M個輸出通道卷積。一CNN配置500可以應用於一輸出通道。對於例子中的輸入資料矩陣510是20乘以5,權重矩陣512是4乘4,如果有4個內核,輸出可能是4個17乘2的矩陣。
此外,有時輸入資料可能有兩個以上的維度。例如,圖像/視頻資料可能有三個維度,例如紅/藍/綠的彩色圖像通常縮寫為RGB或R/G/B。在這些情況下,各自的CNN配置500可以應用於輸入資料的三種顏色中的每一種。
圖6示意性地顯示了用於MAC層400的FNN配置600,以根據本發明的一實施例執行FNN層的操作。在FNN層,權重矩陣可以具有與輸入資料矩陣相同的大小,並且FNN計算可以包括,在FNN層的每個節點,將輸入資料矩陣的每個資料元素乘以權重矩陣的相應權重,並計算乘法結果的總和(如果有偏差,則加上偏差)。一FNN配置可以包括幾列,以描述FNN操作拓撲結構。圖5B的輸入資料矩陣510也可作為FNN層輸入的示例輸入資料矩陣。例如,FNN配置600可以包括3列。第一列602可以描述輸入資料矩陣和權重矩陣的列方向的操作,第二列604可以描述輸入資料矩陣和權重矩陣的行方向的操作,第三列606可以根據MAC層400中MAC單元的數量分批描述FNN層的節點的操作。
在至少一實施例中,第一列602可以包括指定輸入資料矩陣的列方向上的迴圈數和輸入緩衝區寬度的欄位。如果FNN層是神經網路中的第一FNN層,則FNN層的輸入資料可以來自CNN輸出,或者如果FNN層
是神經網路中的第二FNN層,則輸入資料可以來自第一FNN層。CNN結果緩衝區可以具有不同於FNN結果緩衝區的緩衝區寬度。例如,CNN結果緩衝區寬度是16,FNN結果緩衝區寬度可以是8。輸入緩衝區寬度參數可以幫助MAC層400決定如何從具有不同緩衝區寬度的輸入緩衝區讀取資料。例如,如果輸入緩衝區寬度為16,而輸入資料矩陣的列方向上的迴圈數為64。MAC層400可能需要跳到下一個位址來讀取每16個輸入資料點的資料。
在一些實施例中,FNN層的計算結果可以受到啟動函數,例如sigmoid或tanh的影響,並且第一列602還可以包括指定啟動函數的欄位。第二列604可以有指定輸入資料矩陣的行方向上的迴圈數和輸入資料元素的資料位址偏移的欄位。第三列606可以包括指定成批結點的迴圈數和下一批權重的權重位址偏移的欄位。第三列606中的迴圈數可以根據FNN層的節點數和MAC層400中的MAC單元的多少來確定。例如,對於MAC層400具有8個MAC單元402(例如,M為4)的實施例,迴圈或批次節點的數量可以是上限(CNN層的總節點數除以8)。
在一個例子中,對FNN層的輸入可能是一個四通道17乘2的矩陣(例如,4x17x2),FNN層可能有32個節點,MAC層400可能有8個MAC單元402。輸入矩陣的第一列可以有總共8個資料元素,每個矩陣在第一列有2個元素,有4個矩陣。在一實施例中,每個MAC單元402被配置為並行地執行4次乘法,第一列602可能有2個迴圈數,8個資料元素需要兩個迴圈來處理;第二列604可能有17個迴圈數,第三列606可能有4個迴圈數,例如cale(32/8)。
有時,一神經網路可以有一個以上的FNN層。例如,來自上
述32個節點的CNN層的輸出,如果需要的話,在加入偏差和啟動函數後,可以被輸入到另一個有8個節點的FNN層。來自32個節點FNN層的輸出可以儲存在4個緩衝區,每個緩衝區有4(列) x 2(行)數據。對於MAC層400執行第二FNN層的操作,第一列602可以有2的迴圈數,第二列604可以有4的迴圈數,第三列606可以有1的迴圈數。
圖7示意性地顯示了根據本發明的一實施例的量化層700。量化層700可以是計算系統100的量化層114的一實施例。量化層700可以包括一量化單元702和一去量化單元704。神經網路中的資料元素在不同的計算階段可能具有不同的位寬和精度。量化層700可以調用幾個量化相關的函數,並可以使用量化單元702將輸入值從實數轉移到量化數,並使用去量化單元704將量化數轉移到實數。
量化層700可用於根據需要為下一階段的計算準備資料元素。例如,一個32位元實數可以根據一縮放係數和一零點被轉移到一個8位元整數。縮放係數可以是原始值範圍與量化值範圍的比率,零點可以是原始值0的量化點。零點和縮放係數可以從神經網路訓練結果中得出;例如使用諸如Python等高級程式設計語言的電腦程式進行訓練。
在一些實施例中,量化層700可以有兩種操作模式:直接模式和配置模式。在直接模式中,量化層700可以由另一個硬體計算層直接驅動。例如,量化層700可以直接由K-Means層200驅動。在直接模式下,K-Means層110的計算結果可以由量化層700處理,然後再作為輸入到下一個計算層。
在配置模式中,量化層700可以根據量化配置執行操作。圖8
示意性地顯示了根據本發明的一實施例的量化層700的量化配置800。量化配置800可以有幾個固定的列來描述要由量化層700執行的操作。作為一個例子,量化配置800可以有4列。列802可以是當量化層700的輸入可以是神經網路的輸入特徵緩衝區時的配置設置。在一實施例中,輸入特徵的資料元素可以被量化,但是沒有應用啟動函數,所以列802可以包含指定輸入特徵緩衝區中可以應用量化的輸入資料矩陣的列和行的數目的欄位。當量化層700的輸入可以來自CNN部分結果緩衝區時,列804可以是配置設定。啟動函數可應用於CNN計算結果,因此列804可包含指定可應用量化的CNN部分結果緩衝區中的資料元素的位置的欄位,以及啟動函數,例如none、sigmoid、tanh、ReLU等。
列806可以是當對量化層700的輸入可以來自FNN部分結果緩衝區時的配置設置。當對量化層700的輸入可以來自另一個FNN部分結果緩衝區(對於具有一個以上FNN層的神經網路的第二FNN層)時,列808可以是配置設置。啟動函數可以應用於FNN計算結果,因此,列806和列808都可以包含指定可以應用量化的FNN部分結果緩衝區中的資料元素的位置(例如緩衝區中的列數和行數)以及啟動函數(例如none、sigmoid、tanh、ReLU等)的欄位。
在一實施例中,量化層700可以執行四種不同類型的資料轉換。第一種類型可以是將輸入的實值轉換為量化的值。例如,在直接模式下,轉換K-Means輸出,或在配置模式下,轉換輸入特徵緩衝區中的輸入特徵。第二種類型可能是在直接模式下將池化結果量化值轉化為量化值。第三種類型可以是在配置模式下將MAC層部分結果的量化值轉換為實值。第
四種類型可以是應用啟動函數將MAC層累積總和轉化為量化值,例如在直接模式或配置模式中。
圖9A示意性地顯示了根據本發明的一實施例的查閱資料表(LUT)層900。LUT層900可以是計算系統100的LUT層116的一實施例。LUT層900可以包括查找單元902和內插單元904。查找單元902可以取一輸入值,並找到包圍該輸入值的段,例如一上限值和一下限值。內插單元904可以執行內插,以根據上值和下值產生更精確的結果。應該注意的是,LUT層900可以包括多個查找單元和相應的內插單元。查找單元的數量可以是一超參數,這可能取決於硬體設計。
圖9B示意性地顯示了根據本發明的一實施例的啟動函數曲線906的分割。一些啟動函數,例如ReLU、tanh和sigmoid,在其啟動函數曲線的不同部分可能有不同的斜率。例如,啟動函數曲線906在虛線表示的區段中可能具有陡峭的斜率(高斜率),而在虛線表示的區段中則具有更慢的斜率(低斜率)。在一些實施例中,一個啟動函數的段可以有不同的寬度。例如,覆蓋啟動函數曲線906的高斜率的段可以有較短的寬度,覆蓋啟動函數曲線906的低斜率的段可以有較大的寬度。此外,在一實施例中,高斜率的段的資料點可以保存在一個表中,而低斜率的段的資料點可以保存在另一個表中。而查找單元902可以被配置為根據LUT配置中的設定來搜索這些表。
圖9C示意性地顯示了根據本發明的一實施例對一輸入資料點的內插。圖9C中表示為"D"的輸入資料點可以被一下限值為"L"、上限值為"U"的段所包圍。輸入資料點"D"的啟動函數輸出(表示為AD)可
以通過基於低值"L"和高值"U"的啟動函數值AL和AU的線性插值計算,即AD=((D-L)*(AU-AL))/(U-L)+AL,其中"*"是乘法運算子,"/"是除法運算子。
圖10示意性地顯示了根據本發明的一實施例的用於查閱資料表層900的LUT配置1000。LUT配置1000的列數可以是固定的。在一實施例中,兩列可用於查閱資料表層900的共同設置。例如,列1002和列1004的共同設置可以包括但不限於:低斜率範圍的起點、低斜率範圍的終點、低斜率範圍的長度(例如長度對數),高斜率範圍的起點,高斜率範圍的終點,高斜率範圍的長度(例如長度對數),LUT範圍的最高邊界(例如對於tanh和sigmoid固定為1或接近於1;但對於其他啟動函數,不一定接近於1)。在通用設置之後,LUT配置1000中可能有一列用於CNN設置,兩列用於FNN設置。例如,列1006可以包括CNN操作的設定,列1008可以包括MAC層作為第一FNN層的設定,列1010可以包括MAC層作為第二FNN層的設定。對於CNN和FNN LUT設置,列1006、1008和1010中的每一列可以包含指定可執行查找的資料緩衝區(例如,輸入特徵緩衝區、CNN結果緩衝區或FNN結果緩衝區)中的資料元素的位置以及啟動函數,例如none、sigmoid、tanh、ReLU等等的欄位。
圖11示意性地顯示了根據本發明的一實施例的池化層1100。池化層1100可以是計算系統100的池化層118的一實施例。池化層1100可以包括多個池化單元1102.1至1102.2M。在一些實施例中,幾個池化單元可以被組合在一起以共用一個用於輸入資料的緩衝區。例如,一對彙集單元可以被組合在一起以共用一組資料寄存器。如圖11所示,彙集單元
1102.1和1102.2可以共用資料寄存器1104.1彙集單元1102.2M-1和1102.2M可以共用資料寄存器1104.M。在一實施例中,彙集單元1102.1至1102.2M的數目M可以與MAC層400的通道數目M相同。但這是可選的。
池化單元1102.1至1104.2M中的每一個可以包括對多個輸入進行比較的電路。例如,來自資料寄存器1104的4個資料登錄和來自池化部分結果緩衝區1106的部分結果輸入可以在一池化單元中進行比較,以獲得最大池化的最大值(或最小池化的最小值)。最大或最小可以是最終結果或部分結果。如果比較結果是部分結果,它可以被儲存到池化部分結果緩衝區1106,然後回饋到下一輪輸入資料元素的比較,直到可以得到最終結果。在第一輪計算中,可能只有四個輸入資料元素,沒有任何部分結果。
池化層1100可用於根據配置在神經網路中執行池化操作。圖12示意性地顯示了根據本發明的一實施例用於池化層1100執行池化操作的池化配置1200。前幾列可以是固定的,用於描述池化操作拓撲結構,而後繼的幾列可以逐個週期地描述池化單元的操作。後續列的數量可以根據輸入矩陣的尺寸和池化的參數而變化。
在圖12所示的實施例中,前3列可以是固定的。圖5B的輸入資料矩陣510也可以作為池化層1100的示例輸入資料矩陣。池化配置1200的第一列1202可以描述輸入資料矩陣的行移方向的操作(例如,圖5B中矩陣510的迴圈1方向),第二列1204可以描述池化核的列移方向的操作,第三列1206可以描述池化單元沿輸入資料行移方向的操作,例如圖5B中矩陣510的迴圈2方向)。因為池化層1100的每個池化單元1102可能具有有限的輸入,一池化單元1102可能需要幾個週期來產生一輸出資料點。例如,對於具有4
乘4的池化內核的池化操作,當每個池化單元被配置為對4個資料登錄元素和部分結果做比較時,可能需要4個池化計算週期來產生一輸出資料點。
在一實施例中,列1202可以包括指定幾個設置的欄位,包括:沿輸入矩陣在列方向(從一批行到下一批行)的池化單元移位元數,池化核移位的跨度,以及是最大池化還是最小池化。池化操作的拓撲結構可能包括stride和padding,這些資訊可能有助於確定可能需要多少個迴圈。例如,有了跨度和填充資訊,沿著輸入矩陣在列方向上的池化單元移動的數量可以通過以下公式確定:
池化配置1200的第二列1204可用於描述池化內核從一列到下一列的轉移,並可包括指定若干設置的欄位,包括:池化內核的列數、記憶體中下一批資料登錄的位址偏移。
池化配置1200的第三列1206可用於描述從一列到下一列的輸入資料的池化單元操作。第三列1206中的欄位可以包括指定以下內容的設定:沿輸入矩陣在行方向上的池化單元移位元數、記憶體中下一批輸入資料的資料位址偏移量、儲存的部分結果資料的位址偏移量、輸入資料的記憶體位址的上邊界(例如儲存的資料超過此點將不會被池化層處理)。在一實施例中,沿輸入矩陣在行方向的池化單元移位元數可由以下公式確定:
在前三列之後,池化配置1200可以包括一個或多個列1208,這些列按週期指定迴圈1的池化操作。在一實施例中,兩個池化單元1102可以為一通道分組,可以有M個通道。這兩個池化單元可以有兩個獨立的批輸入資料元素,並分別儲存部分結果資料。在一實施例中,每一列1208可以包括指定一系列設置的欄位,包括:是否需要在本週期內讀取輸入資料,是否需要在本週期內儲存部分結果資料,是否需要在本週期內讀取以前的部分結果資料,記憶體104中的輸入資料讀取位址,一組中第一彙集單元的啟用標誌,一組中第二彙集單元的啟用標誌,在哪裡儲存部分結果資料以及從哪裡讀取部分結果資料。在一些實施例中,每個輸入資料寄存器1104可以包括多個寄存器單元,並且該列1208還可以包括指定哪些資料元素可以儲存在輸入資料寄存器1104的哪些寄存器單元的欄位。
圖13示意性地顯示了根據本發明的一實施例的神經網路1300。神經網路1300可以包括許多層被稱為人工神經元的連接單元或節點,它們鬆散地模擬生物大腦中的神經元。在一個例子中,神經網路1300可以包括一輸入層1302,一卷積層1304和一池化層1306。輸入層1302可以包括被配置為接收輸入信號的神經元,這些信號可以被稱為輸入特徵。一個典型的神經網路可以包括一個以上的卷積層1304,每個CNN層之後是池化層1306。來自每個卷積層1304的輸出可以應用一啟動函數,例如sigmoid、tanh、ReLU等,然後傳遞給池化層1306。這些卷積層和池化層可用於例如影像處理神經網路的特徵學習。在一個或多個卷積層1304和相應的池化層1306之後,網路1300可以進一步包括第一全連接層1308.1,第二全連接層
1308.2,和輸出層1310。一個典型的神經網路可以包括一個或多個FNN層,網路1300顯示了兩個FNN層作為一個例子。輸出層1310可以包括一個或多個神經元,以根據輸入條件輸出信號。在一些實施例中,兩個神經元之間連接處的信號可以是一個實數或一個量化的整數。
作為一個例子,神經網路1300可以是用於熱/冷預判的神經網路,神經網路計算由AI引擎106執行,輸入層1302可以包括多個神經元以接收輸入特徵,這些特徵包括當前命令的位址、長度、年齡,以及多個歷史命令的地址、長度、年齡。輸入特徵可以是根據K-Means配置300的K-Means層110的輸出,並由根據量化配置800的量化層114處理。輸入特徵可以由一個或多個CNN層1304和池化層1306,以及一個或多個FNN層1308處理。MAC層112可以被配置為基於一個或多個CNN層的各自CNN配置500執行CNN層的計算,並且基於一個或多個FNN層的各自FNN配置600執行FNN層的計算。MAC層112的計算結果可由量化層114、LUT層116或兩者進一步處理。輸出層1310可以包括一神經元以輸出一標籤,該標籤可以指示與當前資料訪問命令相關的資料是熱的還是冷的。
作為另一個例子,神經網路1300可以是一個用於影像處理的神經網路,其計算由AI引擎106執行。K-Means層110可能不需要用於影像處理神經網路。輸入層1302可以包括多個神經元,以接收包括一個或多個圖像或視頻(可以是顏色編碼,如RGB)的輸入特徵。CNN層1304和池化層1306可以執行特徵提取。FNN層1308和輸出層1310可以執行輸入圖像的最終分類,例如圖像是否包含狗或貓等。MAC層112可以被配置為基於用於一個或多個CNN層的各自CNN配置500和用於一個或多個CNN層的各自FNN
配置600來執行CNN層的計算和FNN層的計算。MAC層112的計算結果可由量化層114、LUT層116或兩者進一步處理。輸出層1310可以包括一個或多個神經元以輸出計算結果,例如輸入圖像是否可能包含狗、貓、人等。
圖14是根據本發明的一實施例的用於AI引擎106執行神經網路計算的方法1400的流程圖。在步驟1402中,用於執行神經網路計算的計算層的配置可以被載入到配置緩衝區中。計算層可以包括乘積(MAC)層(例如MAC層112),並且配置可以包括用於MAC層的至少一全連接神經網路(FNN)配置(例如FNN配置600),以便為至少一FNN層執行計算。
在步驟1404中,神經網路的參數可以被載入到資料緩衝區中。該參數可以包括計算層的權重和偏差。例如,這些參數可以通過預先訓練神經網路產生,並在運行時加載到資料緩衝區122中。在步驟1406,輸入資料可以被載入到資料緩衝區中。例如,輸入資料可以是用於影像處理的圖像/視頻,以及資料訪問命令(例如,讀取或寫入)和用於熱/冷預測。輸入資料可以在運行時被載入到資料緩衝區122。
在步驟1408中,計算層可以被啟動,並且配置可以被應用到計算層以執行神經網路的計算。這可以包括將至少一FNN配置應用到MAC層以執行至少一FNN層的計算。該MAC層可以包括多個MAC單元。該至少一CNN配置可包括對CNN操作拓撲的設定以及對多個MAC單元的逐週期操作的設定,以執行對至少一CNN層的計算。至少一FNN配置可包括用於多個MAC單元的FNN操作拓撲結構的設定,以執行至少一FNN層的計算。
在一個示例性的實施例中,提供了一種裝置,該裝置可包括控制器、配置緩衝區、資料緩衝區和多個計算層,包括多個MAC單元的乘
積(MAC)層。控制器可被配置為調度神經網路的計算任務,並被配置為:將多個計算層的配置載入到配置緩衝區中以執行神經網路的計算,將神經網路的參數載入到資料緩衝區中並將輸入資料載入到資料緩衝區中。配置可以包括用於MAC層的至少一全連接神經網路(FNN)配置,以便為至少一FNN層執行計算。該參數可包括多個計算層的權重和偏差。MAC層可以被配置為應用至少一FNN配置來為至少一FNN層執行計算。該至少一FNN配置可以包括用於多個MAC單元的FNN操作拓撲的設定,以執行對至少一FNN層的計算。
在一實施例中,該配置可進一步包括用於MAC層的至少一卷積神經網路(CNN)配置,以執行用於至少一CNN層的計算。該至少一CNN配置可包括用於CNN操作拓撲的設定和用於多個MAC單元的逐週期操作的設定,以執行對至少一CNN層的計算。CNN操作拓撲的設定可以包括輸入資料矩陣的列方向的操作設置、輸入資料矩陣的行方向的操作設置、權重矩陣的列方向的操作設置以及權重矩陣的行方向的操作設置。
在一實施例中,多個MAC單元可以被分組為若干組。每個組可以包括一個或多個MAC單元,並可以被配置為根據至少一CNN配置對一輸出通道進行卷積,一個組中的一個或多個MAC單元可以共用同一批權重,但有不同的輸入資料元素。
在一實施例中,FNN操作拓撲的設定可以包括對輸入資料矩陣的列方向和權重矩陣的操作的設定,對輸入資料矩陣的行方向和權重矩陣的操作的設定,以及對至少一FNN層的節點根據MAC層中的MAC單元的數量分批操作的設定。
在一實施例中,多個計算層可以進一步包括一K-Means層,該層被配置為根據K-Means配置將輸入資料聚類為多個聚類。
在一實施例中,多個計算層可以進一步包括量化層,該層被配置為將資料值從實數轉化為量化數,以及從量化數轉化為實數。
在一實施例中,量化層可以被配置為執行由另一計算層驅動的資料轉換。
在一實施例中,量化層可以被配置為根據量化配置進行資料轉換。
在一實施例中,多個計算層可以進一步包括池化層,其包括多個池化單元,每個池化單元被配置為比較多個輸入值。池化層可以被配置為根據池化配置執行最大池化或最小池化,該池化配置可以包括對池化操作拓撲的設定和對多個池化單元的逐次迴圈操作的設定。
在一實施例中,多個計算層可以進一步包括查閱資料表層,該查閱資料表層被配置為通過查找包圍輸入資料值的啟動函數曲線的一段並根據該段的上值和下值的啟動函數值進行插值來生成啟動函數的輸出值。
在另一示例性實施例中,提供了一種方法,包括:將用於計算層的配置載入到配置緩衝區中以執行神經網路的計算,將神經網路的參數載入到資料緩衝區中,將輸入資料載入到資料緩衝區中並啟動計算層和應用配置以執行神經網路的計算。計算層可以包括一乘積(MAC)層。配置可以包括用於MAC層的至少一全連接神經網路(FNN)配置,以執行至少一FNN層的計算。參數可以包括計算層的權重和偏差。啟動計算層和應
用配置可以包括將至少一FNN配置應用到MAC層。MAC層可以包括多個MAC單元。至少一FNN配置可包括用於多個MAC單元的FNN操作拓撲的設定,以便為至少一FNN層執行計算。
在一實施例中,配置可以進一步包括用於MAC層的至少一卷積神經網路(CNN)配置以執行至少一CNN層的計算,並且啟動計算層和應用配置以執行神經網路的計算可以進一步包括將至少一CNN配置應用到MAC層。該至少一CNN配置可以包括用於CNN操作拓撲的設定和用於多個MAC單元的逐週期操作的設定,以執行用於至少一CNN層的計算。CNN操作拓撲的設定可以包括輸入資料矩陣的列方向的操作設置,輸入資料矩陣的行方向的操作設置,以及權重矩陣的列方向的操作設置和權重矩陣的行方向的操作設置。
在一實施例中,多個MAC單元可被分組為若干組。每個組可以包括一或多個MAC單元,並可以被配置為根據至少一CNN配置對一輸出通道進行卷積。一組中的一個或多個MAC單元可以共用同一批權重,但具有不同的輸入資料元素。
在一實施例中,FNN操作拓撲的設定可以包括對輸入資料矩陣的行方向和權重矩陣的操作的設定,對輸入資料矩陣的行方向和權重矩陣的操作的設定,以及對至少一FNN層的節點根據MAC層中的MAC單元的數量分批操作的設定。
在一實施例中,該方法可以進一步包括使用多個計算層中的K-Means層,根據K-Means配置將輸入資料聚類成多個聚類。
在一實施例中,該方法可進一步包括使用多個計算層的量化
層將資料值從實數轉化為量化數,以及從量化數轉化為實數。
在一實施例中,量化層可以被配置為執行由另一計算層驅動的資料轉換。
在一實施例中,量化層可以被配置為根據量化配置進行資料轉換。
在一實施例中,該方法可以進一步包括根據使用多個計算層的池化層的池化配置執行最大池化或最小池化。池化層可以包括多個池化單元,每個單元被配置為比較多個輸入值。池化配置可以包括對池化操作拓撲的設定和對多個池化單元的逐次迴圈操作的設定。
在一實施例中,該方法可以進一步包括使用多個計算層的查閱資料表層為啟動函數生成輸出值。查閱資料表層可以被配置為查找包圍輸入資料值的啟動函數曲線的一段,並根據該段的上值和下值的啟動函數值執行插值。
任何公開的方法和操作都可以作為電腦可執行指令(例如,用於本文所述操作的軟體代碼)儲存在一個或多個電腦可讀儲存介質(例如,非暫時性電腦可讀介質,
例如一個或多個光學介質光碟、易失性記憶體元件(例如DRAM或SRAM),或非易失性記憶體元件(例如硬碟)上並在設備控制器(例如,由ASIC執行的固件)上執行。用於實現所公開的技術的任何電腦可執行指令以及在實現所公開的實施例期間創建和使用的任何資料可以儲存在一個或多個電腦可讀介質(例如,非臨時性電腦可讀介質)上。
如本文所用,非易失性存放裝置可以是一種電腦存放裝置,
它可以在斷電後保持所儲存的資訊,並且在電源迴圈(關閉和重新開啟)後可以檢索所儲存的資訊。非易失性存放裝置可以包括軟碟、硬碟、磁帶、光碟、NAND快閃記憶體、NOR快閃記憶體、磁阻式隨機存取記憶體(MRAM)、電阻式隨機存取記憶體(RRAM)、相變隨機存取記憶體(PCRAM)、奈米RAM,等等。在描述中,NAND快閃記憶體可以作為擬議技術的一個例子。然而,根據本發明的各種實施例可以用其他種類的非易失性存放裝置來實現這些技術。
雖然這裡已經披露了各種方面和實施例,但對於本領域的技術人員來說,其他方面和實施例也是顯而易見的。這裡披露的各個方面和實施例是為了說明問題,而不是為了限制,真正的範圍和精神是由以下的權利要求來表示。
藉由以上具體實施例之詳述,係希望能更加清楚描述本發明之特徵與精神,而並非以上述所揭露的具體實施例來對本發明之範疇加以限制。相反地,其目的是希望能涵蓋各種改變及具相等性的安排於本發明所欲申請之專利範圍的範疇內。
100:計算系統
102:中央處理單元
104:儲存器
106:AI引擎
108:控制器
110:K-Means層
112:MAC層
114:量化層
116:LUT層
118:池化層
120:配置緩衝區
122:資料緩衝區
Claims (20)
- 一種用於硬體神經網路引擎的設備,包括:一控制器,用以調度一神經網路之計算任務;一配置緩衝區;一資料緩衝區;以及複數個計算層,包括一個MAC層(Multiply-Accumulate,MAC),該MAC層包括複數個MAC單元;其中該控制器係用以:將用於該等計算層之複數個配置載入到該配置緩衝區中以執行該神經網路的計算,該等配置包括用於該MAC層的至少一個FNN(Fully-connected Neural Network,FNN)配置以執行該至少一個FNN層的計算;將該神經網路的參數載入到該資料緩衝區中,該參數包括該等計算層的權重和偏差;以及將一輸入資料載入到該資料緩衝區;其中,該MAC層係用以:提供該至少一個FNN層配置來為該至少一個FNN層執行計算,該至少一個FNN層配置包括用於該等MAC單元之一FNN操作拓撲的設定,以便為該至少一個FNN層執行計算,該FNN操作拓撲的設定包含該至少一個FNN層的節點根據該MAC層中該等MAC單元的數量分批操作的設定;其中,該至少一個FNN層的計算結果包含啟動函數、輸入資料矩陣 的行方向上的迴圈數、輸入資料元素的資料位址偏移、成批節點的迴圈數以及權重位址偏移。
- 如申請專利範圍第1項所述之設備,其中該等配置進一步包括用於該MAC層的至少一個CNN(Convolutional Neural Network,CNN)配置,以執行用於至少一個CNN層的計算,該至少一個CNN配置包括用於一CNN操作拓撲之設定和逐週期操作之設定,以使該等MAC單元執行該至少一個CNN層的計算,並且該CNN操作拓撲之設定包括一輸入資料矩陣之列方向的操作設定、該輸入資料矩陣之行方向的操作設定、一權重矩陣之列方向的操作設定以及該權重矩陣之行方向的操作設定。
- 如申請專利範圍第2項所述之設備,其中該等MAC單元被分為複數組,每一組包括一個或多個MAC單元,用以根據該至少一CNN配置執行一輸出通道的卷積,同一組中的一個或多個MAC單元共用同一批權重但具有不同的輸入資料元素。
- 如申請專利範圍第1項所述之設備,其中該FNN操作拓撲的設定包括一輸入資料矩陣和一權重矩陣於列方向上的操作的設定,以及該輸入資料矩陣和該權重矩陣於行方向上的操作的設定。
- 如申請專利範圍第1項所述之設備,其中該等計算層進一步包括一K-Means層,用以根據一K-Means配置將該輸入資料聚類為多個集群。
- 如申請專利範圍第1項所述之設備,其中該等計算層進一步包括一量化層,用以將資料值從實數轉化為量化數以及從量化數轉化為實數。
- 如申請專利範圍第6項所述之設備,其中該量化層係用以執行由另一計算層驅動的資料轉換。
- 如申請專利範圍第6項所述之設備,其中該量化層係用以根據一量化配置執行資料轉換。
- 如申請專利範圍第1項所述之設備,其中該等計算層進一步包括一池化層,該池化層包括複數個池化單元,每個池化單元係用以比較多個輸入值,該池化層被係用以根據一池化配置執行一最大池化或一最小池化,該池化配置包括用於該等池化單元之一池化操作拓撲結構的設定和逐週期操作設定。
- 如申請專利範圍第1項所述之設備,其中該等計算層進一步包括一查閱資料表層,用以藉由查找包圍一輸入資料值的一啟動函數曲線的一片段來生成一啟動函數之一輸出值,並根據一啟動函數值對該段的上值和下值進行插值。
- 一種用於硬體神經網路引擎的方法,包括:將一計算層的複數個配置加載到一配置緩衝區,該計算層包括一MAC層(Multiply-Accumulate,MAC),並且該配置包括用於該MAC層之至少一FNN(Fully-connected Neural Network,FNN)配置為至少一FNN層執行計算;將一神經網路之一參數加載到一資料緩衝區,該等參數包括該計算層的複數個權重和複數個偏差;加載輸入數據到該資料緩衝區;以及啟動該計算層並應用該配置來執行該神經網路的計算,包括:將至少一FNN配置應用於該MAC層,該MAC層包括複數個MAC單元,該至少一FNN配置包括用於多個MAC單元之一FNN操作拓樸的設 定以執行該至少一FNN層的計算,其中該FNN操作拓撲的設定包含該至少一個FNN層的節點根據該MAC層中該等MAC單元的數量分批操作的設定,並且該至少一個FNN層的計算結果包含啟動函數、輸入資料矩陣的行方向上的迴圈數、輸入資料元素的資料位址偏移、成批節點的迴圈數以及權重位址偏移。
- 如申請專利範圍第11項所述之方法,其中該等配置包括用於該MAC層的至少一CNN(Convolutional Neural Network,CNN)配置,以執行該至少一CNN層的計算,並且啟動該計算層和應用配置以執行該神經網路的計算,該神經網路進一步包括將該至少一CNN配置應用於該MAC層,其中,該至少一CNN配置包括用於一CNN操作拓撲的設定和逐週期操作的設定,以執行該至少一CNN層的計算,該CNN操作拓撲的設定包括用於一輸入資料矩陣的列方向的操作的設定,用於該輸入資料矩陣的行方向的操作的設定,以及用於一權重矩陣的列方向的操作的設定和用於該權重矩陣的行方向的操作的設定。
- 如申請專利範圍第12項所述之方法,其中該等MAC單元被分為複數組,每一組包括一個或多個MAC單元,用以根據該至少一CNN配置執行一個輸出通道的卷積,同一組中的一個或多個MAC單元共用同一批權重但具有不同的輸入資料元素。
- 如申請專利範圍第11項所述之方法,其中該FNN操作拓撲的設定包括一輸入資料矩陣和一權重矩陣於列方向上的操作的設定,以及該輸入資料矩陣和該權重矩陣於行方向的操作的設定。
- 如申請專利範圍第11項所述之方法,進一步包括根據該等計算層中的一 K-Means層的一K-Means配置將該輸入資料聚類為多個集群。
- 如申請專利範圍第11項所述之方法,進一步包括使用該等計算層中的一量化層將資料值從實數轉化為量化數,以及從量化數轉化為實數。
- 如申請專利範圍第16項所述之方法,其中該量化層用以執行由另一計算層驅動的資料轉換。
- 如申請專利範圍第16項所述之方法,其中該量化層用以根據一量化配置執行資料轉換。
- 如申請專利範圍第11項所述之方法,進一步包括根據使用該等計算層之一池化層之一池化配置執行最大池化或最小池化,其中該池化層包括複數個個池化單元,每個池化單元用以比較多個輸入值,該池化配置包括用於該等池化單元之一池化操作拓撲結構的設定和逐週期操作設定。
- 如申請專利範圍第11項所述之方法,進一步使用該等計算層之一查閱資料表層查找來生成一啟動函數之一輸出值,其中該查閱資料表層被設定為查找包含一輸入資料值的一啟動函數曲線的一片段,並根據一啟動函數值對該段的上值和下值進行插值。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US17/583,296 US20230237307A1 (en) | 2022-01-25 | 2022-01-25 | Systems and methods for a hardware neural network engine |
| US17/583,296 | 2022-01-25 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| TW202341010A TW202341010A (zh) | 2023-10-16 |
| TWI863083B true TWI863083B (zh) | 2024-11-21 |
Family
ID=87314258
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| TW112100587A TWI863083B (zh) | 2022-01-25 | 2023-01-06 | 用於硬體神經網路引擎的設備和方法 |
Country Status (2)
| Country | Link |
|---|---|
| US (1) | US20230237307A1 (zh) |
| TW (1) | TWI863083B (zh) |
Families Citing this family (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20240005138A1 (en) * | 2022-05-26 | 2024-01-04 | Synopsys, Inc. | Efficient look-up table based functions for artificial intelligence (ai) accelerator |
| TWI893970B (zh) * | 2024-03-14 | 2025-08-11 | 慧榮科技股份有限公司 | 基於人工智慧引擎的效能增進方法及電腦程式產品及裝置 |
Citations (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20190114499A1 (en) * | 2017-10-17 | 2019-04-18 | Xilinx, Inc. | Image preprocessing for generalized image processing |
| CN110020716A (zh) * | 2017-11-06 | 2019-07-16 | 畅想科技有限公司 | 神经网络硬件 |
| US20210319317A1 (en) * | 2021-06-24 | 2021-10-14 | Intel Corporation | Methods and apparatus to perform machine-learning model operations on sparse accelerators |
-
2022
- 2022-01-25 US US17/583,296 patent/US20230237307A1/en active Pending
-
2023
- 2023-01-06 TW TW112100587A patent/TWI863083B/zh active
Patent Citations (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20190114499A1 (en) * | 2017-10-17 | 2019-04-18 | Xilinx, Inc. | Image preprocessing for generalized image processing |
| CN110020716A (zh) * | 2017-11-06 | 2019-07-16 | 畅想科技有限公司 | 神经网络硬件 |
| US20210319317A1 (en) * | 2021-06-24 | 2021-10-14 | Intel Corporation | Methods and apparatus to perform machine-learning model operations on sparse accelerators |
Also Published As
| Publication number | Publication date |
|---|---|
| TW202341010A (zh) | 2023-10-16 |
| US20230237307A1 (en) | 2023-07-27 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US11907830B2 (en) | Neural network architecture using control logic determining convolution operation sequence | |
| US11693657B2 (en) | Methods for performing fused-multiply-add operations on serially allocated data within a processing-in-memory capable memory device, and related memory devices and systems | |
| US20240338556A1 (en) | Dynamic variable bit width neural processor | |
| CN112085186A (zh) | 一种神经网络的量化参数确定方法及相关产品 | |
| KR102594768B1 (ko) | 데이터 처리장치의 데이터 항목들 내의 성분들의 계수 | |
| GB2560600A (en) | Nueral Network Hardware | |
| CN115204355A (zh) | 能够重新使用数据的神经处理单元及其方法 | |
| TWI863083B (zh) | 用於硬體神經網路引擎的設備和方法 | |
| CN113407747A (zh) | 硬件加速器执行的方法、硬件加速器和神经网络装置 | |
| GB2568102A (en) | Exploiting sparsity in a neural network | |
| KR102869712B1 (ko) | 기계 학습 작업시 개선된 메모리 압축 전달을 위한 유사도에 기초한 특징 재정렬 | |
| KR102869713B1 (ko) | 기계 학습 작업시 개선된 메모리 압축 전달을 위한 희소성에 기초한 특징 재정렬 | |
| CN115080138A (zh) | 用于神经网络部署和执行的有效存储器使用优化 | |
| KR102372869B1 (ko) | 인공 신경망을 위한 행렬 연산기 및 행렬 연산 방법 | |
| CN115080139A (zh) | 用于神经网络部署和执行的有效量化 | |
| CN110889080A (zh) | 乘积累加运算装置、乘积累加运算方法和系统 | |
| CN112906728B (zh) | 一种特征比对方法、装置及设备 | |
| CN120917460A (zh) | 基于机器学习(ml)的软件内核选择 | |
| CN119002865B (zh) | 数据结构转换方法与电子装置 | |
| US12547870B2 (en) | Optimization of memory use for efficient neural network execution | |
| US20250028946A1 (en) | Parallelizing techniques for in-memory compute architecture | |
| US20230051344A1 (en) | Optimization of memory use for efficient neural network execution | |
| US20240095541A1 (en) | Compiling of tasks for streaming operations at neural processor | |
| US20230043584A1 (en) | Optimization of memory use for efficient neural network execution | |
| CN117973464A (zh) | 神经网络模型压缩方法、装置、计算系统及存储介质 |