Ascend310 AI處理器邏輯架構昇騰AI處理器的主要架構組成:芯片系統(tǒng)控制CPU(Control CPU)AI計算引擎(包括AI Core和AI CPU)多層級的片上系統(tǒng)緩存(Cache)或緩沖區(qū)(Buffer)數字視覺預處理模塊(Digital Vision Pre-Processing,DVPP)等AI Core:集成了2個AI Core。
下載鏈接:
Ascend310 AI處理器規(guī)格
Ascend310 AI處理器邏輯架構
昇騰AI處理器本質上是一個片上系統(tǒng)(System on Chip,SoC),主要可以應用在和圖像、視頻、語音、文字處理相關的應用場景。其主要的架構組成部件包括特制的計算單元、大容量的存儲單元和相應的控制單元。該芯片大致可以劃為:芯片系統(tǒng)控制CPU(Control CPU),AI計算引擎(包括AI Core和AI CPU),多層級的片上系統(tǒng)緩存(Cache)或緩沖區(qū)(Buffer),數字視覺預處理模塊(Digital Vision Pre-Processing,DVPP)等。芯片可以采用LPDDR4高速主存控制器接口,價格較低。目前主流SoC芯片的主存一般由DDR(Double Data Rate)或HBM(High Bandwidth Memory)構成,用來存放大量的數據。HBM相對于DDR存儲帶寬較高,是行業(yè)的發(fā)展方向。其它通用的外設接口模塊包括USB、磁盤、網卡、GPIO、I2C和電源管理接口等。
昇騰AI處理器的主要架構組成:
芯片系統(tǒng)控制CPU(Control CPU)
AI計算引擎(包括AI Core和AI CPU)
多層級的片上系統(tǒng)緩存(Cache)或緩沖區(qū)(Buffer)
數字視覺預處理模塊(Digital Vision Pre-Processing,DVPP)等
AI Core:集成了2個AI Core。昇騰AI芯片的計算核心,主要負責執(zhí)行矩陣、向量、標量計算密集的算子任務,采用達芬奇架構。
ARM CPU核心:集成了8個A55。其中一部分部署為AI CPU,負責執(zhí)行不適合跑在AI Core上的算子(承擔非矩陣類復雜計算);一部分部署為專用于控制芯片整體運行的控制CPU。兩類任務占用的CPU核數可由軟件根據系統(tǒng)實際運行情況動態(tài)分配。此外,還部署了一個專用CPU作為任務調度器(Task Scheduler,TS),以實現計算任務在AI Core上的高效分配和調度;該CPU專門服務于AI Core和AI CPU,不承擔任何其他的事務和工作。
DVPP:數字視覺預處理子系統(tǒng),完成圖像視頻的編解碼。用于將從網絡或終端設備獲得的視覺數據,進行預處理以實現格式和精度轉換等要求,之后提供給AI計算引擎。
Cache & Buffer:SOC片內有層次化的memory結構,AI core內部有兩級memory buffer,SOC片上還有8MB L2 buffer,專用于AI Core、AI CPU,提供高帶寬、低延遲的memory訪問。芯片還集成了LPDDR4x控制器,為芯片提供更大容量的DDR內存。
對外接口:支持PCIE3.0、RGMII、USB3.0等高速接口、以及GPIO、UART、I2C、SPI等低速接口。
昇騰AI處理器集成了多個ARM公司的CPU核心,每個核心都有獨立的L1和L2緩存,所有核心共享一個片上L3緩存。集成的CPU核心按照功能可以劃分為專用于控制芯片整體運行的主控CPU 和專用于承擔非矩陣類復雜計算的AI CPU。兩類任務占用的CPU核數可由軟件根據系統(tǒng)實際運行情況動態(tài)分配。
除了CPU之外,該芯片真正的算力擔當是采用了達芬奇架構的AI Core。這些AI Core通過特別設計的架構和電路實現了高通量、大算力和低功耗,特別適合處理深度學習中神經網絡必須的常用計算如矩陣相乘等。目前該芯片能對整型數(INT8、INT4) 或對浮點數(FP16)提供強大的乘加計算力。由于采用了模塊化的設計,可以很方便的通過疊加模塊的方法提高后續(xù)芯片的計算力。
針對深度神經網絡參數量大、中間值多的特點,該芯片還特意為AI計算引擎配備了容量為8MB的片上緩沖區(qū)(On-Chip Buffer),提供高帶寬、低延遲、高效率的數據交換和訪問。能夠快速訪問到所需的數據對于提高神經網絡算法的整體性能至關重要,同時將大量需要復用的中間數據緩存在片上對于降低系統(tǒng)整體功耗意義重大。為了能夠實現計算任務在AI Core上的高效分配和調度,還特意配備了一個專用CPU作為任務調度器(Task Scheduler,TS)。該CPU專門服務于AI Core和AI CPU,而不承擔任何其他的事務和工作。
數字視覺預處理模塊主要完成圖像視頻的編解碼,支持4K分辨率,視頻處理,對圖像支持JPEG和PNG等格式的處理。來自主機端存儲器或網絡的視頻和圖像數據,在進入昇騰AI芯片的計算引擎處理之前,需要生成滿足處理要求的輸入格式、分辨率等,因此需要調用數字視覺預處理模塊進行預處理以實現格式和精度轉換等要求。數字視覺預處理模塊主要實現視頻解碼(Video Decoder,VDEC),視頻編碼(Video Encoder,VENC),JPEG編解碼(JPEG Decoder/Encoder,JPEGD/E),PNG解碼(PNG Decoder,PNGD)和視覺預處理(Vision Pre-Processing Core,VPC)等功能。圖像預處理可以完成對輸入圖像的上/下采樣、裁剪、色調轉換等多種功能。
開發(fā)者在利用昇騰硬件進行神經網絡模型訓練或者推理的過程中,可能會遇到以下場景:
訓練場景下,將第三方框架(例如TensorFlow、PyTorch等)的網絡訓練腳本遷移到昇騰AI處理器時遇到了不支持的算子。
推理場景下,將第三方框架模型(例如TensorFlow、Caffe、ONNX等)使用ATC工具轉換為適配昇騰AI處理器的離線模型時遇到了不支持的算子。
網絡調優(yōu)時,發(fā)現某算子性能較低,影響網絡性能,需要重新開發(fā)一個高性能算子替換性能較低的算子。
推理場景下,應用程序中的某些邏輯涉及到數學運算(例如查找最大值,進行數據類型轉換等),希望通過自定義算子的方式實現這些邏輯,從而獲得性能提升。
此時我們就需要考慮進行自定義算子的開發(fā),本期我們主要帶您了解CANN自定義算子的幾種開發(fā)方式和基本開發(fā)流程,讓您對CANN算子有宏觀的了解。
一、算子基本概念
相信大家對算子的概念并不陌生,這里我們來做簡單回顧。深度學習算法由一個個計算單元組成,我們稱這些計算單元為算子(Operator,簡稱OP)。
在網絡模型中,算子對應層中的計算邏輯,例如:卷積層(Convolution Layer)是一個算子;全連接層(Fully-connected Layer, FC layer)中的權值求和過程,是一個算子。
再例如:tanh、ReLU等,為在網絡模型中被用做激活函數的算子。
二、CANN自定義算子開發(fā)方式
學習CANN自定義算子開發(fā)方式之前,我們先來了解一下CANN算子的運行位置:包括AI Core和AI CPU。
AI Core是昇騰AI處理器的計算核心,負責執(zhí)行矩陣、向量、標量計算密集的算子任務。
AI CPU負責執(zhí)行不適合跑在AI Core上的算子,是AI Core算子的補充,主要承擔非矩陣類、邏輯比較復雜的分支密集型計算。
CANN支持用戶使用多種方式來開發(fā)自定義算子,包括TBE DSL、TBE TIK、AICPU三種開發(fā)方式。其中TBE DSL、TBE TIK算子運行在AI Core上,AI CPU算子運行在AI CPU上。
1. 基于TBE開發(fā)框架的算子開發(fā)
TBE(Tensor Boost Engine:張量加速引擎)是CANN提供的算子開發(fā)框架,開發(fā)者可以基于此框架使用Python語言開發(fā)自定義算子,通過TBE進行算子開發(fā)有TBE DSL、TBE TIK兩種方式。
TBE DSL(Domain-Specific Language ,基于特性域語言)開發(fā)方式
為了方便開發(fā)者進行自定義算子開發(fā),CANN預先提供一些常用運算的調度,封裝成一個個運算接口,稱為基于TBE DSL開發(fā)。DSL接口已高度封裝,用戶僅需要使用DSL接口完成計算過程的表達,后續(xù)的算子調度、算子優(yōu)化及編譯都可通過已有的接口一鍵式完成,適合初級開發(fā)用戶。
TBE TIK(Tensor Iterator Kernel)開發(fā)方式
TIK(Tensor Iterator Kernel)是一種基于Python語言的動態(tài)編程框架,呈現為一個Python模塊,運行于Host CPU上。開發(fā)者可以通過調用TIK提供的API基于Python語言編寫自定義算子,TIK編譯器會將其編譯為昇騰AI處理器應用程序的二進制文件。
TIK需要用戶手工控制數據搬運和計算流程,入門較高,但開發(fā)方式比較靈活,能夠充分挖掘硬件能力,在性能上有一定的優(yōu)勢。
2. AI CPU算子開發(fā)方式
AI CPU算子的開發(fā)接口即為原生C++接口,具備C++程序開發(fā)能力的開發(fā)者能夠較容易的開發(fā)出AI CPU算子。AI CPU算子在AI CPU上運行。
下面的開發(fā)方式一覽表,對上述幾種開發(fā)方式作對比說明,您可以根據各種開發(fā)方式的適用場景選擇適合的開發(fā)方式。
三、CANN算子編譯運行
算子構成
一個完整的CANN算子包含四部分:?算子原型定義、對應開源框架的算子適配插件、算子信息庫和算子實現。?這四個組成部分會在算子編譯運行的過程中使用。
算子編譯
推理場景下,進行模型推理前,我們需要使用ATC模型轉換工具將原始網絡模型轉換為適配昇騰AI處理器的離線模型,該過程中會對網絡中的算子進行編譯。
訓練場景下,當我們跑訓練腳本時,CANN內部實現邏輯會先將開源框架網絡模型下發(fā)給Graph Engine進行圖編譯,該過程中會對網絡中的算子進行編譯。
CANN算子的編譯邏輯架構如下:
具體的CANN算子編譯流程如下,在編譯流程中會用到上文提到的算子的四個組成部分。
Graph Engine調用?算子插件?,將原始網絡模型中的算子映射為適配昇騰AI處理器的算子,從而將原始開源框架圖解析為適配昇騰AI處理器的圖。
調用算子原型庫校驗接口進行基本參數的校驗,校驗通過后,會根據原型庫中的推導函數推導每個節(jié)點的輸出shape與dtype,進行輸出tensor的靜態(tài)內存的分配。
Graph Engine根據圖中數據將圖拆分為子圖并下發(fā)給FE。FE在處理過程中根據算子信息庫中算子信息找到?算子實現?,將其編譯成算子kernel,最后將優(yōu)化后子圖返回給Graph Engine。
Graph Engine進行圖編譯,包含內存分配、流資源分配等,并向FE發(fā)送tasking請求,FE返回算子的taskinfo信息給Graph Engine,圖編譯完成后生成適配昇騰AI處理器的模型。
算子運行
推理場景下,使用ATC模型轉換工具將原始網絡模型轉換為適配昇騰AI處理器的離線模型后,開發(fā)AscendCL應用程序,加載轉換好的離線模型文件進行模型推理,該過程中會進行算子的調用執(zhí)行。
訓練場景下,當我們跑訓練腳本時,內部實現邏輯將開源框架網絡模型下發(fā)給Graph Engine進行圖編譯后,后續(xù)的訓練流程會進行算子的調用執(zhí)行。
CANN算子的運行邏輯架構如下:
具體流程如下,首先Graph Engine下發(fā)算子執(zhí)行請求給Runtime,然后Runtime會判斷算子的Task類型,若是TBE算子,則將算子執(zhí)行請求下發(fā)到AI Core上執(zhí)行;若是AI CPU算子,則將算子執(zhí)行請求下發(fā)到AI CPU上執(zhí)行。
審核編輯:湯梓紅
?
評論