摘要:MindStudio提供精度比對功能,支持Vector比對能力,
本文分享自華為云社區《【MindStudio訓練營第一季】MindStudio 高精度對比隨筆》,作者:Tianyi_Li,
訓練場景下,遷移原始網路 (如TensorFlow、PyTorch) ,用于NPU上執行訓練,網路遷移可能會造成自有實作的算子運算結果與用原生標準算子運算結果存在偏差,推理場景下, ATC模型轉換程序對模型進行優化,包括算子消除、算子融合算子拆分,這些優化也可能會造成自有實作的算子運算結果與原生標準算子(如TensorFlow、ONNX、 Caffe ) 運算結果存在偏差,
為了幫助開發人員快速解決算子精度問題,需要提供自有實作的算子運算結果與業界標準算子運算結果之間進行精度差異對比的工具,
對策:
精度比對工具能夠幫助開發人員定位本次任務兩個網路間的精度差異,準備好昇騰騰AI處理器運行生成的dump教據與Ground Truth資料 (基于GPU/CPU運行生成的資料)后,即可進行不同演算法評價指標的資料比對,
MindStudio提供精度比對功能,支持Vector比對能力,支持下列演算法:
- 余弦相似度
- 最大絕對誤差
- 累積相對誤差
- 歐氏相對距離
- KL散度…
精度比對根據推理/訓練和不同的框架分為多個比對場景,
原始模型資料即為原始網路在GPU/CPU側生成的資料,主要依賴原始框架中的源生能力,將模型中每一個算子節點的輸入輸出資料進行保存,
NPU模型資料即為通過對原始模型的遷移或訓練在縣騰A處理器上得到的資料,主要依賴華為側提供對應用推理及訓練提供的Dump能力,將模型中每一個算子節點的輸入輸出資料進行保存,
由于MindStudio精度比對工具的使用約束,資料需要滿足以下格式:
原始模型資料準備
以TensorFlow為例
在進行TensorFlow模型生成npy資料前,您需要已經有一套完整的、可執行的、標準的TensorFlow模型應用工程,然后利用TensorFlow官方提供的debug工具tfdbg除錯程式,從而生成npy檔案,通常情況下,TensorFlow的網路實作方式主要分為Estimator模式和session.run模式,具體操作如下:
1.修改tf訓練腳本,添加debug選項設定
2.執行推理或訓練腳本,任務運行到前面debug配置后暫停
3.進入除錯命令列互動模式后,
- 3.1 輸入run命令,訓練會往下執行一個step
- 3.2 執行lt >tensor name將所有tensor的名稱暫存到檔案里,在另一個視窗,在Linux命令下執行下述命令,用以生成在tfdbg命令列執行的命令:
timestamp=$[S(date +%s%N)/1000] ; cat tensor name | awk 'print "pt",$4,$4)' | awk '[gsub("/", ""$3);gsub("""" $3);print($1,$2,"-n 0 -w "$3"stimestamp"""npy")y' > tensor name cmd.txt
- 3.3 將上一步生成的tensor name cmd.txt檔案內容粘貼執行,即可存盤所有npy檔案,實作訓練資料的Dump,
注: 更加詳細操作見《CANN開發輔助工具指南》中“精度比對工具使用指南”章節,
NPU模型資料準備
以推理場景為例
推理場景資料準備一NPU的融合后推理資料NPU采用AscendCL完成離線推理:
1.在代碼中呼叫acllnit(“./acl.json”)
acl.json的檔案內容如下:
2.運行推理應用,生成dump資料
以訓練場景為例
訓練場景資料準備-NPU的遷移后網路訓練數據
以TensorFlow為例,步驟如下:
1.設定“DUMP GE GRAPH=2”生成計算圖檔案,同時修改訓練腳本,開啟dump功能
2.執行訓練腳本,生成dump資料和計算圖檔案
- 計算圖檔案:“ge”開頭的檔案,存盤在訓練腳本所在目錄
- dump資料檔案: 生成在dump path指定的目錄下,即(dump path)/time)/(deviceid)/(model name)/(model id)/(data index) ,
3.選取計算圖檔案
可使用grep lterator* Build.txt命令快速查找出的計算圖檔案名稱,如ge proto 00005 Build.txt.
4.選取dump資料檔案
打開上述計算圖檔案,找出第一個graph中的name欄位,即為dump檔案存放目錄名稱,
精度對比工具使用方法
創建對比任務
將準備好的標準資料檔案與待比對資料文性作為輸入檔案,并配置對應的離線模型檔案,通過對檔案內所有參與計算的算子輸入與輸出進行精度比對,
整網比對在MindStudio界面選單欄洗擇“Ascend > Model Accuracy Analvzer > New Task選單,進入比對界面,
整網對比結果
整網比對結果主要分為四大展示模塊:
- 整網對比結果表;
- 精度散點圖;
- 模型可視化:
- 精度專家建議
精度比對工具本身只提供自有實作算子在昇騰AI處理器上的運算結果與業界標準算子的運算結果的差異比對功能,而輸出的比對結果需要用戶自行分析并找出問題,而對結果的分析作業對于用戶來說也是一大難點,而專家系統工具為用戶提供精度比對結果的結果分析功能,有效減少用戶排查問題的時間,只需在比對操作配置任務時勾選“Advisor”選項,系統則會在比對完成后自動進行結果檔案的分析,并輸出優化建議,
當前支持的分析檢測型別有:FP16溢位檢測、輸入不一致檢測、整網一致性檢測(整網一致性檢測包括:問題節點檢測、單點誤差檢測和一致性檢測三個小點)
這里特別說明下FP16溢位檢測,針對比對資料中資料型別為FP16的資料,進行溢位檢測,如果存在溢位資料,輸出專家建議,示例圖如下所示,
專家系統分析結果: Detection Type: FP16 overflow Operator Index: 228 Expert Advice: Float16 data overflow occurs. Rectify the fault and perform comparison again. 檢測型別:FP16溢位檢測 Operator Index:228 專家建議:存在Float16資料溢位,請修正溢位問題,再進行比對,
單算子對比
可針對整網任務中的某個算子進行單算子比對,分析某個算子的具體精度差異,
使用約束
- 精度比對功能不支持打開多個工程同時進行比對,可以先完成一個比對程式后再進行下一個,
- 精度比對支持的dump資料的型別:
FLOAT
FLOAT16
DT_INT8
DT_UINT8
DT_INT16
DT_UINT16
DT_INT32
DT_INT64
DT_UINT32
DT_UINT64
DT_BOOL
DT_DOUBLE
特別說明
dump檔案無法通過文本工具直接查看其內容,為了查看dump檔案內容,需要用腳本將dump檔案轉換為numpy格式檔案后,再通過numpy官方提供的能力轉為txt檔案進行查看,腳本在/home/HwHiAiUser/Ascend/ascend-toolkit/latest/tools/operator_cmp/compare目錄,名為msaccucmp.py,舉例用法如下:
python3 msaccucmp.py convert -d dump_file [-out output] [-f format -s shape] [-o output_tensor] [-i input_tensor] [-v version] [-t type]
呼叫Python,轉換numpy檔案為txt檔案的完整示例如下:
$ python3 >>> import numpy as np >>> a = np.load("/home/HwHiAiUser/dumptonumpy/Pooling.pool1.1147.1589195081588018.output.0.npy") >>> b = a.flatten() >>> np.savetxt("/home/HwHiAiUser/dumptonumpy/Pooling.pool1.1147.1589195081588018.output.0.txt", b)
但轉換為.txt格式檔案后,維度資訊、Dtype均不存在,詳細的使用方法請參考numpy官網介紹,
總結
精度對比總計分為環境準備、資料準備和對比三步,
資料準備要根據推理場景和訓練場景分別分析:
- 推理場景:準備第三方框架原始模型的npy資料檔案與離線模型的dump資料檔案,
- 訓練場景:準備基于GPU運行生成的第三方框架原始訓練網路npy資料檔案與基于昇騰AI處理器運行生成的訓練網路dump資料和計算圖檔案,
準備后上述步驟,可進行對比:
- 執行整網比對操作,
- 開啟MindStudio的“Ascend > Model Accuracy Analyzer”功能,將準備好的比對資料檔案配置到對應引數下并配置具體比對引數,
- MindStudio執行比對操作并輸出比對結果,
- 比對結果專家建議(可選),請參見比對結果專家建議,
- 根據分析結果定位具體問題算子,
- 執行單算子比對操作,
- 分析單算子具體問題,
最后說下Tensor比對,Tensor對比提供整網比對和單算子比對兩種精度比對方式,需要根據比對場景選擇比對方式,其中,整網比對:將準備好的標準資料檔案與待比對資料檔案作為輸入檔案,通過對檔案內所有參與計算的算子進行精度比對,而單算子比對:在整網比對的基礎上指定具體算子名,對單個算子進行詳細資料的比對,
個人認為,精度對比這是一個需要時間、精力和經驗的操作,要充分利用好MindStudio工具,或查檔案,或提問,可大大降低我們的作業量,提高效率,但是不得不說,這是需要一定經驗的,還是要多看多學習,多試多問啊,
點擊關注,第一時間了解華為云新鮮技術~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/539347.html
標籤:其他
上一篇:當線下門店遇上AI:華為云ModelBox攜手佳華科技客流分析實踐
下一篇:Halcon快速入門
