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

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

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

3天內不再提示

通過新的ONNX導出器簡化模型導出流程

jf_pmFSk4VX ? 來源:GiantPandaCV ? 2024-01-10 09:45 ? 次閱讀

大家好。我叫Manav Dalal,今天我將講解如何通過新的ONNX導出器簡化模型導出流程。如果你還沒有聽說過ONNX,它是一種用于表示機器學習模型的開放格式。它定義了一套通用的運算符,機器學習和深度學習模型的基本原理,并提供了一個通用的文件格式,因此你可以保存并與各種工具一起使用,這樣你就可以在你喜歡的框架中進行開發而且不用太擔心與其相關的推理邏輯。

另一個很棒的地方是它真正解鎖了許多硬件優化,無論你是在處理網絡、NPU、GPU、CPU,還是其他任何設備,你都可以從ONNX訪問你的模型。這是一些可以導出onnx的合作伙伴:

2155548a-af56-11ee-8b88-92fbcf53809c.png

簡單回顧一下自PyTorch 1.2以來的情況。我們使用torch.onnx.export API導出到Onnx模型。這個舊api有很多問題,通過Torch Script tracing(torch.jit.trace)可以在模型執行時生成靜態圖。雖然這樣可以工作,但靜態圖存在很多限制。如果您有控制流程如if語句和循環,它在處理這些內容時就會表現很差。此外,它也不能很好地處理 training 和 eval 之間的細微差別。它也無法處理真正動態的輸入。

現在,我們已經有了一些解決方案如torch.jit.script(比如對控制流問題的解決)Torch.jit.script本身是Python的一個子集,因此雖然有一對一的映射,但并非所有內容都有映射…因此,有時會忽略諸如原地操作之類的東西。

但接下來我們有了新的方式——Torch Dynamo。簡而言之,在2.0版本中,它被視為一種JIT編譯器,旨在加速未修改的PyTorch程序,從而實現可用性和性能的提升。它通過重寫Python字節碼,在FX圖中獲取PyTorch操作的部分,并使用它來獲得我們想要的所有這些巨大的性能提升。它也是Torch Compile、Torch Export的基礎引擎,

2173a2fa-af56-11ee-8b88-92fbcf53809c.png

今天我要談論的是新的ONNX Exporter。我們推出的一個目前還在測試階段的新導出器。也許你們中的一些人已經使用過它,也可能有一些人還沒用過。今天我在這里希望能夠說服你們至少去試一試。它看起來有點類似于舊的API,但稍微復雜一些。你可以使用你的Torch.nn模塊以及與該模塊相關的參數進行導出(無論是位置參數還是關鍵字參數)。還有一個新的參數導出選項,你可以直接添加一些相對具體的參數。通過利用Dynamo來捕捉graph,我們可以更容易地生成與該圖形等效的ONNX,并且可以保留這些模型的動態特性。相對于以前的靜態圖,現在我們可以擁有動態圖,我們可以用它們來獲得一系列的好處。此外,onnx函數現在被用于封裝ATen運算符和nn.modules,這對于導出后的onnx轉換和lowering操作非常有用,可以去除復雜性,直接在onnx模型中保留更多語義和結構信息,這可以在許多常見的優化場景中用于子圖模式匹配。讓我給你展示一個的例子。

2198f8a2-af56-11ee-8b88-92fbcf53809c.png

你可以在這里看到不同的圖表。左側是舊的靜態圖表,這是可以的,在導出模型時工作正常,并且在某種程度上也經過了優化。但是,在中間,你可以看到現在的torch dynamo圖表是什么樣的。有更多的信息,并且所有的操作符都被捕捉在函數中。這真的很有用,因為實際上它們內聯之后,你可以看到捕捉到了更多的信息。支持了許多數據類型。這是所有操作符支持的數據類型,而不僅僅是你用于導出模型的那個數據類型。這對于之后的優化非常有用。你只會得到更多的信息。

新的torch.onnx.dynamo導出API通過可選的ExportOptions支持配置。值得注意的屬性包括:

.onnxregistry:配置ATen分解,指定ATen IR到onnx運算符的映射,并提供API來支持三種主要的自定義運算場景。
-處理不支持的ATen運算符(缺少的運算符)。
- custom operators 但是有已存在的onnx runtime support。
- custom operators 但是沒有已存在的onnx runtime support。

.fake context:torch.onnx.enablefakemode()的結果是一個上下文管理器,它啟用了導出大規模模型的虛擬模式輸入支持,這些模型通常會在使用TorchScript導出時內存溢出。

diagnostic options:導出器中深度融入了一個新的診斷系統,以提高調試能力和自助服務能力。

它返回一個ExportOutput對象,通過該對象可以進一步通過.model proto屬性進行推理或轉換,或者通過.save(path)方法直接將內存中的onnx模型序列化到磁盤以方便使用。

