衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何解決模型部署時出現算子不匹配問題

英特爾物聯網 ? 來源: 英特爾物聯網 ? 2023-12-08 15:30 ? 次閱讀

作者:顏國進英特爾邊緣計算創新大使

01前言

英特爾發行版 OpenVINO 工具套件基于 oneAPI 而開發,可以加快高性能計算機視覺深度學習視覺應用開發速度工具套件,適用于從邊緣到云的各種英特爾平臺上,幫助用戶更快地將更準確的真實世界結果部署到生產系統中。通過簡化的開發工作流程,OpenVINO 可賦能開發者在現實世界中部署高性能應用程序和算法

OpenVINO 2023.2 于 2023 年 11 月 16 日發布,該工具包帶來了挖掘生成人工智能全部潛力的新功能。更多的生成式 AI 覆蓋和框架集成,以最大限度地減少代碼更改,并且擴展了對直接 PyTorch 模型轉換的模型支持。支持更多新的模型,包括 LLaVA、chatGLM、Bark 和 LCM 等著名模型。支持更廣泛的大型語言模型(LLM)和更多模型壓縮技術,支持運行時推理支持以下 Int4 模型壓縮格式,通過神經網絡壓縮框架(NNCF)進行本機 Int4 壓縮等一系列新的功能。

通過最新的 OpenVINO 更新信息,我們可以看出,OpenVINO 其實是在不斷更新迭代,并且適配更多新的模型。其主要原因是不少新出現的模型可能會帶來更多新的算子,而 OpenVINO 可能會在后續的版本更新中才會適配。但如果我們當前階段需要使用 OpenVINO 部署該深度學習模型,那我們該怎么做?

其實對于一些編程大佬,以及對 OpenVINO 有深入研究的人,他們可以對 OpenVINO 源碼進行修改,然后自己寫模型算子,添加到 OpenVINO 中。但是,開發算子的門檻是很高的,對于大多數開發者來說,這是很困難很難實現的。

在之前部署 RT-DETR 模型時,我也遇到了該模型在 OpenVINO 使用 GPU 設備部署出現算子不支持問題。因此在該文章中,我將結合該問題的解決過程,向大家展示對于大多數開發者,如何解決模型部署時出現算子不匹配問題。

02提交 Issues

OpenVINO 是在 GitHub 上開源的一個項目,源碼開源,因此我們可以將源碼下載下來自己進行編譯,因此我們可以修改源碼,但是對于大多數開發者來說,修改源碼是很難實現的。GitHub 上的開源項目提供了 Issues 功能,開發者在使用時如果遇到問題,可以通過提交 Issues 向官方開發人員求助。

提交 Issues 的流程如下:

01訪問 OpenVINO 廠庫 Issues 頁面,然后創建一個 [new Issues]

OpenVINO 廠庫Issues 頁面:

https://github.com/openvinotoolkit/openvino/issues

ec08d3d6-957b-11ee-8b88-92fbcf53809c.png

02選擇一個 Issues 類型,可以根據自己的問題類型進行選擇

ec220130-957b-11ee-8b88-92fbcf53809c.png

03選擇完類型后,就可以根據自己的問題情況,填寫相關的內容

ec49e27c-957b-11ee-8b88-92fbcf53809c.png

04以該問題為例,簡單介紹一下 Issues 內容:

首先是基礎內容填寫,主要包括 OpenVINO 版本、開發平臺、推理設備、模型框架、所部署的模型以及問題的簡單描述。對于該問題,所提交的內容如下所示:

ec6e5bac-957b-11ee-8b88-92fbcf53809c.png

接下來是詳細復述問題出現的流程,為了讓開發者能夠更清楚地了解問題,這一不需要寫的非常詳細,確保開發人員能夠完整復現該問題。如果復現步驟比較簡單,可以在此處進行詳細描述,如果問題副相比較復雜,并且存在多個文件,那就需要創建一個 GitHub 廠庫存放相關文件。

最后一步就是添加錯誤日志輸出,主要是為了讓開發人員根據日志確認是否成功復現問題,或者是可以根據日志輸出定位問題所在。

