作者:顏國進(jìn)英特爾邊緣計算創(chuàng)新大使
01前言
英特爾發(fā)行版 OpenVINO 工具套件基于 oneAPI 而開發(fā),可以加快高性能計算機視覺和深度學(xué)習(xí)視覺應(yīng)用開發(fā)速度工具套件,適用于從邊緣到云的各種英特爾平臺上,幫助用戶更快地將更準(zhǔn)確的真實世界結(jié)果部署到生產(chǎn)系統(tǒng)中。通過簡化的開發(fā)工作流程,OpenVINO 可賦能開發(fā)者在現(xiàn)實世界中部署高性能應(yīng)用程序和算法。
OpenVINO 2023.2 于 2023 年 11 月 16 日發(fā)布,該工具包帶來了挖掘生成人工智能全部潛力的新功能。更多的生成式 AI 覆蓋和框架集成,以最大限度地減少代碼更改,并且擴展了對直接 PyTorch 模型轉(zhuǎn)換的模型支持。支持更多新的模型,包括 LLaVA、chatGLM、Bark 和 LCM 等著名模型。支持更廣泛的大型語言模型(LLM)和更多模型壓縮技術(shù),支持運行時推理支持以下 Int4 模型壓縮格式,通過神經(jīng)網(wǎng)絡(luò)壓縮框架(NNCF)進(jìn)行本機 Int4 壓縮等一系列新的功能。
通過最新的 OpenVINO 更新信息,我們可以看出,OpenVINO 其實是在不斷更新迭代,并且適配更多新的模型。其主要原因是不少新出現(xiàn)的模型可能會帶來更多新的算子,而 OpenVINO 可能會在后續(xù)的版本更新中才會適配。但如果我們當(dāng)前階段需要使用 OpenVINO 部署該深度學(xué)習(xí)模型,那我們該怎么做?
其實對于一些編程大佬,以及對 OpenVINO 有深入研究的人,他們可以對 OpenVINO 源碼進(jìn)行修改,然后自己寫模型算子,添加到 OpenVINO 中。但是,開發(fā)算子的門檻是很高的,對于大多數(shù)開發(fā)者來說,這是很困難很難實現(xiàn)的。
在之前部署 RT-DETR 模型時,我也遇到了該模型在 OpenVINO 使用 GPU 設(shè)備部署出現(xiàn)算子不支持問題。因此在該文章中,我將結(jié)合該問題的解決過程,向大家展示對于大多數(shù)開發(fā)者,如何解決模型部署時出現(xiàn)算子不匹配問題。
02提交 Issues
OpenVINO 是在 GitHub 上開源的一個項目,源碼開源,因此我們可以將源碼下載下來自己進(jìn)行編譯,因此我們可以修改源碼,但是對于大多數(shù)開發(fā)者來說,修改源碼是很難實現(xiàn)的。GitHub 上的開源項目提供了 Issues 功能,開發(fā)者在使用時如果遇到問題,可以通過提交 Issues 向官方開發(fā)人員求助。
提交 Issues 的流程如下:
01訪問 OpenVINO 廠庫 Issues 頁面,然后創(chuàng)建一個 [new Issues]
OpenVINO 廠庫Issues 頁面:
https://github.com/openvinotoolkit/openvino/issues
02選擇一個 Issues 類型,可以根據(jù)自己的問題類型進(jìn)行選擇
03選擇完類型后,就可以根據(jù)自己的問題情況,填寫相關(guān)的內(nèi)容
04以該問題為例,簡單介紹一下 Issues 內(nèi)容:
首先是基礎(chǔ)內(nèi)容填寫,主要包括 OpenVINO 版本、開發(fā)平臺、推理設(shè)備、模型框架、所部署的模型以及問題的簡單描述。對于該問題,所提交的內(nèi)容如下所示:
接下來是詳細(xì)復(fù)述問題出現(xiàn)的流程,為了讓開發(fā)者能夠更清楚地了解問題,這一不需要寫的非常詳細(xì),確保開發(fā)人員能夠完整復(fù)現(xiàn)該問題。如果復(fù)現(xiàn)步驟比較簡單,可以在此處進(jìn)行詳細(xì)描述,如果問題副相比較復(fù)雜,并且存在多個文件,那就需要創(chuàng)建一個 GitHub 廠庫存放相關(guān)文件。
最后一步就是添加錯誤日志輸出,主要是為了讓開發(fā)人員根據(jù)日志確認(rèn)是否成功復(fù)現(xiàn)問題,或者是可以根據(jù)日志輸出定位問題所在。
在提交 Issues 后,OpenVINO 官方人員會根據(jù)問題內(nèi)容,分配開發(fā)人員進(jìn)行解決,此時我們就只需要等待 OpenVINO 官方回復(fù)即可。
03編譯 OpenVINO 源碼
上一步中我們已經(jīng)相關(guān)方求助,不久之后便可以獲得官方的解答,但是官方的解答如果涉及到源碼的修改,可能對于大多數(shù)開發(fā)者來說會無從下手,對于涉及到源碼的改動,如果想直接在項目中使用,就需要自行進(jìn)行源碼編譯。因為你所提出的問題官方給出的解決方案如果比較有價值的話,可能會在后續(xù)的版本中修復(fù),并發(fā)布到最新版本中。但對于我們使用者來說,我們需要立刻就使用,而無法等待到下一個版本發(fā)布。因此,我們將結(jié)合官方給的回復(fù)與改動,基于 Windows 平臺,一步步從源碼開始,實現(xiàn)源碼編譯與使用。
3.1 下載源碼
OpenVINO 源碼可以通過 Git 進(jìn)行下載,使用 Git 依次運行下面代碼:
git clone https://github.com/openvinotoolkit/openvino.git cd openvino git submodule update --init
左滑查看更多
由于網(wǎng)絡(luò)問題,此處下載可能較慢,但一定要保證上面下載的一些附加依賴能夠完整下載,不然后面編譯會出現(xiàn)錯誤。如果后面生成編譯文件時出現(xiàn)項目缺少,那主要原因就是此處因為網(wǎng)絡(luò)原因,有一些文件沒有下載下來,此處我也是下載了好幾次才下載下來完整的文件。
3.2 修改源碼
上一步我們已經(jīng)下載完源碼,下一步就是需要根據(jù)官方給的修改意見對源碼進(jìn)行修改,如下圖所示,該截圖為官方提供的源碼修改意見:
在該返回意見中,我們需要在源碼中增加一些代碼,所以此處大家可以根據(jù)情況對源碼進(jìn)行修改即可。
3.3源碼編譯
上一步中已經(jīng)下載并修改好了源碼,接下來就可以進(jìn)行編譯了,此處我們采用 Cmake+vs2022 的方式進(jìn)行編譯,通過 Cmake 編譯生成 VS2022 項目,然后使用 VS 編譯項目源碼。
首先依次運行下面兩條命令:
mkdir build && cd build cmake -G "Visual Studio 17 2022"-DCMAKE_BUILD_TYPE=Debug
左滑查看更多
此處需要把“
如果得不到上圖效果,說明編譯中出現(xiàn)了問題,需要回頭查找相關(guān)的錯誤。跟俊之前的編譯經(jīng)驗,主要問題是出現(xiàn)在第一步中,主要原因是因為網(wǎng)絡(luò)問題導(dǎo)致的相關(guān)配置沒有下載。最后編譯成功后,會在 build 文件中出現(xiàn) OpenVINO.sln 項目解決方案。
接下來我們使用 VS2022 打開該解決方案,然后通過設(shè)置 Debug 或 Release 來選擇生成的動態(tài)鏈接庫是什么版本,然后右擊 ALL_BUILD 項目,點擊生成,便可以運行項目進(jìn)行源碼編譯。
友情提示,這一步源碼編譯由于涉及的代碼文件角度,因此需要較長的時間來生成。
3.4 獲取編譯后的動態(tài)鏈接庫
項目運行成功后,我們可以在下面路徑下找到編譯出的動態(tài)鏈接庫文件,可以看出,編譯所生成的 .dll 文件以及 .lib 文件,是我們所下載的官方發(fā)布的 OpenVINO 發(fā)行版 Runtime 中的文件是一致的,因此在后續(xù)使用時,我們只需要將我們編譯生成的動態(tài)鏈接庫文件替換到當(dāng)前項目中即可。
04實際項目測試
該案例主要是基于 RT-DETR 模型使用 GPU 部署出現(xiàn)問題為例,最后我們回到該案例中,測試是否解決了我們的問題。關(guān)于使用在 C++ 部署 RTDETR 模型的流程可以參考我的上一篇文章:《基于OpenVINOC++ API部署RT-DETR模型|開發(fā)者實戰(zhàn)》,因此此處對于 C++ 項目配置不再作過多講解。
如下圖所示,該圖片是我們使用當(dāng)前發(fā)行版本 OpenVINO 2023.2 運行結(jié)果,此處我們使用的是 GPU.0 集成顯卡運行推理,可以看出,模型在推理階段會出現(xiàn)錯誤導(dǎo)致程序崩潰結(jié)束。
接下來我們用我們上面自行編譯生成的動態(tài)鏈接庫運行程序,可以看出,在使用 GPU.0 集成顯卡運行推理時,錯誤已經(jīng)消失了,并且成功運行模型推理,并打印出了結(jié)果。
通過對比測試,說明官方所給出的解決方案是正確的,我們也成功根據(jù)官方給出的解決方案解決了當(dāng)前問題,并且不用等待官方發(fā)布下一個版本便可以提前使用,方便大家。
05總結(jié)
在本文中,我們結(jié)合一個模型部署案例,向大家講解了使用 OpenVINO 時出現(xiàn)算子不匹配等問題時,對于我們使用者來說,如何在官方開發(fā)者的幫助下,解決自己所遇到的問題。另外,通過該方式,我們也向 OpenVINO 反饋了代碼中存在的 Bug,在解決我們問題的同時,也積極為開源做出了自己的貢獻(xiàn)。
審核編輯:湯梓紅
-
英特爾
+關(guān)注
關(guān)注
60文章
9747瀏覽量
170641 -
模型
+關(guān)注
關(guān)注
1文章
3032瀏覽量
48350 -
邊緣計算
+關(guān)注
關(guān)注
22文章
2986瀏覽量
47798 -
OpenVINO
+關(guān)注
關(guān)注
0文章
73瀏覽量
139
發(fā)布評論請先 登錄
相關(guān)推薦
評論