TensorFlow?PyTorch?Paddle?AI工具庫生態之爭:ONNX將一統天下


TensorFlow?PyTorch?Paddle?AI工具庫生態之爭:ONNX將一統天下

文章插圖
作者:韓信子@ShowMeAI 深度學習實戰系列:https://www.showmeai.tech/tutorials/42 本文地址:https://www.showmeai.tech/article-detail/319 聲明:版權所有,轉載請聯系平臺與作者并注明出處 收藏ShowMeAI查看更多精彩內容

TensorFlow?PyTorch?Paddle?AI工具庫生態之爭:ONNX將一統天下

文章插圖
當今的很多AI算法落地,我們都需要依賴特定的機器學習框架,現在比較熱門的 AI 工具庫如 TensorFlow 和 PyTorch 都出自大廠 , 并且有很好的生態和資源,借助它們我們可以很快速完成典型的一些任務,如圖像分類或自然語言處理 。
然而 , 工具庫和工具庫之間的相互切換 , 是一件很麻煩的事情 , 比如某公司團隊開發主要使用TensorFlow,然而現在有一個深度算法,需要使用 caffe2 部署在移動設備上,那我們需要用 caffe2 重寫模型重新訓練,這是一個非常耗時耗力的過程 。
ONNX 便應運而生,TensorFlow、Caffe2、PyTorch、paddlepaddle、Microsoft Cognitive Toolkit、Apache MXNet 等主流框架都對 ONNX 有著不同程度的支持 。這就便于了我們的算法及模型在不同的框架之間的遷移 。
TensorFlow?PyTorch?Paddle?AI工具庫生態之爭:ONNX將一統天下

文章插圖
ONNX(Open Neural Network Exchange)是一種針對機器學習所設計的開放式的文件格式,用于存儲訓練好的模型 。它使得不同的人工智能框架(如PyTorch,TensorRT,MXNet)可以采用相同格式存儲模型數據并交互 。ONNX的規范及代碼主要由微軟,亞馬遜,Facebook 和 IBM 等公司共同開發,以開放源代碼的方式托管在Github上 。
ONNX 官方資源
  • ONNX 官方網站:https://onnx.ai/

TensorFlow?PyTorch?Paddle?AI工具庫生態之爭:ONNX將一統天下

文章插圖
  • ONNX 官方Github地址:https://github.com/onnx/onnx

TensorFlow?PyTorch?Paddle?AI工具庫生態之爭:ONNX將一統天下

文章插圖
  • 支持的工具庫:

TensorFlow?PyTorch?Paddle?AI工具庫生態之爭:ONNX將一統天下

文章插圖
為什么需要ONNX機器學習/深度學習的出現和蓬勃發展的背景下 , 深度學習/機器學習模型訓練與執行的框架/庫的數量呈指數級增長 。有兩大原因促成這個增長:
  • 硬件供應商開發了自己的框架以實現垂直集成并使其更容易為他們的硬件開發模型
  • 開發自己的框架以針對特定用例實現最佳性能的軟件供應商

TensorFlow?PyTorch?Paddle?AI工具庫生態之爭:ONNX將一統天下

文章插圖
深度學習框架數量的激增導致整個AI生態系統碎片化 , 也使跨框架或硬件生態系統的工作變得困難 。ONNX 的誕生是為了消除框架之間以及不同硬件生態系統之間互操作性的障礙 。
什么是ONNXONNX 是一個開放規范,包含以下定義:
計算圖模型存儲文件格式模型:是一個保存版本信息和元數據的非循環計算數據流圖 。
圖:包含模型中數據流圖的名稱、形成圖的計算節點列表、圖的輸入和輸出 。
計算節點:圖中的每個計算節點都接受零個或多個 定義類型、一個或多個定義類型的輸出以及特定節點對其輸入執行的操作類型 。
TensorFlow?PyTorch?Paddle?AI工具庫生態之爭:ONNX將一統天下

文章插圖
標準數據類型ONNX 作為標準支持以下數據類型列表:
【TensorFlow?PyTorch?Paddle?AI工具庫生態之爭: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 的核心設計理念是:
  • 互操作性
  • 可移植性

TensorFlow?PyTorch?Paddle?AI工具庫生態之爭:ONNX將一統天下

文章插圖
如上圖所示,ONNX 希望通過提供一個高效的接口將模型從一個框架轉換到另一個框架,從而成為不同框架之間的中介 。
下表中列出了將模型從一些最常見的AI框架轉換為 ONNX 格式的工具 。
TensorFlow?PyTorch?Paddle?AI工具庫生態之爭:ONNX將一統天下

推薦閱讀