【推理引擎】ONNXRuntime 的架构设计
生活随笔
收集整理的這篇文章主要介紹了
【推理引擎】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的認識還不夠深入,因此可能會存在一些錯誤,希望多多指正,深入交流。
特色:
- 全局變換(Global transformations):這種優化方式需要對整張計算圖進行分析并優化;在源碼中,每種變換都繼承自 GraphTransformer 類;
- 局部變換(Local transformations):這種優化方式相當于定義一些簡單的重寫規則(rewriting rules),比如消除一些沒有具體操作的圖節點(eg.推理階段的dropout節點);與全局變換不同,重寫規則一般只針對圖中的部分節點,也就是說需要先判斷圖中的節點是否滿足重寫條件,然后再決定是否實施變換;在源碼中,每種重寫規則都繼承自 RewriteRule 類,但是最后會使用 GraphTransformer 的一個派生類 RuleBasedGraphTransformer ,將所有的 RewriteRule 類聚合起來。
從更高視野看ONNXRuntime系統結構
從這張圖中,我們可以看出ONNXRuntime的執行流程。
由于很多EP都會對一些特定的算子做特殊優化,因此在分割子圖時,ONNXRuntime希望充分利用這些EP的能力,但是仍然會存在一些算子不能被EP執行,或者高效執行,這時就需要設定一個默認的EP進行兜底,這個角色往往由CPU承擔。
計算圖分割的策略:首先設置可用的EP,比如
ort_sess = ort.InferenceSession('onnx\_model/resnet50.onnx', providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])然后依照providers中設定的順序為每個EP充分分配其可以執行的子圖,為了確保每個子圖都被執行,一般會講CPU EP放置在最后。ONNXRuntime當前只支持同步的運行模式,并且由其控制整個計算圖的運行。
總結
以上是生活随笔為你收集整理的【推理引擎】ONNXRuntime 的架构设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html语言span标签,html 中s
- 下一篇: 科技界、IT届的外号