從零教你使用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%。

 

點擊關注,第一時間了解華為雲新鮮技術~