最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【2023 · CANN訓(xùn)練營(yíng)第一季】課堂筆記3-算子的開(kāi)發(fā)及驗(yàn)證

2023-05-31 01:07 作者:白子不擺爛版  | 我要投稿

【2023 · CANN訓(xùn)練營(yíng)第一季】課堂筆記3-算子的開(kāi)發(fā)及驗(yàn)證

一、動(dòng)態(tài)shape算子與固定shape算子

引入動(dòng)態(tài)shape算子的背景條件:

當(dāng)算子shape固定時(shí),開(kāi)發(fā)者使用不同shape時(shí)需要重新對(duì)算子進(jìn)行編譯,帶來(lái)大量的算子二進(jìn)制文件。

動(dòng)態(tài)shape的算子可以將形狀通過(guò)核函數(shù)的入?yún)魅牒撕瘮?shù)內(nèi),參與內(nèi)部邏輯計(jì)算,從而符合不同shape下的使用場(chǎng)景。

二者對(duì)比:

對(duì)固定算子的修改:

之前的固定算子,按照上節(jié)課的例子,是把數(shù)據(jù)分別分給8個(gè)核進(jìn)行計(jì)算

而轉(zhuǎn)換為動(dòng)態(tài)算子,就需要將這些全局變量,都通過(guò)動(dòng)態(tài)的形式作為可變的變量,這就代表著我們需要將這些全局變量作為入?yún)⑦M(jìn)行輸入進(jìn)來(lái)。

基于現(xiàn)有的固定shape算子,將其改裝為動(dòng)態(tài)shape的算子。將控制形狀的BLOCK DIM,TOTAL_LENGTH,TILE NUM這些變量依靠外界輸入得到,在核

函數(shù)中額外傳入一個(gè)tiling,它將指向控制核函數(shù)邏輯處理的至關(guān)重要的這幾個(gè)變量

1.tiling結(jié)構(gòu)體

根據(jù)上面的信息,我們可以分析得到結(jié)構(gòu)體需要如下的內(nèi)容

  • BLOCK DIM: 并行計(jì)算使用的核數(shù)

  • TOTAL LENGTH: 總共需要計(jì)算的數(shù)據(jù)個(gè)數(shù)

  • TILE NUM:每個(gè)核上計(jì)算數(shù)據(jù)分塊的個(gè)數(shù)

但是前面文章內(nèi)容中我們可以看出,入?yún)⑿枰y(tǒng)一為_(kāi)_gm__ uinit8_t*的形式,于是我們將結(jié)構(gòu)體按照這種指針進(jìn)行傳入后,需要對(duì)該結(jié)構(gòu)體進(jìn)行解析,并

且還要區(qū)分是CPU側(cè)和NPU側(cè)的代碼不同的執(zhí)行

2.核函數(shù)對(duì)比

固定shape算子的核函數(shù)實(shí)現(xiàn):?

動(dòng)態(tài)shape算子的核函數(shù)實(shí)現(xiàn):

如上一小點(diǎn)所說(shuō),實(shí)際函數(shù)設(shè)計(jì)時(shí),我們也需要的是將一些參數(shù)進(jìn)行傳入,并且進(jìn)行解析,這樣可以使我們隨時(shí)改動(dòng)傳入的參數(shù)值

3.Init函數(shù)對(duì)比

在固定算子中,我們做邏輯地址區(qū)別時(shí)的參數(shù)也是由全局變量去決定的

在動(dòng)態(tài)算子中,我們可以在相應(yīng)的類(lèi)中添加一些private的變量,以便可以從類(lèi)中的函數(shù)直接調(diào)用其值

4.不同功能代碼文件的區(qū)別

二、功能調(diào)試方法

TKC++提供孿生調(diào)試技術(shù)即在CPU模式下進(jìn)行運(yùn)實(shí)際上會(huì)創(chuàng)建個(gè)NPU的模型并模擬它的計(jì)算行為以此進(jìn)行業(yè)務(wù)功能的調(diào)試。

相同的算子代碼可以在CPU模式下進(jìn)行精度調(diào)試,并無(wú)縫切換到NPU模式下運(yùn)行

1.使用GDB調(diào)試

相關(guān)命令如下:

2.打印調(diào)試

在CPU代碼側(cè)直接插入C/C++的打印命令,如printf、std::cout,

PS:NPU模式下不支持打印語(yǔ)句,所以需要添加內(nèi)置宏 CCE_KT_TEST 予以區(qū)分

三、測(cè)試驗(yàn)證

1.UT測(cè)試

按照一、4.點(diǎn)的不同功能代碼的功能內(nèi)容,我們可以做按照如下步驟

添加UT測(cè)試步驟:

1.cann_op_contrib/community/ops中新建用例目錄并添加代碼實(shí)現(xiàn)文件

2.cann_op_contrib/community/tests中新建用例目錄并添加代碼測(cè)試文件

3.在cann_op_contrib目錄下執(zhí)行./build.sh -u tik2

2.ST測(cè)試

1.cann_op_contrib/community/ops中新建用例目錄并添加代碼實(shí)現(xiàn)文件

2.cann_op_contrib/community/tests中新建用例目錄并添加代碼測(cè)試文件

3.在cann_op_contrib目錄下執(zhí)行后續(xù)打包算子,安裝部署算子包和編譯并執(zhí)行測(cè)試用例的操作

3.對(duì)部分文件實(shí)現(xiàn)的簡(jiǎn)單講解

(1)op_host/add_tik2_tiling.h

UT測(cè)試代碼的tiling定義:?

改寫(xiě)自動(dòng)態(tài)shape的tiling解析函數(shù):

只保留CPU模式下的處理邏輯,即將傳入的tiling指針轉(zhuǎn)化為tiling的結(jié)構(gòu)體指針

