CANN訓練營第四期】如何在AI1S云服務上基于ACL實現單算子調用

      網友投稿 963 2022-05-30

      剛剛結束的CANN訓練營第四期,大毛老師第三課的大作業題目如下:

      1.在昇騰算子庫中選一個算子實現單算子調用(om方式),并且功能正常,結果正確;10分

      加分項

      1.與原始框架算子做了精度對比分析; ? ?5分

      2.與原始框架算子做了性能對比分析; ? ?5分

      3.單算子調用用aclcompileandexecute方式實現并且功能正常,結果正確 ? ?5分

      4.將單算子調用應用到了實際應用場景中,形成了一個完整的應用案例; ?5分

      5.發現問題后提issue到samples倉并最終被確認為版本問題; ?5分

      ?注意點:

      1.不得與社區樣例代碼相同或與其他參與者的代碼相同,一經發現,提交時間較晚的ID直接記0分

      2.不可執行的代碼不給分

      3.作業最終得分會綜合代碼質量、README質量(README十分重要,如果按照README進行操作,過程不夠絲滑,或者有步驟缺失,可能會扣分甚至沒分的哦)

      4.如果在做作業的過程中有疑問或者發現一些版本問題,鼓勵大家在samples倉提issue,如果發現有版本問題阻塞你完成作業,可以提issue并換一個算子嘗試,鼓勵大家幫忙發現版本問題。

      我們來看看怎么做這個題目。

      首先,張小白在 張小白教你在AI1S云服務器上安裝昇騰CANN5.0.4 https://bbs.huaweicloud.com/blogs/320903

      這篇博客里面介紹了如何安裝CANN 5.0.4的版本,現在我們就基于這個版本, 來看看如何在推理服務器AI1S上完成單算子的調用。

      (所謂的推理服務器這里指的是基于昇騰Ascend310的云服務器)

      一、跑通樣例工程 om+aclopExecuteV2 (conv2d算子)

      首先,使用MobaXTerm登陸 前面鏈接安裝好CANN 5.0.4的云服務器

      下載樣例代碼:

      wget https://obs-book.obs.cn-east-2.myhuaweicloud.com/aclopsamples/aclop_samples.tar.gz

      解壓:tar -zxvf aclop_samples.tar.gz

      。。。

      解壓后有兩個目錄:

      conv2d_aclopExecuteV2是使用om模型+aclopExecuteV2的方式完成單算子計算;

      conv2d_aclopCompileAndExecute是直接使用aclopCompileAndExecute的方式完成單算子計算。

      我們先跑通第一個樣例:

      cd conv2d_aclopExecuteV2/out

      執行單算子代碼:test.sh

      它會自動下載和安裝tensorflow1.15.

      這里首先報了個找不到libmsprof.so的錯,這個應該是profiling腳本對應的路徑不對,待會兒再說。

      但是這個下載的速度往往會很慢,所以可以暫停掉這個腳本,手工指定pip源安裝tensorflow1.15.

      pip3 install tensorflow==1.15.0 --user? -i https://pypi.tuna.tsinghua.edu.cn/simple

      但是這個結果有很大的問題。矩陣的結果應該是全0才對。

      經過咨詢CANN的大毛老師和句號老師,確認在CANN 5.0.4環境裝完之后,變量存在問題,需要把~/.bashrc文件中 setenv.sh后面的環境變量都注釋掉方可正常運行:

      另外,前面提到的msprof.py找不到的問題,我們來找一下:

      所以,需要把 /home/HwHiAiUser/aclop_samples/conv2d_aclopExecuteV2/out 目錄下的 parse_profiling.sh代碼做對應的修改:

      (當然后面會發現,這樣的修改還是不夠的。但是至少現在跑能把代碼跑通)

      張小白在這里簡單的介紹一下的大致流程:

      1.隨機產生2個輸入數據和1個輸出數據(貌似輸出數據沒用),并將輸入數據和輸出數據寫入文件

      2.使用src/main.cpp編譯好的 out/main代碼完成單算子的可執行代碼

      3.執行Tensorflow 1.15同樣的conv算子代碼computebytf.py,這個代碼中會比較兩個結果的異同。如果結果相同,那么就會顯示全0(故而前面算出一大堆非0數據就說明算子計算的結果不一致)

      4.處理profiling文件供性能分析。

      我們還需要修改一下src/CMakeList.txt文件:

      將生成文件的目錄改為 ../out

      將include的路徑加上 ?/home/HwHiAiUser/Ascend/ascend-toolkit/latest/x86_64-linux/fwkacllib/include/

      將libpath的路徑加上 /home/HwHiAiUser/Ascend/ascend-toolkit/latest/x86_64-linux/fwkacllib/lib64/stub/

      如下所示:

      先來編譯

      cmake .

      make clean

      make

      我們來運行一下:

      cd /home/HwHiAiUser/aclop_samples/conv2d_aclopExecuteV2/out

      bash test.sh

      結果是全0,表示昇騰算子跟tensorflow算子算出的是一樣的。

      當然,最后一句還是錯誤的。

      經過句號老師的解釋,5.0.4版本的msprof,必須寫PROF開頭的目錄名稱。而不能寫 .(當前目錄)作為參數名稱。

      根據前面生成的目錄名稱:

      修改如下:

      再單獨執行一下:

      但是其實這個shell是有問題的。因為每次執行bash test.sh之后,都會生成一個新的PROF開頭的目錄,而這個shell不能反復地去修改這個目錄名稱吧?所以我們只好暫時把問題放到一邊。

      二、跑通樣例工程 aclopCompileAndExecute (conv2d算子)

      再看看第二種:conv2d_aclopCompileAndExecute的用法:

      cd /home/HwHiAiUser/aclop_samples/conv2d_aclopCompileAndExecute/out

      先把代碼清理下:

      rm -rf PROF*

      rm -rf *.in *.out

      rm -f main main_om

      cd ../src

      將CMakeList.txt做同樣的修改。

      cmake .

      make clean

      make

      cd /home/HwHiAiUser/aclop_samples/conv2d_aclopCompileAndExecute/out

      執行單算子代碼:

      除了之后解析profiling的問題,前面都是OK的。

      當然,也可以像上面一樣修正下 parse_profiling.sh:

      然后手工執行一次:

      這個profiling以后再說。

      從現象上看,樣例代碼都跑完了。

      三、跑通作業 om+aclopExecuteV2 (sub算子)

      那么,這個作業到底怎么做呢?我們來找一個 Ascend和TF都有的算子做作業吧.

      打開

      https://support.huaweicloud.com/oplist-cann504alpha3infer/atlas_11_operatorlist_0001.html

      查看CANN的310算子清單:

      下載后是個chm文件(HTML幫助文件).這么老的格式貌似已經不容易打開了:

      打開 https://support.huaweicloud.com/oplist-cann504alpha3infer/operatorlist_0070.html

      找到支持TF1.15的算子清單

      挑一個樣例工程中沒有的.

      找一個Maxinum吧.

      前面那個CHM文檔看不到右邊具體內容,經姐夫丁大大提醒,,需要右鍵屬性->解鎖..

      于是打開了相關的算子介紹頁面:

      當然,張小白感覺到Maxinum算子可能有點難度,就選擇了比較簡單的sub算子,對應TF里面是subtract算子。

      怎么做呢?其實就是個依葫蘆畫瓢的過程:

      先將conv2d_aclopExecuteV2 代碼復制一份,更名為sub_aclopExecuteV2

      cp -r conv2d_aclopExecuteV2 sub_aclopExecuteV2

      用om轉為離線模型,調用(atc-》加載aclopSetMdelDir/aclopLoad->執行aclopExecuteV2 這種方法做一下

      先進入model目錄,清理下:

      然后將op_list.json改為以下內容:

      先用小的shape試一下.

      從原理上說,

      Sub(x,y)=x-y

      Sub的算法是支持float16, float32和int32三種數據類型.

      輸入時2個參數,輸出1個參數

      算子輸入支持所有shape,輸出shape與輸入shape相同

      算子輸入支持的format為:NCHW,NC1HWC0,NHWC,ND。

      我們就用float16做一個轉換試試:

      atc --singleop=./op_list.json --output=./ --soc_version=Ascend310

      單算子om文件已經生成(文件名挺長的)

      再切換到 /home/HwHiAiUser/aclop_samples/sub_aclopExecuteV2/ 目錄

      make clean

      rm cmake_install.cmake CMakeCache.txt

      rm -rf CMakeFiles

      切換到 /home/HwHiAiUser/aclop_samples/sub_aclopExecuteV2/src 目錄

      make clean

      rm cmake_install.cmake CMakeCache.txt

      rm -rf CMakeFiles

      這里的目的是將conv2d的代碼編譯的結果清理下.

      我們開始修改下main.cpp代碼.

      主要原則是將conv2d的代碼改為sub的代碼.

      都是2個輸入,1個輸出.就是shape不一樣,而且沒有attr,其實也比較好改:

      然后我們開始編譯目標代碼:

      cmake .

      make clean

      make

      將out目錄也清理一下:

      rm -rf PROF*

      rm -f *.in

      將test代碼加上一些計時處理,并將生成隨機數的shape按照main.cpp對應的shape調整一下:

      同理修改parse_profiling文件(以后不再贅述)

      執行一下看看:

      從前面的代碼可以看出,SUB(X-Y)是tensorflow算子算出的結果,C是昇騰算子計算后保存到文件再讀出來的結果,兩個是一模一樣的。

      這就順利跑完了 om+aclopExecuteV2的例子。

      四、跑通作業 aclopCompileAndExecute (sub算子)

      同樣先修改主程序main.cpp

      cd /home/HwHiAiUser/aclop_samples/sub_aclopCompileAndExecute/src

      vi main.cpp

      像上個例子一樣的方式清理環境之后,開始編譯:

      切換到out目錄:

      cd /home/HwHiAiUser/aclop_samples/sub_aclopCompileAndExecute/out

      同樣修改test.sh

      這回簡單點,不加計時的語句了:

      開始驗證:

      除了profiling處理,執行是沒有問題的。

      這其實就已經把作業大致完成了。

      對于profiling的問題,其實可以提一個issue。以前版本可以解析當前目錄下的相關記錄,生成profiling分析數據,現在需要寫死目錄名方可。這確實是一種退步,也不知道CANN團隊是怎么想的。。因為每次生成的目錄名都在變,我這個shell怎么寫才能捕捉每次的變化目錄名?

      好吧。先這樣吧。張小白先大體上完成這個作業,還有其他的事情要做呢。

      【CANN訓練營第四期】如何在AI1S云服務上基于ACL實現單算子調用

      (全文完,謝謝閱讀)

      Ubuntu 昇騰

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:【ESWIN實習】第一次培訓筆記(寧宇leader主講)
      下一篇:【軟件工具使用】高效使用VScode工具
      相關文章
      亚洲av中文无码乱人伦在线r▽| 国产亚洲精品无码拍拍拍色欲| 国产亚洲精品自在线观看| 亚洲欧洲无卡二区视頻| 色婷五月综激情亚洲综合 | 亚洲视频免费在线播放| 婷婷亚洲综合五月天小说| 亚洲AV无码一区二区乱子伦 | 国产性爱在线观看亚洲黄色一级片| 亚洲AV中文无码乱人伦在线视色| 激情无码亚洲一区二区三区| 亚洲精品无码mⅴ在线观看| 亚洲成av人片在线天堂无| 亚洲AV无码一区二区三区网址| 亚洲精品久久无码| 日韩国产欧美亚洲v片| 麻豆亚洲AV成人无码久久精品| 国产精品亚洲综合网站| 亚洲国产一区二区视频网站| 亚洲精品一级无码鲁丝片| 国产亚洲精品成人a v小说| 亚洲无av在线中文字幕| 亚洲中文字幕无码av在线| 亚洲另类精品xxxx人妖| 波多野结衣亚洲一级| 亚洲国产成人久久综合| 亚洲成a人片在线播放| www亚洲一级视频com| 亚洲中文字幕丝袜制服一区| 亚洲av无码成人精品区一本二本| 韩国亚洲伊人久久综合影院| 亚洲成av人片一区二区三区| 国产亚洲成归v人片在线观看| 色久悠悠婷婷综合在线亚洲| 亚洲AV无码成人精品区天堂| 久久亚洲AV无码精品色午夜麻豆 | 亚洲国产精品激情在线观看 | 亚洲精品美女久久777777| 亚洲av片劲爆在线观看| 亚洲乱码日产精品BD在线观看| 亚洲 日韩 色 图网站|