因此,讓我們談談我們開發的這個新API的亮點,希望你們能夠使用。正如我之前提到的,我們有可選的導出選項,并且你可以用它做很多事情。首先,有onnx注冊表,它允許你配置Aten分解,你可以為Onnx運算符預設AtenIR并進行映射,并提供API用于處理一些常見情況,比如處理不支持的A10運算符、具有現有OR支持的自定義運算符以及在Onnx運行時不支持的自定義運算符。因此,在前兩種情況下,你可以提供這些運算符,并在Onnx腳本中自己編寫它們(稍后會介紹)。這有點像一門語言,但是你基本上可以編寫這些語言或運算符,并指定它們如果不可用時應該如何編寫出來。在第三種情況下,你不僅可以編寫自定義運算符,還可以編寫所需注冊的ORT內核。

我們還有fake上下文,這要歸功于meta的虛假tensor。我們可以在不加載所有權重和運行模型的情況下導出模型。你知道,計算在如今是十分昂貴的,而且很難總是獲得足夠的計算資源來完成我們需要使用這些模型的任務,但是有了fake上下文,我們就能夠做到。我們可以在所需設備準備好可以使用的ONNX模型,而無需花費可能多達幾分鐘的時間導出該模型。我們知道之前在大型模型方面,特別是最近大家都在談論的LLAMA模型方面,使用Torch腳本導出器時會遇到問題。這是一個龐大的模型,是的,我們會遇到內存問題,但是有了fake上下文,你就不必遇到這些問題了。我們還注意到,以前的Torch腳本導出器在調試能力和自助能力方面并不好,因此,在現在有很多診斷和自助能力選項,所以當你遇到錯誤時(因為現在仍處于測試階段),很容易弄清楚該怎么做或如何解決這些錯誤。這是我們非常關注的問題,我們確實在意這個,現在,在你選擇的模型上運行導出之后,你會得到ExportOutput對象。這是一個存在于內存中的對象,你可以進行推理并通過獲取的模型 proto 屬性來進行操作。因此,你可以查看它,會有很好的選項來對他進行更改和性能更新。當然,你也可以像保存其他 Onnx 模型一樣將它保存到磁盤上,這個過程也非常簡單??傊?,效果非常好。OnnxScript 是我之前提到的用于實現新操作的方式。幾個月前,它作為一個開放的倉庫宣布出來。你可能已經讀過相關博客,也可能沒有。簡而言之,它是一種符合慣用方式的簡單方法來編寫ONNX函數。

21c00d2a-af56-11ee-8b88-92fbcf53809c.png

根據我的經驗,在以前使用Onnx時,這實際上是一件很具挑戰性的事情。我知道,像編寫自己的運算符一樣,這是一種痛苦的過程。但現在它非常簡單明了。這是一個希望你能夠閱讀的函數操作符。如果你可以,你會發現代碼相當直觀。這要歸功于OnnxScript讓它變得非常容易。它非常簡單明了,易于操作,而且對于那些不太精通技術的人來說也很易懂。所以整個過程都很容易上手。如果你選擇,你也可以直接使用OnnxScript完全編寫Onnx模型。這取決于你。但是,就像今天的演講中的其他人提到的一樣,我們將直接與Torch.export進行集成,

21dec56c-af56-11ee-8b88-92fbcf53809c.png

另外一個我提到的事情是,Onnx轉換和優化工具將很快推出,以幫助利用這些模型。我們希望這個工具能被很多運行環境使用,謝謝。下列是一些參考資料

Installrequiredpackages:

pipinstalltorchonnxscriptonnxruntime
ExportaPyTorchModeltoONNX:

Documentation:aka.ms/pytorchtoonnx
ExtendingtheONNXRegistry:

Documentation:aka.ms/onnx/registry
APIDocsforONNXDynamo:

Documentation:aka.ms/onnx/dynamo
IntroducingONNXScript:

Blog:aka.ms/onnxscript/blog1
ONNX:

Officialwebsite:aka.ms/onnx
ONNXRuntime:

Documentation:aka.ms/onnxruntime
ONNXScript:

Documentation:aka.ms/onnxscript

審核編輯:湯梓紅

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

    關注

    68

    文章

    10904

    瀏覽量

    213023
  • 模型
    +關注

    關注

    1

    文章

    3313

    瀏覽量

    49226
  • 機器學習
    +關注

    關注

    66

    文章

    8439

    瀏覽量

    133087

原文標題:《PytorchConference2023 翻譯系列》11-使用新的ONNX導出器簡化模型導出

