葉亞峰,王 昕,寇金橋,李墈婧
(中國航天科工集團第二研究院 七〇六所,北京 100854)
人工智能算法模型在實際的應用場景中對算力的需求呈指數(shù)級增長,相比之下,硬件平臺的發(fā)展受摩根定律的約束和限制,其性能優(yōu)化的速度遠遠跟不上需求的增長。邊緣計算(edge computing)[1,2]是一種新型的網(wǎng)絡計算模型,它將原有依賴于服務器的計算與存儲資源部署遷移到互聯(lián)網(wǎng)的邊緣,緊鄰終端設備和數(shù)據(jù)采集單元,擁有更快的時間響應速率,更高的數(shù)據(jù)處理效率。邊緣計算集網(wǎng)絡、計算和存儲為一體,對于低延時、高帶寬、高可靠性應用場景有很大的優(yōu)勢。
隨著國產(chǎn)化芯片的不斷發(fā)展,出現(xiàn)了很多,如華為昇騰、百度昆侖、寒武紀、瑞星微等人工智能算法推理加速的邊緣計算設備。相對于云端服務器,邊緣計算設備存在著算力不足、數(shù)據(jù)存儲量小(內(nèi)存資源少、處理器性能不高、功耗受限)等缺點,為了讓深度學習算法可以部署到邊緣計算設備并高效運行,研究人員從不同的角度進行研究。比如輕量化網(wǎng)格結構[3,4],在保持模型精度,不影響其性能的基礎上減少模型參數(shù)的數(shù)量和復雜度,對神經(jīng)網(wǎng)絡輕量化和小型化處理;模型壓縮[5]是另一種維度,其方法包括量化、剪枝、知識蒸餾、低秩分解等[6-8]。
針對邊緣計算中國產(chǎn)化異構智能加速硬件種類繁多,算法模型在不同硬件平臺上運行環(huán)境的部署過程繁瑣、上手難度大等問題,本文設計并實現(xiàn)了一種智能算法模型轉(zhuǎn)換工具,可以將開源框架下訓練的深度學習算法模型快速轉(zhuǎn)換為國產(chǎn)化智能加速硬件平臺支持的模型文件,實現(xiàn)算法模型快速部署和高效運行。
人工智能算法的應用包括訓練和推理兩部分,訓練框架囊括深度神經(jīng)網(wǎng)絡(deep neural networks,DNN)訓練所需要的基礎庫和工具,深度學習框架簡化了模型訓練的過程,但不同的深度學習框架訓練出來的模型格式各不相同。TensorFlow框架訓練得到的算法模型的文件格式是.pb[9],Caffe框架訓練后的算法模型的文件包括模型文件.prototxt和參數(shù)文件.caffemodel,MXNet框架訓練得到的算法模型文件格式是模型參數(shù)文件.params和模型結構文件.json,PyTorch框架訓練得到的算法模型文件格式是.pth等。不同硬件加速平臺所支持的模型也不盡相同,比如百度昆侖芯片需要將算法模型轉(zhuǎn)換為model.pdmodel/model.pdparams格式文件進行推理加速,華為昇騰芯片需要將算法模型轉(zhuǎn)換為.om格式文件進行推理加速[10],國產(chǎn)FPGA需要將算法模型轉(zhuǎn)化為.bin格式文件進行推理加速等。
針對以上問題,相關學者做了以下研究:文獻[11]將基于開源框架訓練的YOLO v4算法模型,通過昇騰310提供的模型轉(zhuǎn)換工具-昇騰張量編譯器(ascend tensor compiler,ATC),實現(xiàn)模型轉(zhuǎn)換,將轉(zhuǎn)換后的.om離線模型直接部署到昇騰310處理器上進行邊緣計算,實現(xiàn)了電力視覺巡檢;文獻[12]設計并實現(xiàn)了一種基于Hi35XX SoC的智能處理系統(tǒng),其中AI加速模塊(neural network infe-rence engine,NNIE)是海思芯片專門針對神經(jīng)網(wǎng)絡特別是深度學習卷積神經(jīng)網(wǎng)絡進行加速處理的硬件單元,但NNIE配套軟件僅支持Caffe框架,因此在其它深度學習框架訓練的算法模型需要轉(zhuǎn)化為Caffe框架支持的模型;文獻[13]針對智能算法模型之間差異大導致的部署效率低的問題,設計并實現(xiàn)了一種基于Docker的輕量級智能算法模型部署平臺,將算法模型打包為Docker鏡像,并利用鏡像倉庫托管鏡像,數(shù)據(jù)庫管理模型部署信息,實驗驗證了其平臺的可行性和高效性;文獻[14]針對因算法模型和硬件平臺分離使算法模型部署復雜度高的問題,設計了一種以矩陣運算為核心的神經(jīng)網(wǎng)絡加速器,與CPU結合構成了一個SoC系統(tǒng),并實現(xiàn)了一套快速部署工具鏈,包括系統(tǒng)初始化、加速器驅(qū)動和內(nèi)存管理等API,為SoC提供了軟件支持,在ResNet18的測試中,能效比大大提高。
綜上所述,針對不同的智能加速平臺所支持的算法模型文件格式不盡相同的問題,研究學者給出了相應的解決方案,但仍存在功能單一、適配性能差的問題。本文設計并實現(xiàn)的智能算法模型轉(zhuǎn)換工具,可以將主流算法模型轉(zhuǎn)換為om文件、pdmodel/pdparams文件、bin文件等,實現(xiàn)在華為昇騰CANN、百度飛槳(PaddlePaddle)和國產(chǎn)FPGA不同硬件平臺上的推理加速。
智能算法模型轉(zhuǎn)換工具基于QT實現(xiàn)界面化設計,重點針對主流的Tensorflow、Pytorch、Caffe等框架的智能算法模型進行轉(zhuǎn)換,得到可以在國產(chǎn)嵌入式異構加速硬件平臺(如華為昇騰、百度昆侖、國產(chǎn)FPGA等)運行的模型,從而實現(xiàn)算法模型在不同硬件平臺下的統(tǒng)一化部署和推理加速。
智能算法模型轉(zhuǎn)換工具的設計與實現(xiàn)主要包括界面設計和接口設計兩部分,其中界面設計包括:硬件平臺選擇、參數(shù)設置、開始轉(zhuǎn)換、結果顯示4個模塊;接口設計包括:模型轉(zhuǎn)換參數(shù)傳輸、模型轉(zhuǎn)換、結果回傳3個模塊。模型轉(zhuǎn)換工具是開放的,留有可擴展接口,可根據(jù)實際需求進行功能擴展,其設計框架如圖1所示。
圖1 智能算法模型轉(zhuǎn)換工具設計框架
界面設計使用基于C++&QT開源圖形框架實現(xiàn),通過QT內(nèi)置的槽函數(shù)機制,將界面組件(按鈕、文本框、下欄菜單等)與后臺功能形成映射關系,為用戶提供外部接口以對軟件進行操作。
接口設計中模型轉(zhuǎn)換參數(shù)傳輸模塊將用于設置的參數(shù)傳輸?shù)胶蠖?,模型轉(zhuǎn)換模塊根據(jù)用戶定義的參數(shù)基于相應異構平臺模型轉(zhuǎn)換程序?qū)㈤_源框架訓練的模型文件轉(zhuǎn)為目標平臺支持的模型文件,通過多線程和線程交互技術實現(xiàn)界面交互和數(shù)據(jù)傳輸,將轉(zhuǎn)換結果回傳到界面顯示。
模型轉(zhuǎn)換工具的用戶界面包括一個主界面和3個不同的子界面,主界面上半部分由一個選擇下拉窗口和兩個按鈕組成,下半部分為一個文本顯示框,如圖2所示?!澳繕似脚_選擇”按鈕可通過下拉窗口選定不同的目標平臺,本文設計了3個目標平臺分別是華為CANN平臺、百度PaddlePaddle平臺和國產(chǎn)FPGA平臺?!澳P娃D(zhuǎn)換參數(shù)輸入”按鈕可以根據(jù)用戶需求選擇目標平臺彈出對應的子窗口,供用戶完成模型轉(zhuǎn)換參數(shù)的設定;“開始轉(zhuǎn)換”按鈕可以執(zhí)行模型的轉(zhuǎn)換;“轉(zhuǎn)換結果顯示”文本框?qū)@示模型轉(zhuǎn)換的進程信息和最終的轉(zhuǎn)換結果。
圖2 智能算法模型轉(zhuǎn)換工具界面
其具體的設計過程如下:
主界面設計如圖2(a)所示,目標平臺選擇使用了QComboBox實現(xiàn)平臺類型的選擇;模型轉(zhuǎn)換參數(shù)輸入和開始轉(zhuǎn)換均使用QPushButton作為按鈕控件,使用時點擊按鈕便可觸發(fā)相關功能;轉(zhuǎn)換結果顯示使用了QTextEdit顯示模型轉(zhuǎn)換過程的信息。
華為CANN平臺子界面設計如圖2(b)所示,輸入模型路徑和輸出名使用QTextEdit作為顯示窗口顯示相關信息;輸入類型、輸入名、寬、高、batch_size、通道數(shù)以及輸出節(jié)點信息使用QLineEdit控件以輸入相關信息;模型選擇和參數(shù)保存使用QPushButton按鈕控件進行點擊操作,使用時點擊按鈕便可觸發(fā)相關功能;芯片類型選擇則是使用QComboBox以選擇對應的芯片種類。
百度PaddlePaddle平臺子界面設計如圖2(c)所示,輸入模型路徑和選擇輸出路徑使用QTextEdit作為顯示窗口顯示相關信息;源模型類型使用QComboBox以選擇對應的源模型種類;選擇和保存使用QPushButton按鈕控件進行點擊操作,使用時點擊按鈕便可觸發(fā)相關功能。
國產(chǎn)FPGA平臺子界面設計如圖2(d)所示,轉(zhuǎn)換模式使用QComboBox以選擇對應的轉(zhuǎn)換;選擇輸入模型和選擇輸出路徑使用QTextEdit作為顯示窗口顯示相關信息;保存使用QPushButton按鈕控件進行點擊操作。
(1)華為昇騰平臺
本文設計的華為昇騰平臺模型轉(zhuǎn)換功能是基于華為公司針對AI場景推出的異構計算架構體系(compute architecture for neural networks,CANN)下昇騰張量編譯器(ascend tensor compiler,ATC)實現(xiàn)的,它可以將開源框架的網(wǎng)絡模型轉(zhuǎn)換為昇騰AI處理器支持的.om格式離線模型[15],其功能框架如圖3所示,在模型轉(zhuǎn)換過程中,ATC工具會將在開源深度學習框架下訓練好的網(wǎng)絡模型轉(zhuǎn)化為統(tǒng)一中間圖IR Graph,然后通過Graph Optmizer實現(xiàn)圖準備、圖拆分、圖優(yōu)化、圖編譯等操作,對原始的深度學習模型進行進一步的調(diào)優(yōu),得到離線模型.om文件,從而實現(xiàn)算法模型在華為平臺下的快速部署、高效運行。
圖3 華為CANN模型轉(zhuǎn)換工具功能結構
1)模型轉(zhuǎn)換流程
模型轉(zhuǎn)換流程如下:①安裝CANN軟件包,獲取相關路徑下的ATC工具;②將準備好待轉(zhuǎn)換的算法模型,保存在任意路徑下;③配置模型轉(zhuǎn)換參數(shù)及輸出節(jié)點信息并保存;④調(diào)用編譯器程序,生成華為昇騰平臺支持的.om文件。
2)模型轉(zhuǎn)換參數(shù)說明
模型轉(zhuǎn)換參數(shù)說明如下:
輸入模型路徑:選擇待轉(zhuǎn)換的通用框架模型;
輸出名:存放轉(zhuǎn)換后的離線模型的路徑以及文件名;
輸入類型:選擇模型輸入數(shù)據(jù)排列方式,一般Caffe默認為NCHW,TensorFlow默認為NHWC;
芯片類型:模型轉(zhuǎn)換時指定芯片版本,如昇騰310、昇騰910;
輸入名:模型訓練時的輸入名稱(字符串類型);
Batch_size:模型推理時的數(shù)據(jù)批處理量;
寬和高:設置輸入圖片的動態(tài)分辨率參數(shù),用于執(zhí)行推理時,每次處理圖片寬和高不固定的場景;
通道數(shù):輸入圖片的通道數(shù);
輸出節(jié)點信息:指定輸出節(jié)點。
(2)百度飛槳平臺
本文設計的百度平臺模型轉(zhuǎn)換功能是基于是飛槳(PaddlePaddle)生態(tài)下的模型轉(zhuǎn)換工具X2 Paddle實現(xiàn)的,它用于將開源深度學習框架的模型遷移至飛槳框架,支持開源框架訓練的模型一鍵轉(zhuǎn)為飛槳的預測模型,并可以使用PaddleInference、PaddleLite進行CPU、GPU、NPU和ARM等設備的部署[16]。X2 Paddle支持Caffe、TensorFlow、ONNX等模型直接轉(zhuǎn)化為Paddle Fluid可加載的預測模型,考慮到不同訓練框架得到的模型文件API、預測方式的差異,X2 Paddle還提供三大主流框架API的差異比較,通過深入了解API實現(xiàn)方式降低模型遷移帶來的損失,其功能結構如圖4所示。
圖4 百度PaddlePaddle模型轉(zhuǎn)換工具功能結構
1)模型轉(zhuǎn)換流程
模型轉(zhuǎn)換流程如下:①安裝依賴環(huán)境,導入“x2paddle.convert”模塊;②準備好待轉(zhuǎn)換的開源深度學習框架模型;③輸入待轉(zhuǎn)換模型路徑和轉(zhuǎn)換后的模型保存路徑;④運行x2 Paddle轉(zhuǎn)換工具得到model.pdmodel/model.pdparams模型文件。
2)模型轉(zhuǎn)換參數(shù)說明[17]
模型轉(zhuǎn)換參數(shù)說明如下:
framework:源模型類型 (TensorFlow、Caffe、onnx);
prototxt:當framework為Caffe時,該參數(shù)指定caffe模型的proto文件路徑;
weight:當framework為Caffe時,該參數(shù)指定caffe模型的參數(shù)文件路徑;
save_dir:指定轉(zhuǎn)換后的模型保存目錄路徑;
model:當framework為TensorFlow/onnx時,該參數(shù)指定TensorFlow的pb模型文件或onnx模型路徑;
caffe_proto(可選):由caffe.proto編譯成caffe_pb2.py文件的存放路徑,當存在自定義Layer時使用,默認為None。
(3)國產(chǎn)FPGA平臺
本文設計的國產(chǎn)FPGA模型轉(zhuǎn)換工具是基于IP2工具鏈實現(xiàn)的,它可以將代碼編譯過程和運行過程解耦,硬件后端只需要輕量級的運行文件,通過過程調(diào)用即可在后端實現(xiàn)前向推理,并完成硬件性能的自動調(diào)優(yōu),解決了主流深度學習框架不支持FPGA的問題。
國產(chǎn)FPGA模型轉(zhuǎn)換工具包含用戶模式和測試模式,其功能結構如圖5所示。用戶模式是給用戶使用開啟的,在用戶模式下,onnx解析工具可以將用戶模型(.onnx)文件進行解析生成和編譯得到的輸入文件和模型數(shù)據(jù),編譯器輸入變量解析腳本,通過IP2編譯器得到國產(chǎn)FPGA平臺可以支持的權重文件Weights.bin和模型文件Parameters.bin。測試模型在對IP核進行測試的過程中使用的,在測試模式下,onnx解析工具對模型文件進行解析的同時,隨機比對數(shù)據(jù)生成工具會產(chǎn)生測試數(shù)據(jù)和.prototxt文件,工具會自動生成golden模型,然后生成測試IP核 的比對文件。
圖5 國產(chǎn)FPGA模型轉(zhuǎn)換工具功能結構
其中onnx解析過程是國產(chǎn)FPGA模型轉(zhuǎn)換工具的核心,主要功能:通過onnx的圖機制遍歷模型的各個節(jié)點,獲得節(jié)點的算子類型(op),可以得到該層節(jié)點的參數(shù),各層節(jié)點參數(shù)組合成prototxt文件;通過卷積、BN(或全連接)節(jié)點的Tensor,可以得到存儲的weight和bias文件,生成對應的.mat文件;通過Tensor的GetQuanParam方法可以得到各節(jié)點的量化參數(shù)信息,依次得到各節(jié)點的bias、input、output、weight這4個Tensor的位寬和小數(shù)位。
1)模型轉(zhuǎn)換流程
模型轉(zhuǎn)換流程如下:①onnx模型解析工具讀取用戶的onnx模型結構和權重(已量化),生成編譯器需要的模型結構文件(.prototxt文件)、模型參數(shù)文件(.mat文件)和模型配置文件;②調(diào)用編譯器程序,完成模型的.hex文件生成和.bin文件轉(zhuǎn)換。
2)模型轉(zhuǎn)換參數(shù)說明
模型轉(zhuǎn)換參數(shù)說明如下:
轉(zhuǎn)換模式:可選res18_imagenet、YOLOv3、ResNet50等模型類型;
選擇輸入模型:輸入待轉(zhuǎn)換的模型文件所在路徑,一般為.onnx類型;
選擇輸出路徑:輸出轉(zhuǎn)換后的模型文件。
模型轉(zhuǎn)換軟件內(nèi)部接口設計為該轉(zhuǎn)換工具重要部分,外部接口主要基于內(nèi)部接口進行封裝,用于用戶與軟件的交互,內(nèi)部接口設計包括對應平臺模型轉(zhuǎn)換參數(shù)傳輸函數(shù)設計、對應平臺模型轉(zhuǎn)換函數(shù)設計、模型轉(zhuǎn)換結果回傳函數(shù)設計。
對應平臺模型轉(zhuǎn)換參數(shù)傳輸函數(shù)set_args是對應平臺模型轉(zhuǎn)換參數(shù)傳輸接口,輸入/輸出數(shù)據(jù)元素包括:string modelpath、string modelname、string parameters。打開模型轉(zhuǎn)換軟件,手動輸入對應參數(shù),將參數(shù)在進程之間傳輸,輸入正確的轉(zhuǎn)換參數(shù),成功后會將用戶設定的轉(zhuǎn)換參數(shù),傳給異構平臺的模型轉(zhuǎn)換或編譯工具,錯誤返回ERROR。其局部數(shù)據(jù)元素的數(shù)據(jù)類型和數(shù)據(jù)表示形式見表1。
表1 模型轉(zhuǎn)換參數(shù)傳輸函數(shù)局部數(shù)據(jù)元素
對應平臺模型轉(zhuǎn)換函數(shù)model_convert是對應平臺模型轉(zhuǎn)換接口,輸入輸出數(shù)據(jù)元素是待轉(zhuǎn)換的模型和轉(zhuǎn)換后對應平臺的模型,手動輸入對應參數(shù)后,點擊模型轉(zhuǎn)換按鈕調(diào)用模型轉(zhuǎn)換程序,成功后在指定路徑下生成轉(zhuǎn)換好的模型文件,錯誤返回ERROR。其局部數(shù)據(jù)元素的數(shù)據(jù)類型和數(shù)據(jù)表示形式見表2。
表2 對應平臺模型轉(zhuǎn)換函數(shù)局部數(shù)據(jù)元素
模型轉(zhuǎn)換結果回傳函數(shù)send_res是模型轉(zhuǎn)換結果回傳接口,模型轉(zhuǎn)換開啟后,模型轉(zhuǎn)換過程中自動觸發(fā)該函數(shù),模型轉(zhuǎn)換成功后在主界面“轉(zhuǎn)換結果顯示”窗口中輸出模型轉(zhuǎn)換命令行的打印信息。其局部數(shù)據(jù)元素的數(shù)據(jù)類型和數(shù)據(jù)表示形式見表3。
表3 模型轉(zhuǎn)換結果回傳函數(shù)局部數(shù)據(jù)元素
多線程技術一方面可以優(yōu)化程序的設計邏輯,另一方面可以提高系統(tǒng)的響應速率,為了充分利用系統(tǒng)資源,提高系統(tǒng)的并行度,本文在模型轉(zhuǎn)換工具的設計中引入多線程技術。在模型轉(zhuǎn)換工具中,主要包括模型轉(zhuǎn)換和界面程序兩個任務,模型轉(zhuǎn)換模塊是在界面程序外部獨立運行的,即模型轉(zhuǎn)換過程和界面程序?qū)嶋H是運行在兩個不同的進程中的,因此需要將模型轉(zhuǎn)換進程和界面交互進程建立連接,并使其可以進行數(shù)據(jù)通信。其設計框架如圖6所示。
圖6 模型轉(zhuǎn)換工具多線程設計框架
本文設計的模型轉(zhuǎn)換工具界面包括主界面和多個子界面組成,模型轉(zhuǎn)換的過程中,計算機CPU和內(nèi)存占用率大,多線程技術可以保證主界面和每個子界面可以流程運行,每個模型轉(zhuǎn)換模塊可以在不同的線程中同時進行,這些線程互相獨立,互不干擾。
在模型轉(zhuǎn)換過程中,該工具會先根據(jù)需要通過主線程使用QThread建立若干個子線程,然后把用戶設置好的模型轉(zhuǎn)換參數(shù)和算法模型文件數(shù)據(jù)同步給子線程,在子線程中通過QProcess函數(shù)開啟外部獨立的模型轉(zhuǎn)換進程如ATC轉(zhuǎn)換進程、X2paddle轉(zhuǎn)換進程、FPGA模型編譯進程等,轉(zhuǎn)換完成后,外部進程會將所有過程信息傳回給子線程,子線程通過主線程進行結果顯示。
在PyTorch框架下得到訓練好的ResNet50算法模型,并導出onnx格式的模型文件resnet50.onnx,通過本文設計的模型轉(zhuǎn)換工具將模型分別轉(zhuǎn)換為華為昇騰平臺可以運行的resnet50.om模型文件,百度昆侖平臺可以運行的model.pdmodel/model.pdparams模型文件以及國產(chǎn)FPGA平臺可以運行的parameters.bin/weights.bin模型文件,驗證了該工具的可行性。以艦船目標識別為例驗證了模型轉(zhuǎn)換工具的性能,結果顯示算法模型轉(zhuǎn)換前后識別精度誤差不超過1%。
本實驗環(huán)境所涉及硬件、軟件的名稱及版本號如下:
硬件環(huán)境:飛騰D2000/8核CPU,32 GB內(nèi)存,1 TB存儲,麒麟V10操作系統(tǒng);
軟件環(huán)境:gcc 7.3.0,g++ 7.3.0,python 3.7,paddlepaddle 2.1.1,x2paddle 1.2.3,qt 5.11.2,qmake 3.11.3,Ascend-tooklit 5.0.2,國產(chǎn)FPGA 模型編譯工具1.3.0。
(1)華為昇騰平臺
將通用框架模型resnet50.onnx放到已安裝本軟件且具備軟件運行環(huán)境的機器上,路徑無特殊要求。打開模型轉(zhuǎn)換工具,在主界面選定“昇騰平臺”,然后點擊“模型轉(zhuǎn)換參數(shù)輸入”按鈕,進入到該子界面,輸入相應模型轉(zhuǎn)換參數(shù):輸入模型路徑:/root/ksbs/model_shift/resnet50.onnx、輸出模型名稱:resnet50、輸入類型:NCHW、芯片類型:Ascend310、輸入名:input、batch_size:1、通道數(shù):3、寬:224、高:224等,然后點擊“保存”按鈕。在主界面點擊“模型轉(zhuǎn)換”按鈕便可以在新的線程內(nèi),開啟新的模型轉(zhuǎn)換進程,此時可以通過下面的“轉(zhuǎn)換結果顯示”窗口查看模型轉(zhuǎn)換進程的實時打印信息。當模型轉(zhuǎn)換完成后,在“轉(zhuǎn)換結果顯示”窗口顯示:“ATC run success,welcome to the next use”,便可到相應路徑下找到轉(zhuǎn)換完成后的模型“resnet50.om”,其轉(zhuǎn)換過程如圖7所示。
圖7 華為CANN平臺模型轉(zhuǎn)換
(2)百度昆侖平臺
將通用框架模型resnet50.onnx放到已安裝本軟件且具備軟件運行環(huán)境的機器上,路徑無特殊要求。打開模型轉(zhuǎn)換工具,在主界面選定“百度平臺”,然后點擊“模型轉(zhuǎn)換參數(shù)輸入”按鈕,進入到該子界面,輸入相應模型轉(zhuǎn)換參數(shù):輸入模型路徑:/root/ksbs/model_shift/resnet50.onnx,選擇輸出路徑:/root/projects/resnet/interence_model,源模型類型:onnx,然后點擊“保存”按鈕。在主界面點擊“模型轉(zhuǎn)換”按鈕便可以在新的線程內(nèi),開啟新的模型轉(zhuǎn)換進程,此時可以通過下面的“轉(zhuǎn)換結果顯示”窗口查看模型轉(zhuǎn)換進程的實時打印信息。當模型轉(zhuǎn)換完成后,在“轉(zhuǎn)換結果顯示”窗口顯示:“Exporting inference model from python code”,便可到相應路徑下找到轉(zhuǎn)換完成后的模型“model.pdmodel”和“model.pdparam”,其轉(zhuǎn)換過程如圖8所示。
圖8 百度PaddlePaddle平臺模型轉(zhuǎn)換
(3)國產(chǎn)FPGA平臺
將通用框架模型yolov3.onnx放到已安裝本軟件且具備軟件運行環(huán)境的機器上,路徑無特殊要求。打開模型轉(zhuǎn)換工具,在主界面選定“FPGA平臺”,然后點擊“模型轉(zhuǎn)換參數(shù)輸入”按鈕,進入到該子界面,輸入相應模型轉(zhuǎn)換參數(shù):轉(zhuǎn)換模式:res50_imagenet,選擇輸入模型:/root/ksbs/model/resnet50.onnx,選擇輸出路徑:/root/ksbs/mo-del,然后點擊“保存”按鈕。在主界面點擊“模型轉(zhuǎn)換”按鈕便可以在新的線程內(nèi),開啟新的模型轉(zhuǎn)換進程,此時可以通過下面的“轉(zhuǎn)換結果顯示”窗口查看模型轉(zhuǎn)換進程的實時打印信息。當模型轉(zhuǎn)換完成后,在“轉(zhuǎn)換結果顯示”窗口顯示:“Generate output/Weights.bin”和“Generate output/Parameters.bin”,便可到相應路徑下找到轉(zhuǎn)換完成后的模型“Weights.bin”和“Parameters.bin”,其轉(zhuǎn)換過程如圖9所示。
圖9 國產(chǎn)FPGA模型轉(zhuǎn)換
以艦船目標識別為例,測試集收集包括艦船、艦體、艦島等目標的測試集1350張。
將基于Pytorch框架訓練好的模型ResNet50.pt保存到x86服務器的指定路徑下,并將測試集數(shù)據(jù)放到同級目錄,啟動模型精度測試程序,加載保存的模型和測試集數(shù)據(jù)并執(zhí)行推理,運行結果如圖10(a)所示,識別準確率約為93.48%。
圖10 模型轉(zhuǎn)換前后識別精度對比
將ResNet50.pt模型導出為ResNet50.onnx模型并拷貝到已安裝模型轉(zhuǎn)換工具的國產(chǎn)設備上,啟動模型轉(zhuǎn)換工具,加載ResNet50.onnx模型文件并輸入轉(zhuǎn)換參數(shù),轉(zhuǎn)換為ResNet50.om模型,并將其部署到Atlas 200DK推理加速設備的指定路徑下,同時將測試數(shù)據(jù)集放到同級目錄下,啟動Atlas 200DK上的模型精度測試程序并執(zhí)行推理,加載保存的模型和測試集數(shù)據(jù),運行結果如圖10(b)所示,識別準確率約為92.52%,從而計算出模型部署前后精度誤差約為0.96%。
針對智能算法異構加速硬件的多元化帶來的模型應用與轉(zhuǎn)換過程繁瑣、冗余的問題,本文設計并實現(xiàn)了一種智能算法模型轉(zhuǎn)換工具,該工具可以將開源框架下訓練的智能算法模型一鍵轉(zhuǎn)換為不同硬件加速平臺支持的模型文件,使得智能算法模型轉(zhuǎn)換功能集成化和統(tǒng)一化。
其主要創(chuàng)新點和貢獻如下:
(1)該工具內(nèi)嵌華為CANN平臺ATC轉(zhuǎn)換工具、百度PaddlePaddle平臺X2 Paddle轉(zhuǎn)換工具以及自研國產(chǎn)FPGA平臺轉(zhuǎn)換工具,可以將resnet50.onnx/yolov3.onnx模型文件轉(zhuǎn)換為om文件、pdmodel/pdparams文件、bin文件,在不同硬件平臺上實現(xiàn)智能算法推理加速,且功能可擴展,支持多種異構加速平臺;
(2)該工具基于QT開源圖形框架實現(xiàn)的界面化設計,并在基礎的模型轉(zhuǎn)換工具上進行上層封裝,為用戶提供簡便直接的操作和交互方式,使得模型轉(zhuǎn)換操作簡單易懂,無上手門檻。同時可以支持YOLOv3、ResNet50、VGG16等多種智能算法模型和參數(shù)設置,多線程和進程通信技術支持多種模型同時轉(zhuǎn)換,互不干擾,保證了工具的流暢運行。
由于時間原因本文研發(fā)的模型轉(zhuǎn)換工具只涉及到常見的幾種硬件加速平臺、主流的深度學習框架和算法模型,對于其它設備和算法模型仍需要適配和驗證;本文分別通過模型轉(zhuǎn)換和目標識別算法測試了該工具的有效性和誤差精度,其魯棒性和兼容性也是下一步的工作重點。