文集 - 昇騰AI
- 【昇騰開發全流程】MindSpore華為云模型訓練
- 【昇騰開發全流程】AscendCL開發板模型推理
前言
學會如何安裝配置華為云ModelArts、開發板Atlas 200I DK A2。
并打通一個Ascend910訓練到Ascend310推理的全流程思路。
在本篇章,我們首先開始訓練階段!
訓練階段
A. 環境搭建
MindSpore 華為云 模型訓練
Step1 創建OBS并行文件
-
登錄華為云 -> 控制臺 -> 左側導航欄選擇“對象存儲服務 OBS” ->
如下圖所示:
在左側導航欄選擇“桶列表” -> 單擊右上角“創建桶”
-
在左側列表中的“并行文件系統” -> 單擊右上角“創建并行文件系統”。
如下圖所示:
進行以下配置:
主要參數信息如下,其余配置請保持默認配置
區域:選擇“華北-北京四”
文件系統名稱:自定義,本例使用modelarts0009
(請使用modelarts作為文件系統前綴,注意名稱為全局唯一)
數據冗余存儲策略:選擇“單AZ存儲”
策略:選擇“私有”
Step2 上傳數據文件至OBS并行文件系統
-
點擊已創建的并行文件系統 -> 點擊“新建文件夾”
輸入文件夾的名稱,這里命名為input
- 進入該文件夾中 -> 點擊“上傳文件”:
將準備好的項目工程文件壓縮包上傳至該OBS中。
Step3 基于ModelArts創建Notebook編程環境
- 在“全局配置”頁面查看是否已經配置授權,允許ModelArts訪問OBS:
登錄華為云 -> 控制臺 -> 左側導航欄選擇“ModelArts” -> 在左側導航欄選擇“全局配置” -> 單擊“添加授權”
首次使用ModelArts:直接選擇“新增委托”中的“普通用戶”權限A.3.1.jpg
-
登錄華為云 -> 控制臺 -> 左側導航欄選擇“ModelArts” -> 在左側導航欄選擇“開發環境”-> “Notebook” -> 點擊“創建”
進行以下配置:主要參數信息如下,其余配置請保持默認配置
名稱:自定義,本例使用notebook-test
自動停止:自行選擇,本例選擇4小時
鏡像:選擇“公共鏡像”,并選擇“mindspore_1.10.0-cann_6.0.1-py_3.7-euler_2.8.3”
資源類型:選擇“公共資源池”
磁盤規格:使用50GB
Step4 為Notebook編程環境添加訓練階段項目工程文件
-
點擊已創建的Notebook -> “存儲配置” -> “添加數據存儲”
進行以下配置:
本地掛載目錄:自定義創建本地掛載目錄,本例使用/data/input
存儲位置:選擇所創建的并行文件系統(本例選擇已創建的moderarts0009),以及數據集所在的目錄input 返回Notebook界面 -> 點擊“打開”notebook-test ->
打開“Terminal”命令行終端界面 ->
執行以下命令,創建用于測試的test文件
touch /data/input/test
再執行以下命令,可以看到你剛創建的test文件&先前上傳的文件
ls /data/input
-
上傳
這里選擇OBS文件上傳,
因為這里本地上傳限制為100M文件。
- 解壓
打開“Terminal”命令行終端界面 ->
執行以下命令,查看是否在正確的路徑下
pwd
ls -l
執行以下命令,解壓項目工程文件壓縮包
(這里以工業質檢Unet為例,具體代碼可參考文末學習資源推薦)
unzip unet.zip
unzip unet_sdk.zip
-
訓練階段工程目錄結構如下:
├──unet ├──data // 預處理后的數據集文件夾 ├──raw_data // 原始數據集 ├──out_model // 模型導出保存文件夾 ├──pred_visualization // 可視化圖片保存文件夾(需要自己創建) ├──src // 功能函數 │ ├──unet_medical // U-Net網絡 │ ├──unet_nested // U-Net++網絡 │ ├──config.py // 配置文件 │ ├──data_loader.py // 數據加載 │ ├──eval_callback.py // 訓練時評估回調 │ ├──loss.py // 損失函數 │ ├──utils.py // 工具類函數 ├──draw_result_folder.py // 文件夾圖片可視化 ├──draw_result_single.py // 單張圖片可視化 ├──eval.py // 模型驗證 ├──export.py // 模型導出,ckpt轉air/mindir/onnx ├──postprocess.py // 后處理 ├──preprocess.py // 前處理 ├──preprocess_dataset.py // 數據集預處理 ├──train.py // 模型訓練 ├──requirements.txt
-
模型轉換工程目錄結構如下:
├── unet_sdk ├── model │ ├──air2om.sh // air模型轉om腳本 │ ├──xxx.air //訓練階段導出的air模型 │ ├──aipp_unet_simple_opencv.cfg // aipp文件
注:
接下來就可以開始旅程,進入訓練階段。
若中途暫停實驗,記得做停止資源操作,消耗最少費用;
若返回繼續實驗,再次啟動Notebook編程環境;
若完成了本實驗,最后是釋放資源操作,為了停止計費。
一. 配置文件參數和數據預處理
MindSpore 數據集預處理preprocess_dataset.py文件需調用如下腳本:
文件參數腳本src/config.py文件。
文件參數腳本為src/config.py,包括
unet_medical,
unet_nested,
unet_nested_cell,
unet_simple,
unet_simple_coco
共5種配置,表示模型與數據集之間的組合。
包含超參數、數據集路徑等文件參數
Step 運行腳本
新建NoteBook中:查看是否在工程目錄unet/路徑下
!pwd
進入NoteBook中:運行示例
!python3 preprocess_dataset.py --data_url=./data/
其中--data_url:數據集預處理后的保存路徑。
-
預計數據集預處理所需時間約為10分鐘。
輸出結果:
預處理完的數據集會保存在/unet/data/文件夾下。
二. 模型訓練
MindSpore模型訓練 需調用如下腳本:
preprocess_dataset.py:將類coco數據集 轉化成 模型訓練需要數據格式。
src/unet_xxx/:存放 unet/unet++ 模型結構。
src/data_loader.py:存放 數據加載功能函數。
src/eval_callback:存放 cb 函數,用于訓練過程中進行eval.
src/utils.py: mindspore 自定義 cb 函數,自定義 metrics 函數。
train.py
Step 運行腳本
- 進入NoteBook中:運行示例
!python train.py --data_url=./data/ --run_eval=True
其中--data_url: 數據集輸入路徑。
其中--run_eval: True 表示訓練過程中同時進行驗證。
-
預計模型訓練所需時間約為36分鐘。
輸出結果:
三. 模型推理
MindSpore模型推理 需調用如下腳本:
src/unet_xxx/:存放unet/unet++模型結構。
src/data_loader.py:存放數據預處理,數據加載功能函數。
src/utils.py:mindspore自定義cb函數,自定義metrics函數。
eval.py
Step 運行腳本
- 進入NoteBook中:運行示例
!python eval.py --data_url=./data/ --ckpt_path=./ckpt_0/best.ckpt
其中--data_url:數據集輸入路徑。
其中--ckpt_path:ckpt 讀取路徑
-
預計模型推理所需時間約為2分鐘。
輸出結果:
注:
IOU(Intersection over Union)是一個度量函數,
用來描述兩個物體邊界框的重疊程度(取值范圍為[0,1]),
重疊的區域越大,IOU值就越大。
四. 結果可視化
可以通過畫圖的方式將圖像的結果可視化,方便查看。
可視化方法有兩種。
方法一 單張圖片可視化
draw_result_single.py:單張圖片可視化,
輸出單張圖片的裁剪畫圖結果crop_plot.png和模型預測的結果predict_plot.png。
Step 運行腳本
查看工程目錄unet/路徑下
確保已經事先創建好
可視化圖片保存文件pred_visualization文件夾進入NoteBook中:運行示例
!python draw_result_single.py --data_url=./data/SW1hZ2VfMjAyMTA3MjcxNTEzMzYzNzk --save_url=./pred_visualization --ckpt_path=./ckpt_0/best.ckpt
其中--data_url:數據集輸入路徑(到單張圖像)。
其中--save_url:輸出圖像保存路徑。
其中--ckpt_path:ckpt讀取路徑。
-
單張圖片可視化所需時間約為1分鐘。
輸出結果:
可視化完的圖片會保存在/unet/pred_visualization文件夾下。
方法二 文件夾圖片可視化
draw_result_folder.py:文件夾圖片可視化,
輸出文件夾內圖片的模型預測結果predict.png。
Step 運行腳本
查看工程目錄unet/路徑下
確保已經事先創建好
可視化圖片保存文件pred_visualization文件夾進入NoteBook中:運行示例
!python draw_result_folder.py --data_url=./data/ --save_url=./pred_visualization --ckpt_path=./ckpt_0/best.ckpt
其中--data_url:數據集輸入路徑(到圖像文件夾)。
其中--save_url:輸出圖像保存路徑。
其中--ckpt_path:ckpt讀取路徑。
-
文件夾圖片可視化所需時間約為10分鐘。
輸出結果:
可視化完的圖片會保存在/unet/pred_visualization文件夾下。
4(4).png
五. 模型保存
如果想在昇騰AI處理器上執行推理,
可以通過網絡定義和CheckPoint生成AIR格式模型文件。
Step 運行腳本
- 進入NoteBook中:運行示例
!python export.py --ckpt_file="./ckpt_0/best.ckpt" --width=960 --height=960 --file_name="out_model/unet_hw960_bs1" --file_format="AIR"
其中–-ckpt_file: ckpt路徑。
其中--width: 模型輸入尺寸。
其中--height: 模型輸入尺寸。
其中--file_name: 輸出文件名。
其中--file_format: 輸出格式,必須為[“ONNX”, “AIR”, “MINDIR”]。
-
模型保存即導出模型的輸出結果在out_model/unet_hw960_bs1.air
右鍵 -> Download
最后將導出的模型下載至本地,供后續推理階段實驗使用:
5.png
六. 模型轉換
此處模型轉換需要用到ATC工具。
詳細內容&錯誤碼請參考昇騰官網文檔-使用ATC工具轉換模型
Step1 上傳air模型
- 將訓練階段實驗模型保存的air模型上傳至華為云ModelArts的unet_sdk/model/目錄下
這里因為模型中有optype[ArgMaxD],
因此需要在Ascend910系列芯片上執行模型轉換才能成功。
(此次華為云ModelArts使用的正是Ascend910A)
而一般情況,模型訓練完進行的模型轉換是可以選擇
在開發者套件(Ascend310系列芯片)和Ubuntu系統中執行的。
(具體方法請參考昇騰官網文檔-轉換模型)
Step2 模型轉換命令
-
打開unet_sdk/model/air2om.sh文件
使用atc命令如下,可根據實際開發情況進行修改。atc --framework=1 --model=unet_hw960_bs1.air --output=unet_hw960_bs1 --input_format=NCHW --soc_version=Ascend910A --log=error --insert_op_conf=aipp_unet_simple_opencv.cfg
本實驗將訓練階段實驗模型保存的air模型轉為昇騰Al處理器支持的om格式離線模型
注意:air 模型轉 om 只支持靜態 batch,這里 batchsize=1。
其中--framework:原始框架類型。
其中--model:原始模型文件路徑與文件名。
其中--output:轉換后的離線模型的路徑以及文件名。
其中--input_format:輸入數據格式。
其中--soc_version:模型轉換時指定芯片版本。
(這句話指的是當前執行模型轉換時候所在機器的芯片版本,
可通過命令行終端輸入npu-smi info
查看)
其中--log:顯示日志的級別。
其中--insert_op_conf:插入算子的配置文件路徑與文件名
(這里使用AIPP預處理配置文件,用于圖像數據預處理)
Step3 運行腳本
確保在工程目錄unet_sdk/model/路徑下,首先查看文件權限
ls -l
(如果文件權限列中沒有x,你才需要繼續下一命令賦予它執行權限)
輸入
chmod +x air2om.sh
運行示例
輸入
./air2om.sh
-
輸出結果:6.png
注:
到此我們在華為云上使用MindSpore的訓練階段實驗就結束了。
有了導出的air模型及其模型轉換出的om模型,我們就可以繼續進入下一篇章:AscendCL推理階段。
結束后記得及時關閉云上環境,避免資源浪費和產生額外的費用!!!
學習資源推薦
-
昇思官網
GitHub代碼倉mindspore-ai / models
https://github.com/mindspore-ai/models/tree/master/official/cv