從零教你使用MindStudio進行Pytorch離線推理全流程
摘要:MindStudio的是一套基於華為自研昇騰AI處理器開發的AI全棧開發工具平台,該IDE上功能很多,涵蓋面廣,可以進行包括網路模型訓練、移植、應用開發、推理運行及自定義運算元開發等多種任務。
本文分享自華為雲社區《使用MindStudio進行Pytorch離線推理全流程》,作者:yd_281378454。
1 MindStudio環境搭建
本次實驗在MindStudio上進行,請先按照教程 配置環境,安裝MindStudio。
MindStudio的是一套基於華為自研昇騰AI處理器開發的AI全棧開發工具平台,該IDE上功能很多,涵蓋面廣,可以進行包括網路模型訓練、移植、應用開發、推理運行及自定義運算元開發等多種任務。MindStudio除了具有工程管理、編譯、調試、運行等一般普通功能外,還能進行性能分析,運算元比對,可以有效提高工作人員的開發效率。除此之外,MindStudio具有遠端環境,運行任務在遠端實現,對於近端的個人設備的要求不高,用戶交互體驗很好,可以讓我們隨時隨地進行使用。
2 VPN安裝和配置
安裝好MindStudio後,需要配置遠程環境。請按照教程進行VPN客戶端的安裝與配置。安裝好VPN後,可以先在終端用ssh指令測試連接。(這一步是驗證網路連接是否可用,也可以跳過)
3 創建推理工程
打開MindStudio,點擊New Project,進入新建工程介面。選擇Ascend APP。填入項目名spnasnet_100。首次新建訓練工程時,需要配置CANN的版本。點擊Change。
點擊 + 配置遠程連接,然後根據選項填入自己伺服器的ip地址、埠號、用戶名和密碼等。
配置Remote CANN location。該參數需要填入ascend-toolkit在伺服器上的路徑地址。在這裡,我們toolkit的路徑如下:/usr/local/Ascend/ascend-toolkit/5.1.RC1。點擊finishing進行配置。初次配置時時間稍長,請耐心等待。
點擊Next,選擇Pytorch Project。
點擊Finish,完成工程創建,進入工程主介面。
4 配置SSH和Deployment
在MindStudio的遠程服務中,定義了SSH 配置和Deployment兩個概念。前者SSH 配置類似MobaxTerm中的Session的概念,用戶可以保存多個遠程伺服器的連接配置。後者Deployment管理遠程開發時的本地文件與遠程文件的同步。配置好Deployment後,我們就可以像使用本地python環境一樣去使用遠程的python環境了。點擊File -> Settings -> Tools,即可看到兩個設置的入口,下面分別介紹如何配置他們。
4.1 配置SSH
首先點擊SSH Configurations,再點擊 + 配置遠程連接,然後根據選項填入自己伺服器的ip地址、埠號、用戶名和密碼等。測試成功點擊Apply即可保存配置,以後就可以一鍵連接啦!
4.2 配置Deployment
Deployment配置能夠更精準地連接遠程服務,它需要選擇一個SSH連接定位遠程主機,然後設置本地與遠程項目目錄的對應關係。如下圖所示創建一個新的Deployment。
如圖310是我創建的Deployment名字,首先選擇連接哪一個SSH服務,然後測試連接是否可用。
下一步,設置項目目錄映射關係,點擊Mappings,然後選擇本地的項目目錄和遠程的項目目錄(最好是提前創建好文件夾),接下來跑程式碼的時候MindStudio會保證這兩個目錄文件的同步。
配置好Mappings後,建議配置Excluded Paths,因為MindStudio的默認同步行為會把Mappings對應目錄的文件保持完全相同,這意味著只存在於遠程的數據集文件夾會被刪除(如果本地沒有數據集)。在此我配置了幾個需要排除的文件夾目錄。
5 配置遠程python解釋器
現在,SSH和Deployment的映射關係已經配置好了,但是MindStudio還不知道python解釋器的位置。因此,下面將介紹如何配置python解釋器。
點擊File -> Project Structure->SDKs可以看到如圖所示的介面。點擊+號,可以新增python SDK和JDK。這裡只演示Python的添加方法。
點擊Add Python SDK後,將彈出下圖所示的介面,點擊左側的SSH Interpreter,如下圖所示,首先選擇使用哪一個Deployment,這是剛剛我們配置過的。然後選擇python解釋器的路徑。圖中的路徑是MindStudio自動檢測出來的,但一般需要自己找自己的Python環境安裝目錄。如果是conda環境,可以使用which python找到python的安裝路徑。
然後點擊Project,選擇剛才添加到MindStudio中的python解釋器,將其作為本項目使用的解釋器。
6 數據集準備
6.1 數據預處理
上傳好數據集以後,執行 preprocess_spnasnet_100_pytorch.py腳本,生成數據集預處理後的bin文件。
第一個參數為原始數據驗證集(.jpeg)所在路徑,第二個參數為輸出的二進位文件(.bin)所在路徑。每個影像對應生成一個二進位文件。
MindStudio會首先上傳本地文件到遠程伺服器,將本地的文件同步到遠程這個過程可能很慢,同步完成後開始運行Python程式碼,MindStudio會實時地在控制台列印輸出:
6.2 生成數據集info文件
執行get_info.py腳本,生成數據集資訊文件。
第一個參數為模型輸入的類型,第二個參數為生成的bin文件路徑,第三個為輸出的info文件,第四、第五個為寬高資訊。執行結果:
7 模型轉換
本模型基於開源框架PyTorch訓練的spnasnet_100進行模型轉換。先使用PyTorch將模型權重文件.pth轉換為.onnx文件,再使用ATC工具將.onnx文件轉為離線推理模型文件.om文件。
首先獲取權重文件。單擊Link在PyTorch開源框架獲中取經過訓練的spnasnet_100權重文件model_best.pth.tar,源碼中已提供下載權重文件。
7.1 導出onnx文件
使用pthtar2onnx.py腳本將.pth文件轉換為.onnx文件
7.2 導出om文件
從onnx轉為om需要用atc工具,MindStudio提供了atc工具的窗口化應用,它會根據用戶選擇自動生成atc指令。Model Converter的入口如圖所示:
選擇onnx模型路徑,模型輸出名稱,目標設備,輸入格式和batchsize等資訊。
MindStudio自動生成如下atc指令,用戶可以在此做最後的校驗,點擊Finish即可開始進行模型轉換。
模型轉換成功:
8 模型推理
使用benchmark工具進行推理。這個和前面的python腳本不同,它在MindStudio中屬於ACL應用,可以如圖所示創建應用:
點擊 + 號,再點擊Ascend App:
然後進行如下配置:
參數詳情請參見《CANN推理benchmark工具用戶指南》 。推理後的輸出默認在當前目錄result下。
執行結果:
運行出錯:error while loading shared libraries: libascendcl.so: cannot open shared object file: No such file or directory.
這個錯誤是因為沒有配置好環境變數。因為我們在終端運行它時,一般要先執行一下:source /usr/local/Ascend/ascend-toolkit/set_env.sh,這一步操作在MindStudio中可以通過如圖所示的方法配置環境變數解決:
變數內容就是/usr/local/Ascend/ascend-toolkit/set_env.sh的內容,讀者可以直接複製使用。
LD_LIBRARY_PATH=/usr/local/Ascend/ascend-toolkit/latest/lib64:/usr/local/Ascend/ascend-toolkit/latest/lib64/plugin/opskernel:/usr/local/Ascend/ascend-toolkit/latest/lib64/plugin/nnengine:$LD_LIBRARY_PATH;PYTHONPATH=/usr/local/Ascend/ascend-toolkit/latest/python/site-packages:/usr/local/Ascend/ascend-toolkit/latest/opp/op_impl/built-in/ai_core/tbe:$PYTHONPATH;PATH=/usr/local/Ascend/ascend-toolkit/latest/bin:/usr/local/Ascend/ascend-toolkit/latest/compiler/ccec_compiler/bin:$PATH;ASCEND_AICPU_PATH=/usr/local/Ascend/ascend-toolkit/latest;ASCEND_OPP_PATH=/usr/local/Ascend/ascend-toolkit/latest/opp;TOOLCHAIN_HOME=/usr/local/Ascend/ascend-toolkit/latest/toolkit;ASCEND_HOME_PATH=/usr/local/Ascend/ascend-toolkit/latest
設置變數後,再次啟動運行,可以在控制台看到,在執行benchmark前,會首先export環境變數。
修改後程式碼運行成功:
可以獲得batch16 310單卡吞吐率為1379.94×4 = 5519.76 fps
9 精度驗證
調用vision_metric_ImageNet.py腳本與數據集標籤val_label.txt比對,可以獲得Accuracy Top5數據,結果保存在result.json中。
第一個參數為生成推理結果所在路徑,第二個參數為標籤數據,第三個參數為生成結果文件路徑,第四個參數為生成結果文件名稱。
獲得精度數據如下:310 Top1 accuracy為74.2%,Top5 accuracy為91.94%。