首頁>技術>

​​摘要:以單運算元開發為例,帶你瞭解運算元開發及測試全流程。

為什麼要自定義運算元

深度學習演算法由一個個計算單元組成,我們稱這些計算單元為運算元(Operator,簡稱Op)。運算元是一個函式空間到函式空間上的對映O:X→X;從廣義上講,對任何函式進行某一項操作都可以認為是一個運算元。於我們而言,我們所開發的運算元是網路模型中涉及到的計算函式。在Caffe中,運算元對應層中的計算邏輯,例如:卷積層(ConvolutionLayer)中的卷積演算法,是一個運算元;全連線層(Fully-connectedLayer, FC layer)中的權值求和過程,也是一個運算元。

Ascend 模型轉換導航

絕大多數情況下,由於昇騰AI軟體棧支援絕大多數運算元,開發者不需要進行自定義運算元的開發,只需提供深度學習模型檔案,透過離線模型生成器(OMG)轉換就能夠得到離線模型檔案,從而進一步利用流程編排器(Matrix)生成具體的應用程式。既然如此,為什麼還需要自定義運算元呢?這是因為在模型轉換過程中出現了運算元不支援的情況,例如昇騰AI軟體棧不支援模型中的運算元、開發者想修改現有運算元中的計算邏輯、或者開發者想自己開發運算元來提高計算效能,這時就需要進行自定義運算元的開發了。

TBE運算元開發流程

昇騰AI軟體棧提供了TBE運算元開發框架,開發者可以基於此框架使用Python語言開發自定義運算元。首先,我們來了解一下什麼是TBE。TBE的全稱為Tensor Boost Engine,即張量加速引擎,是一款華為自研的運算元開發工具,用於開發能夠執行在NPU(Neural-network Processing Unit:神經網路處理器)上的TBE運算元,該工具是在業界著名的開源專案TVM(Tensor Virtual Machine)基礎上擴充套件的,提供了一套Python API來實施開發活動。在本次開發實踐中,NPU特指昇騰AI處理器。

透過TBE進行運算元開發的方式有兩種:特定域語言開發(DSL開發)和TVM原語開發(TIK開發)。DSL開發相對簡單,適用於入門級的開發者。其特點是TBE工具提供自動最佳化機制,給出較優的排程流程,開發者僅需要了解神經網路和TBE DSL相關知識,便可指定目標生成程式碼,進一步被編譯成專用核心。TIK開發難度較高,適用於對於TVM程式設計及達芬奇結構都非常瞭解的開發者使用。這種方式的介面偏底層,需開發者自己控制資料流及運算元的硬體排程。作為入門課程,我們這次使用的DSL開發方式。

TBE運算元開發流程

接下來,我們就以一個簡單的單運算元開發為例,瞭解一下開發過程。

目標:

用TBE-DSL方式開發一個Sqrt運算元

確定運算元功能:

Sqrt運算元功能是對Tensor中每個原子值求開方,數學表示式為y=√x

確定使用的計算介面:

根據當前TBE框架可支援的計算描述API,可採用如下公式來表達Sqrt運算元的計算過程

運算元程式碼的實現可分為以下步驟:

1、運算元入參

shape:Tensor的屬性,表示Tensor的形狀,用list或tuple型別表示,例如(3, 2, 3)、(4, 10);

dtype:Tensor的資料型別,用字串型別表示,例如“float32”、“float16”、“int8”等。

2、輸入Tensor佔位符

data = tvm.placeholder(shape, name="data", dtype=input_dtype)

tvm.placeholder()是TVM框架的API,用來為運算元執行時接收的資料佔位,通俗理解與C語言中%d、%s一樣,返回的是一個Tensor物件,上例中使用data表示;入參為shape,name,dtype,是為Tensor物件的屬性。

3、定義計算過程

4、定義排程過程

5、運算元構建

6、測試驗證

誒等一等,還沒結束呢。只有在模擬環境中驗證了運算元功能的正確性,自定義運算元的開發才算完成。

ST測試流程

我們需要用ST測試(即System Test系統測試)在模擬環境中測試運算元邏輯的正確性以及能否正確地生成.o和.json檔案。想知道具體是怎麼測試的嗎?與其看一大段枯燥的文字描述,不如來沙箱實驗室(https://lab.huaweicloud.com/testdetail.html?testId=462?utm_source=jinritoutiao&utm_medium=bbs-ex&utm_campaign=other&utm_content=content)親自體驗一番,一定更加直觀。

讀到這裡,你是不是對自己的自定義運算元開發能力更加有信心了?何不來華為雲學院學課程、做實驗、考證書來驗證一下呢?喏,就是這門微認證啦:基於昇騰AI處理器的運算元開發(https://edu.huaweicloud.com/certifications/a64f47428cdb425294f1dd3a8d0c9e98?utm_source=jinritoutiao&utm_medium=bbs-ex&utm_campaign=other&utm_content=content)

9
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 不可置信!SQL 最佳化終於幹掉了“distinct”