?? 作者:韓信子@ShowMeAI
?? 深度學習實戰系列:https://www.showmeai.tech/tutorials/42
?? 本文地址:https://www.showmeai.tech/article-detail/319
?? 宣告:著作權所有,轉載請聯系平臺與作者并注明出處
?? 收藏ShowMeAI查看更多精彩內容
當今的很多AI演算法落地,我們都需要依賴特定的機器學習框架,現在比較熱門的 AI 工具庫如 TensorFlow 和 PyTorch 都出自大廠,并且有很好的生態和資源,借助它們我們可以很快速完成典型的一些任務,如影像分類或自然語言處理,
然而,工具庫和工具庫之間的相互切換,是一件很麻煩的事情,比如某公司團隊開發主要使用TensorFlow,然而現在有一個深度演算法,需要使用 caffe2 部署在移動設備上,那我們需要用 caffe2 重寫模型重新訓練,這是一個非常耗時耗力的程序,
ONNX 便應運而生,TensorFlow、Caffe2、PyTorch、paddlepaddle、Microsoft Cognitive Toolkit、Apache MXNet 等主流框架都對 ONNX 有著不同程度的支持,這就便于了我們的演算法及模型在不同的框架之間的遷移,
ONNX(Open Neural Network Exchange)是一種針對機器學習所設計的開放式的檔案格式,用于存盤訓練好的模型,它使得不同的人工智能框架(如PyTorch,TensorRT,MXNet)可以采用相同格式存盤模型資料并互動, ONNX的規范及代碼主要由微軟,亞馬遜 ,Facebook 和 IBM 等公司共同開發,以開放源代碼的方式托管在Github上,
?? ONNX 官方資源
- ??ONNX 官方網站:https://onnx.ai/
- ??ONNX 官方Github地址:https://github.com/onnx/onnx
- 支持的工具庫:
?? 為什么需要ONNX
機器學習/深度學習的出現和蓬勃發展的背景下,深度學習/機器學習模型訓練與執行的框架/庫的數量呈指數級增長,有兩大原因促成這個增長:
- 硬體供應商開發了自己的框架以實作垂直集成并使其更容易為他們的硬體開發模型
- 開發自己的框架以針對特定用例實作最佳性能的軟體供應商
深度學習框架數量的激增導致整個AI生態系統碎片化,也使跨框架或硬體生態系統的作業變得困難,ONNX 的誕生是為了消除框架之間以及不同硬體生態系統之間互操作性的障礙,
?? 什么是ONNX
ONNX 是一個開放規范,包含以下定義:
?? 計算圖模型存盤檔案格式
模型:是一個保存版本資訊和元資料的非回圈計算資料流圖,
圖:包含模型中資料流圖的名稱、形成圖的計算節點串列、圖的輸入和輸出,
計算節點:圖中的每個計算節點都接受零個或多個 ??定義型別、一個或多個定義型別的輸出以及特定節點對其輸入執行的操作型別,
?? 標準資料型別
ONNX 作為標準支持以下資料型別串列:
張量型別:
- Int8、Int16、Int32、Int64
- Quantized Int
- uint8, uint16, uint32, uint64
- Float16, float, double
- Bool
- String
- Complex64, complex128
非張量型別:
- Sequence
- Map
- Operators (Built-in/ Custom)
?? 算子/運算子
ONNX Graph 中的每個計算節點都執行特定的操作并產生一個或多個輸出, ONNX 標準定義了 ??運算子,ONNX圖支持的運算子串列也在不斷拓展,并通過 ONNX Opsets 保持最新狀態,每次 ONNX Opset 更新都可能新增算子支持或改進現有算子,
?? ONNX的目標
ONNX 的核心設計理念是:
- 互操作性
- 可移植性
如上圖所示,ONNX 希望通過提供一個高效的介面將模型從一個框架轉換到另一個框架,從而成為不同框架之間的中介,
下表中列出了將模型從一些最常見的AI框架轉換為 ONNX 格式的工具,
?? ONNX實作與現狀
實際上,要滿足將模型從任何其他AI框架轉換為ONNX一直是一個挑戰,主要障礙之一是這些AI框架生態的高速發展與每次版本迭代帶來的新支持(例如算子等),
模型從一個框架到另一個框架的轉換歸結為能夠表示原始模型的基礎數學運算,下圖顯示了每個框架中定義的運算子數量,實際上,目前ONNX僅支持PyTorch所有算子的約13% ,一些使用低頻 PyTorch 運算子構建的模型在轉換時還是有困難,
不過像PyTorch這樣的工具庫里,包含的很多運算子有這一樣或者類似的功能,是否需要完全同步支持也是一個問題,但ONNX開放了自定義運算子的功能,使得用戶可以 ??根據需要添加自己的功能,
即使目前 ONNX 還做不到完全支持和自由銜接所有AI工具框架,但憑借豐富的運算子集,ONNX已經可以描述來自各種框架的大多數 DNN 和 ML 模型,它的『函式』功能,使得用戶可以把暫時不支持的復雜的運算子用更原始的運算子來表達 ,
它帶來了AI生態的自由流通,隨著生態和社區的高速發展,相信在未來ONNX會成為AI生態中最終的橋梁之一,發揮巨大的作用,
參考資料
- ?? ONNX 官方網站:https://onnx.ai/
- ?? ONNX 官方Github地址:https://github.com/onnx/onnx
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/526866.html
標籤:其他
下一篇:圖資料挖掘:網路中的級聯行為
