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