【2023 · CANN訓(xùn)練營第一季】——Ascend C算子沙箱實驗

前言:CANN 訓(xùn)練營的Ascend?C算子課程,以在線課程的方式提供了一個沙箱實驗環(huán)境。這將有助于幫助開發(fā)者了解Ascend?C算子開發(fā)的軟、硬件環(huán)境;熟悉自定義Ascend C算子的開發(fā)流程和關(guān)鍵代碼;同時也可以了解到自定義算子包的部署路徑及部署后的各類文件。

在線試驗地址:在線實驗>基于昇騰CANN的Ascend C算子開發(fā)

https://www.hiascend.com/zh/edu/experiment/operation/Tik_xl

配套課程地址:CANN訓(xùn)練營2023年第一季_TIK C++算子開發(fā)入門

https://www.hiascend.com/zh/developer/courses/detail/1627494761683783682

一、系統(tǒng)環(huán)境

1、硬件芯片:昇騰910A

2、CANN版本

3、算子開發(fā)包

二、算子實現(xiàn)分析

????沙箱實驗,實現(xiàn)的是動態(tài)shape的add的Ascend?C算子。

一)配置環(huán)境

二)下載代碼包

樣例工程關(guān)鍵目錄和文件的用途如下所示:

三)代碼分析及補全

1、kernel側(cè)代碼

????????實現(xiàn)代碼在算子工程的/ai_core/op_kernel/add_tik2.cpp中。

?1)算子類——init()

???2)算子類——process()及3個基本任務(wù)CopyIn,Compute,CopyOut

????????基于矢量編程范式,將核函數(shù)的實現(xiàn)分為3個基本任務(wù):CopyIn,Compute,CopyOut。Process函數(shù)中通過如下方式調(diào)用這三個函數(shù)。


????CopyIn:使用DataCopy接口將GlobalTensor數(shù)據(jù)拷貝到LocalTensor;使用EnQue將LocalTensor放入VecIn的Queue中。

?Compute:使用DeQue從VecIn中取出LocalTensor;使用Ascend C算子接口Add(2級接口)完成矢量計算;使用EnQue將計算結(jié)果LocalTensor放入到VecOut的Queue中。

????CopyOut:使用DeQue接口從VecOut的Queue中取出LocalTensor;使用DataCopy接口將LocalTensor拷貝到GlobalTensor上。

2、host側(cè)代碼

????host側(cè)算子實現(xiàn)開發(fā),包括算子原型注冊、Shape推導(dǎo)等函數(shù)實現(xiàn)與注冊、Tiling實現(xiàn)與注冊和信息庫配置。實現(xiàn)代碼在算子工程的/ai_core/op_host/add_tik2.cpp中。

????????1)算子原型注冊:

????2)Shape推導(dǎo)等函數(shù)實現(xiàn)與注冊:

????3)Tiling實現(xiàn)與注冊:

????????4)信息庫配置及算子注冊:

四)UT測試

???????UT的本質(zhì)是使用內(nèi)核調(diào)用符測試CPU模式下的Ascend C算子的用例,在算子工程UT測試目錄下的add_tik2_ut.cc文件,增加CPU側(cè)算子調(diào)用代碼如下:

????????運行指令:

????????????cd $HOME/cann_op_contrib/ ./build.sh -u tikcpp

????????運行結(jié)果:

五)編譯部署

1、算子包打包

????進(jìn)入cann_op_contrib算子工程目錄,執(zhí)行算子包打包腳本,命令如下:

????????cd $HOME/cann_op_contrib/

????????./pack.sh

????????打包成功后,會在當(dāng)前目錄下創(chuàng)建output目錄,并在output目錄下生成自定義算子安裝包CANN_OP_CONTRIB_linux-aarch64.run。


2.?自定義算子安裝包部署

????????以運行用戶執(zhí)行如下命令,安裝自定義算子包。

????????cd $HOME/cann_op_contrib/output

????????./CANN_OP_CONTRIB_linux-aarch64.run --install

????????命令執(zhí)行成功后,自定義算子包中的相關(guān)文件會部署當(dāng)前環(huán)境中。默認(rèn)安裝路徑是tool-kit的“opp/vendors/”目錄下,沙箱中的路徑為:

/usr/local/Ascend/ascend-toolkit/latest/opp/vendors

? ? ????目錄結(jié)構(gòu)與自定義TBE算子基本一致,在算子實現(xiàn)代碼部分,多了cpp格式的實現(xiàn)代碼。

六)ST測試

????????ST的本質(zhì)是創(chuàng)建ACL應(yīng)用程序測試NPU模式下的Ascend C算子用例,將開發(fā)好的算子,編譯好后,打包成自定義算子包,部署到系統(tǒng)中。

????通過msopst工具,將用戶定義的ST測試配置的*.json生成單算子的om文件,使用AscendCL接口加載單算子模型文件并執(zhí)行單算子om文件,驗證算子執(zhí)行結(jié)果的正確性。

1、在算子工程ST測試目錄下的add_tik2.json增加測試用例

2、配置ST測試用例編譯所需環(huán)境變量

ST測試的實質(zhì)是,使用AscendCL接口加載單算子模型文件并執(zhí)行,所以生成并編譯ST測試用例前需要配置AscendCL應(yīng)用編譯所需的環(huán)境變量,如下所示:

export?DDK_PATH=/usr/local/Ascend/ascend-toolkit/latest

export?NPU_HOST_LIB=/usr/local/Ascend/ascend-toolkit/latest/runtime/lib64/stub

3、使用msopst工具,生成并執(zhí)行ST測試用例

cd /usr/local/Ascend/ascend-toolkit/latest/python/site-packages/bin/

./msopst run -i $HOME/cann_op_contrib/community/tests/add_tik2/st/add_tik2.json -soc Ascend910A -out $HOME/out

執(zhí)行結(jié)果:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容