日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【推理引擎】ONNXRuntime 的架构设计

發布時間:2023/12/18 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【推理引擎】ONNXRuntime 的架构设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python微信訂餐小程序課程視頻

https://edu.csdn.net/course/detail/36074

Python實戰量化交易理財系統

https://edu.csdn.net/course/detail/35475
ONNXRuntime,深度學習領域的神經網絡模型推理框架,從名字中可以看出它和 ONNX 的關系:以 ONNX 模型作為中間表達(IR)的運行時(Runtime)。

本文許多內容翻譯于官方文檔:https://onnxruntime.ai/docs/reference/high-level-design.html ,并適當地添加一些自己的理解,由于對ONNXRuntime的認識還不夠深入,因此可能會存在一些錯誤,希望多多指正,深入交流。

特色:

  • 在不同平臺上,最大限度地、自動地使用定制的加速器(accelerators)和運行時(runtimes);
  • 針對定制的加速器和運行時,提供良好的抽象和運行時(onnxruntime)來支持運行,這里的抽象也被稱之為EP(Execution Provider,eg. CUDA、TensorRT、OpenVINO、ROCm等)。每個EP都各自定義自己的功能,比如內存分配、可以執行的單個的或融合的節點(注意:本文中所說的節點就是算子,兩者等同;conv屬于單個的算子,conv_bn_relu屬于融合的算子),這些功能需要以標準的API形式暴露給 ONNXRuntime,以供其調用;
  • ONNXRuntime并不要求每個EP都完全支持ONNX中定義的所有算子,這也就意味著 ONNXRuntime 可能需要在異構環境中才能完整的執行完一個模型,這里的異構環境是指涉及到多個計算硬件,比如CPU和GPU;
  • 支持多種圖優化(Graph Optimization),主要分為兩類:
    • 全局變換(Global transformations):這種優化方式需要對整張計算圖進行分析并優化;在源碼中,每種變換都繼承自 GraphTransformer 類;
    • 局部變換(Local transformations):這種優化方式相當于定義一些簡單的重寫規則(rewriting rules),比如消除一些沒有具體操作的圖節點(eg.推理階段的dropout節點);與全局變換不同,重寫規則一般只針對圖中的部分節點,也就是說需要先判斷圖中的節點是否滿足重寫條件,然后再決定是否實施變換;在源碼中,每種重寫規則都繼承自 RewriteRule 類,但是最后會使用 GraphTransformer 的一個派生類 RuleBasedGraphTransformer ,將所有的 RewriteRule 類聚合起來。

    從更高視野看ONNXRuntime系統結構

    從這張圖中,我們可以看出ONNXRuntime的執行流程。

  • ONNXRuntime 首先將 ONNX 模型轉變為 In-memory 形式;
  • 針對這個模型執行一些與EP無關的優化;
  • 根據設置的EP(可能會有多個),將整體計算圖分割成多個子圖;
  • 每個子圖都被分配到一個相應的EP中,分配過程中要確保這個EP能夠執行該子圖;
  • 由于很多EP都會對一些特定的算子做特殊優化,因此在分割子圖時,ONNXRuntime希望充分利用這些EP的能力,但是仍然會存在一些算子不能被EP執行,或者高效執行,這時就需要設定一個默認的EP進行兜底,這個角色往往由CPU承擔。

    計算圖分割的策略:首先設置可用的EP,比如

    ort_sess = ort.InferenceSession('onnx\_model/resnet50.onnx', providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])

    然后依照providers中設定的順序為每個EP充分分配其可以執行的子圖,為了確保每個子圖都被執行,一般會講CPU EP放置在最后。ONNXRuntime當前只支持同步的運行模式,并且由其控制整個計算圖的運行。

    總結

    以上是生活随笔為你收集整理的【推理引擎】ONNXRuntime 的架构设计的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。