ST測(cè)試代碼的tiling定義:?

提供了基于宏的封裝模式: BEGIN_TILING_DATA_DEF定義了tiling結(jié)構(gòu)體名稱(chēng)

TILING_DATA_FIELD_DEF定義了tiling中的成員變量

END_TILING_DATA DEF是結(jié)束定義的標(biāo)志

REGISTER_TILING_DATA_CLASS完成注冊(cè),將算子類(lèi)型與定義的tiling結(jié)構(gòu)體綁定算子類(lèi)型一般都是核函數(shù)名的大駝峰形式(核函數(shù)名一般為內(nèi)核形式)

(2)op_host/add_tik2.cpp

host側(cè)算子實(shí)現(xiàn)開(kāi)發(fā),包括算子原型注冊(cè)、Shape推導(dǎo)等函數(shù)實(shí)現(xiàn)與注冊(cè)、Tiling實(shí)現(xiàn)與注冊(cè)和信息庫(kù)配置

算子原型注冊(cè)

算子原型描述了算子的輸入輸出,屬性等信息,算子原型注冊(cè)用于將算子注冊(cè)到算子原型庫(kù)中

Shape推導(dǎo)等函數(shù)實(shí)現(xiàn)與注冊(cè)

根據(jù)算子的輸入張量描述、算子邏輯及算子屬性,推理出算子的輸出張量描述,包括張量的Shape、數(shù)據(jù)類(lèi)型及數(shù)據(jù)排布格式等信息。這樣算子構(gòu)圖準(zhǔn)備階段就可以為所有的張量靜態(tài)分配內(nèi)存,避免動(dòng)態(tài)內(nèi)存分配帶來(lái)的開(kāi)銷(xiāo)

推導(dǎo)函數(shù)的實(shí)現(xiàn):

推導(dǎo)函數(shù)的注冊(cè):

Infershape:推理形狀的函數(shù)

InfershapeRange: 推理形狀中每個(gè)維度的范圍的函數(shù)

InferDataType: 推理數(shù)據(jù)類(lèi)型的函數(shù)

Tiling實(shí)現(xiàn)與注冊(cè)

計(jì)算數(shù)據(jù)切分過(guò)程相關(guān)的參數(shù),比如每次計(jì)算的數(shù)據(jù)量大小

TilingFunc: Tiling定義函數(shù)

TilingPrepare: Tiling解析函數(shù)

CheckOpsupport: 算子參數(shù)校驗(yàn)函數(shù)

OP_ADD:注冊(cè)算子的原型定義

Tiling實(shí)現(xiàn):

Tiling注冊(cè):

信息庫(kù)配置(根據(jù)運(yùn)行平臺(tái)進(jìn)行配置)

算子開(kāi)發(fā)者需要通過(guò)配置算子信息庫(kù)文件,將算子在昇騰AI處理器上相關(guān)實(shí)現(xiàn)信息注冊(cè)到算子信息庫(kù)中

(3)run_case.sh與test_add_tik2_data.py

CANN開(kāi)發(fā)套件包中提供了ST測(cè)試工具: msopst,支持生成算子的ST測(cè)試用例并在硬件環(huán)境中執(zhí)行

  • 根據(jù)算子信息庫(kù)定義文件(.ini)生成算子測(cè)試用例定義文件 (.json),作為算子ST測(cè)試用例的輸入

  • 根據(jù)算子測(cè)試用例定義文件生成ST測(cè)試數(shù)據(jù)及測(cè)試用例執(zhí)行代碼,在硬件環(huán)境上執(zhí)行算子測(cè)試用例

  • 自動(dòng)生成運(yùn)行報(bào)表 (st_report.son)功能,報(bào)表記錄了測(cè)試用例信息及各階段運(yùn)行情況

  • 根據(jù)用戶(hù)定義并配置的算子期望數(shù)據(jù)生成函數(shù),回顯期望算子輸出和實(shí)際算子輸出的對(duì)比測(cè)試結(jié)果

(4)add_tik2.json

(5)生成測(cè)試用例與報(bào)告st_report.json

四、性能采集工具-msprof

性能采集步驟:?1.設(shè)置環(huán)境變量(異騰實(shí)際安裝的位置): source /usr/local/Ascend/ascend-toolkit/../set_env.sh

2.測(cè)試NPU模式下的TIK C++算子,保證其精度正確,生成對(duì)應(yīng)的二進(jìn)制可執(zhí)行文件: bash runsh add_tik2 ascend910 Aicore npu

3.使用msprof工具采集性能

4.使用命令(用戶(hù)可以根據(jù)自身的需要靈活組合性能分析指令)

eg:

5.在當(dāng)前目錄會(huì)生成out文件夾,在device_0/summary/op_summary_0_1.csv能夠看到一些具體的數(shù)據(jù)

ps:該文僅是為了記錄CANN訓(xùn)練營(yíng)的學(xué)習(xí)過(guò)程所用,不參與任何商業(yè)用途


【2023 · CANN訓(xùn)練營(yíng)第一季】課堂筆記3-算子的開(kāi)發(fā)及驗(yàn)證的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
雷山县| 雷波县| 安国市| 定州市| 新兴县| 海林市| 西乌| 舟曲县| 怀安县| 利辛县| 宜都市| 高安市| 鄂托克前旗| 平原县| 白山市| 临沭县| 灵石县| 临西县| 南平市| 香港| 会同县| 漠河县| 武汉市| 晋中市| 普陀区| 酒泉市| 景德镇市| 托克逊县| 章丘市| 栾川县| 阜康市| 鲁山县| 郓城县| 策勒县| 铁力市| 克什克腾旗| 海阳市| 遵义县| 塔城市| 大宁县| 南岸区|