在提交 Issues 后,OpenVINO 官方人員會根據問題內容,分配開發人員進行解決,此時我們就只需要等待 OpenVINO 官方回復即可。

03編譯 OpenVINO 源碼

上一步中我們已經相關方求助,不久之后便可以獲得官方的解答,但是官方的解答如果涉及到源碼的修改,可能對于大多數開發者來說會無從下手,對于涉及到源碼的改動,如果想直接在項目中使用,就需要自行進行源碼編譯。因為你所提出的問題官方給出的解決方案如果比較有價值的話,可能會在后續的版本中修復,并發布到最新版本中。但對于我們使用者來說,我們需要立刻就使用,而無法等待到下一個版本發布。因此,我們將結合官方給的回復與改動,基于 Windows 平臺,一步步從源碼開始,實現源碼編譯與使用。

3.1 下載源碼

OpenVINO 源碼可以通過 Git 進行下載,使用 Git 依次運行下面代碼:

git clone https://github.com/openvinotoolkit/openvino.git
cd openvino
git submodule update --init

左滑查看更多

由于網絡問題,此處下載可能較慢,但一定要保證上面下載的一些附加依賴能夠完整下載,不然后面編譯會出現錯誤。如果后面生成編譯文件時出現項目缺少,那主要原因就是此處因為網絡原因,有一些文件沒有下載下來,此處我也是下載了好幾次才下載下來完整的文件。

3.2 修改源碼

上一步我們已經下載完源碼,下一步就是需要根據官方給的修改意見對源碼進行修改,如下圖所示,該截圖為官方提供的源碼修改意見:

ecb38d44-957b-11ee-8b88-92fbcf53809c.png

在該返回意見中,我們需要在源碼中增加一些代碼,所以此處大家可以根據情況對源碼進行修改即可。

3.3源碼編譯

上一步中已經下載并修改好了源碼,接下來就可以進行編譯了,此處我們采用 Cmake+vs2022 的方式進行編譯,通過 Cmake 編譯生成 VS2022 項目,然后使用 VS 編譯項目源碼。

首先依次運行下面兩條命令:

mkdir build && cd build
cmake -G "Visual Studio 17 2022"  -DCMAKE_BUILD_TYPE=Debug

左滑查看更多

此處需要把“”替換成自己的 OpenVINO 路徑,運行完第一條命令后,會創建 build 文件夾并切換到該文件夾中。運行完第二條命令后,如下圖所示,會根據項目中的 CMakeLists 文件進行編譯,最后編譯成功的輸出如第二張圖所示。

edaf0052-957b-11ee-8b88-92fbcf53809c.pngedc465b4-957b-11ee-8b88-92fbcf53809c.png

如果得不到上圖效果,說明編譯中出現了問題,需要回頭查找相關的錯誤。跟俊之前的編譯經驗,主要問題是出現在第一步中,主要原因是因為網絡問題導致的相關配置沒有下載。最后編譯成功后,會在 build 文件中出現 OpenVINO.sln 項目解決方案。

ede710e6-957b-11ee-8b88-92fbcf53809c.png

接下來我們使用 VS2022 打開該解決方案,然后通過設置 Debug 或 Release 來選擇生成的動態鏈接庫是什么版本,然后右擊 ALL_BUILD 項目,點擊生成,便可以運行項目進行源碼編譯。

ee0659ec-957b-11ee-8b88-92fbcf53809c.png

友情提示,這一步源碼編譯由于涉及的代碼文件角度,因此需要較長的時間來生成。

3.4 獲取編譯后的動態鏈接庫

項目運行成功后,我們可以在下面路徑下找到編譯出的動態鏈接庫文件,可以看出,編譯所生成的 .dll 文件以及 .lib 文件,是我們所下載的官方發布的 OpenVINO 發行版 Runtime 中的文件是一致的,因此在后續使用時,我們只需要將我們編譯生成的動態鏈接庫文件替換到當前項目中即可。

ee2bc27c-957b-11ee-8b88-92fbcf53809c.png

04實際項目測試

