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