文章出處:【微信號:GiantPandaCV,微信公眾號:GiantPandaCV】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何同時導出多個簡化圖像?

    我用Labview采集到了三個圖像,想導出他們的簡化圖像,但是同一個路徑下只能導出一個圖像,不能同時導出三個(因為導出的圖像的文件名都是一樣
    發表于 11-01 20:49

    Altium Designer導出Ansoft仿真文件的方法

    元件、IC封裝、PCB互連以及高頻器件,如天線、射頻、微波器件和生物醫學器件。通過在Altium Designer的PCB編輯中把PCB設計導出為Ansoft的中間文件,設計師可以在所需的Ansoft
    發表于 02-15 06:36

    Altium19 3D STEP模型導出

    我們的3D模型一般是提供給專業的3D軟件進行一個結構核對,那么Altium Designer 提供導出3D STEP模型的這個功能,結構工程師可以直接導出進行結構核對。接下來以AD19
    發表于 11-22 10:07

    深度探索ONNX模型部署 精選資料分享

    這篇文章從多個角度探索了ONNX,從ONNX導出ONNX和Caffe的對比,以及使用ONNX遭遇的困難以及一些解決辦法,另...
    發表于 07-20 07:41

    Kicad6.0導出step模型遇到無法導出元件的問題

    RT,kicad6.0版本導出PCB的step文件中,只有pcb的板子模型,而沒有上面元件,有時想確認pcb是否與設計結構相干涉,望大家解答。
    發表于 12-16 15:39

    如何使用Paddle2ONNX模型轉換工具將飛槳模型轉換為ONNX模型?

    如何使用Paddle2ONNX模型轉換工具將飛槳模型轉換為ONNX模型
    發表于 12-29 07:42

    EIQ onnx模型轉換為tf-lite失敗怎么解決?

    我們正在嘗試將 tflite 框架與 npu 一起使用來進行機器學習。這是我們的步驟:1)用pytorch訓練一個模型2) 以onnx格式導出模型3) eiq工具的covnert
    發表于 03-31 08:03

    如何完成PCB封裝的導出

    從PCB中導出封裝只需要有PCB文件(.Brd格式)就行,按以下操作就可完成PCB封裝的導出,具體操作如下所示:
    發表于 09-16 17:16 ?2.3w次閱讀
    如何完成PCB封裝的<b class='flag-5'>導出</b>

    SCL導入導出源文件方式

    通過選擇“僅所選塊”導出當前塊,即表中綠色底色的部分。通過選擇“包含所有關聯塊”,導出嵌套的UDT、程序塊,即表中紅色底色的部分。
    的頭像 發表于 06-07 11:09 ?1662次閱讀

    導入導出SCL源文件的步驟有哪些

    可以將SCL編寫的塊,或者全局DB以及UDT導出成源文件,可以導出塊或UDT,也可以導出所關聯嵌套的塊或者UDT,如圖7所示。
    的頭像 發表于 07-08 09:18 ?3231次閱讀
    導入<b class='flag-5'>導出</b>SCL源文件的步驟有哪些

    Altium Designer導出3D STEP模型的方法

    3D STEP 模型一般是提供給專業的3D軟件進行結構核對,如Pro/Engineer。Altium Designer 提供導出3D STEP模型的功能,結構工程師可以直接導出進行結構
    的頭像 發表于 10-12 09:22 ?4.3w次閱讀

    如何導入導出SCL源文件?

    如何導入導出SCL源文件?
    的頭像 發表于 01-16 10:41 ?2285次閱讀

    excel導出功能如何實現?

    最近我做過一個MySQL`百萬級別`數據的`excel`導出功能,已經正常上線使用了。 這個功能挺有意思的,里面需要注意的細節還真不少,現在拿出來跟大家分享一下,希望對你會有所幫助。 原始需求:用戶在`UI界面`上點擊`全部導出`按鈕,就能
    的頭像 發表于 05-11 18:17 ?1249次閱讀
    excel<b class='flag-5'>導出</b>功能如何實現?

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

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

    arcmap怎么導出矢量數據

    軟件。你可以在計算機上的“開始”菜單中搜索并打開該軟件。 第二步:加載矢量數據 在 ArcMap 中導出矢量數據之前,你需要加載你要導出的矢量數據。這可以通過以下方式實現: 點擊“文件”菜單,選擇“添加數據”; 瀏覽到你的矢量
    的頭像 發表于 02-25 15:13 ?3643次閱讀
    百家乐网哪一家做的最好呀| 卡迪拉娱乐城开户| 视频百家乐| 百家乐官网赌场导航| 线上百家乐攻略| 利记国际娱乐| 百家乐官网大娱乐场开户注册| 百家乐小路是怎么画的| 皇冠网络刷qb软件| 百家乐官网怎么才能包赢| 百家乐二路珠无敌稳赢打法| 革吉县| 百家乐注码技巧| 棋牌休闲游戏| 百博百家乐官网的玩法技巧和规则| 澳门百家乐路单| 百家乐官网赢的秘诀| 百家乐视频对对碰| 博狗备用网址| 优博百家乐官网现金网平台 | 三门峡市| 百家乐现场新全讯网| 宝马会娱乐城官网| 博狗百家乐官网的玩法技巧和规则 | 利博国际娱乐| 百家乐官网秘籍下注法| 大发888真钱游戏下载到桌面| 老k百家乐官网游戏| 大发888皇冠娱乐城| 百家乐官网斗地主下载| 二八杠自行车| 百家乐官网北京| 太阳城| 月华百家乐官网的玩法技巧和规则 | 响水县| 百家乐中的小路怎样| 百家乐官网投注软件有用吗| LV百家乐客户端LV| 易发娱乐场| 澳门百家乐国际娱乐城| 名仕国际棋牌官方网|