該案例主要是基于 RT-DETR 模型使用 GPU 部署出現問題為例,最后我們回到該案例中,測試是否解決了我們的問題。關于使用在 C++ 部署 RTDETR 模型的流程可以參考我的上一篇文章:《基于OpenVINOC++ API部署RT-DETR模型|開發者實戰》,因此此處對于 C++ 項目配置不再作過多講解。

如下圖所示,該圖片是我們使用當前發行版本 OpenVINO 2023.2 運行結果,此處我們使用的是 GPU.0 集成顯卡運行推理,可以看出,模型在推理階段會出現錯誤導致程序崩潰結束。

ee50cfcc-957b-11ee-8b88-92fbcf53809c.png

接下來我們用我們上面自行編譯生成的動態鏈接庫運行程序,可以看出,在使用 GPU.0 集成顯卡運行推理時,錯誤已經消失了,并且成功運行模型推理,并打印出了結果。

ee719496-957b-11ee-8b88-92fbcf53809c.png

通過對比測試,說明官方所給出的解決方案是正確的,我們也成功根據官方給出的解決方案解決了當前問題,并且不用等待官方發布下一個版本便可以提前使用,方便大家。

05總結

在本文中,我們結合一個模型部署案例,向大家講解了使用 OpenVINO 時出現算子不匹配等問題時,對于我們使用者來說,如何在官方開發者的幫助下,解決自己所遇到的問題。另外,通過該方式,我們也向 OpenVINO 反饋了代碼中存在的 Bug,在解決我們問題的同時,也積極為開源做出了自己的貢獻。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 英特爾
    +關注

    關注

    61

    文章

    10008

    瀏覽量

    172336
  • 模型
    +關注

    關注

    1

    文章

    3309

    瀏覽量

    49224
  • 邊緣計算
    +關注

    關注

    22

    文章

    3121

    瀏覽量

    49523
  • OpenVINO
    +關注

    關注

    0

    文章

    95

    瀏覽量

    228

原文標題:當 OpenVINO? 不支持你所部署模型算子時,你該如何做?|開發者實戰

文章出處:【微信號:英特爾物聯網,微信公眾號:英特爾物聯網】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    使用CUBEAI部署tflite模型到STM32F0中,模型創建失敗怎么解決?

    CRC IP,用MX生成工程時已經啟用了CRC,代碼中也有。 但是依舊無法生成模型。 想問問該如何解決,還是說F0還是無法部署AI模型
    發表于 03-15 08:10

    使用TVM量化部署模型報錯NameError: name \'GenerateESPConstants\' is not defined如何解決?

    各位好,我在使用TVM部署模型時,遇到一下錯誤,請問如何解決?我進esp.py文件看,有如下兩個函數是找不到定義的: GenerateESPConstants(), ExtractConstantsFromPartition
    發表于 06-28 10:50

    設計實戰:怎么解決阻抗匹配問題

    可能會受不了——這就是負載過輕的情況。另一個例子,不知道大家有沒有過這樣的經歷:就是看不清樓梯時上/下樓梯,當你以為還有樓梯時,就會出現“負載匹配”這樣的感覺了。當然,也許這樣的例子不太恰當,但我們可以拿它來理解負載
    發表于 01-06 16:07

    求一維數組大小,出現類型匹配的問題

    `求一維數組大小,出現類型匹配的問題,改過類型也不行`
    發表于 03-13 16:38

    Hibernate模型匹配的解決方法

    模型匹配(阻抗匹配)Java面向對象語言,對象模型,其主要概念有:繼承、關聯、多態等;數據庫
    發表于 05-23 06:34

    系統內的阻抗匹配問題淺析

    存在的阻抗匹配問題大家遇到的比較多,兩兩之間的差異性也比較明顯,問題主要出現在BOM和Java Object之間的阻抗匹配上。從字面上看
    發表于 05-31 07:02

    VHDL類型匹配錯誤

    嗨,我正在嘗試編寫以下文件DorQ.vhd,但Quartus 2一直給我一個錯誤錯誤(10381):在DorQ.vhd(49)的VHDL類型匹配錯誤:索引名稱返回一個類型匹配的值
    發表于 03-23 07:12

    部署基于嵌入的機器學習模型

    1、如何在生產中部署基于嵌入的機器學習模型  由于最近大量的研究,機器學習模型的性能在過去幾年里有了顯著的提高。雖然這些改進的模型開辟了新的可能性,但是它們只有在可以
    發表于 11-02 15:09

    模塊間接口設計匹配問題

    模塊間接口設計匹配引起的問題   如果沒有一個技術能力很強的集成者,往往在模塊間容易出現設計上的錯誤。這種情況是災難性的,雙方都是在
    發表于 11-21 14:01 ?732次閱讀

    何解決打印模型出現虛層的現象?

    如果你會使用3D打印機,那么你的各種奇思妙將想變成現實,一個嶄新的DIY世界正向你敞開大門。但是對于一些新手朋友,在剛開始使用3D打印機時,打印模型出現虛層,這樣就會影響模型的精度和美觀,那么,我們今天就教大家如
    的頭像 發表于 06-19 11:15 ?3164次閱讀

    ONNX格式模型部署兼容性框架介紹

    ? ONNXRUNTIME介紹 ONNX格式模型部署兼容性最強的框架 ONNXRUNTIME,基本上不會有算子不支持跟兼容的情況出現,只要
    的頭像 發表于 06-19 11:50 ?2754次閱讀
    ONNX格式<b class='flag-5'>模型</b><b class='flag-5'>部署</b>兼容性框架介紹

    自定義算子開發

    一個完整的自定義算子應用過程包括注冊算子算子實現、含自定義算子模型轉換和運行含自定義op模型四個階段。在大多數情況下,您的
    的頭像 發表于 04-07 16:11 ?2872次閱讀
    自定義<b class='flag-5'>算子</b>開發

    opencv寫好的算子,比如找邊 找圓 模版匹配

    opencv寫好的算子,比如找邊 找圓 模版匹配
    的頭像 發表于 10-16 09:54 ?537次閱讀

    arcgis空間參考與數據框匹配何解

    當使用ArcGIS軟件進行空間數據處理時,經常會遇到空間參考與數據框匹配的問題。這種匹配可能導致數據顯示不正確,分析結果不準確,甚至引發其他錯誤。本文將詳細介紹空間參考與數據框
    的頭像 發表于 02-25 11:17 ?1.4w次閱讀

    BOM與焊盤為什么匹配

    何解決BOM與焊盤匹配的問題? ①同步更新BOM與焊盤設計 在設計變更時,確保BOM和焊盤設計同步更新,避免信息不一致。
    的頭像 發表于 04-12 12:33 ?754次閱讀
    百家乐官网家| 百家乐室系统软件| 澳门百家乐先赢后输| 百家乐纯数字玩法| 威尼斯人娱乐城地图| 云顶国际| 百家乐官网玩揽法的论坛| 百家乐单机游戏免费| 大发888娱乐城下载最新版| 百家乐官网视频麻将| 百家乐官网稳赢秘诀教学| 澳门百家乐会出千吗| tt娱乐城网站| 伟德百家乐官网下载| 香港百家乐官网的玩法技巧和规则 | 百家乐注码论坛| 威尼斯人娱乐城开户| 立即博最新网址| 沙龙百家乐官网娱乐场开户注册 | 大发888在线娱乐城| 百家乐官网自动下注| 百家乐开户送10彩金| 威尼斯人娱乐网最新地址| 网络百家乐官网可靠吗| 百家乐玩法的秘诀| 大发888组件下载| 清新县| 24山方位吉凶| 皇冠现金网提款问题| 哪个百家乐官网网站信誉好| 澳门百家乐官网怎么下载| 德州扑克官网| 百家乐官网单机游戏下| 大发888娱乐城亚付宝| 百家乐官网分路单| 大家旺百家乐的玩法技巧和规则 | 顶级赌场连环夺宝下载| 百家乐官网无损打法| 百家乐追注法| 百家乐官网群东方鸿运| 温州市百家乐鞋业|