ONNX,Open Neural Network Exchange,即開放神經網絡交換,是一種針對機器學習模型而設計的開放文件格式,用於存儲訓練好的模型。不同的人工智慧框架(如Pytorch、MXNet等)可以採用相同格式存儲模型數據並進行交互。ONNX為AI模型提供了開放源代碼格式,包括深度學習和傳統機器學習。它定義了一個可擴展的計算圖模型,以及內置操作符和標準的數據類型。ONNX能夠讓AI開發人員隨著項目的發展選擇更合適的工具。目前,正專注於推斷(scoring)所需的功能。
ONNX的規範及代碼主要由微軟、亞馬遜、Facebook和IBM等科技公司和研究機構共同開發。其所建立的ONNX開源的人工智慧生態圈,旨在為機器學習算法和軟體工具制定開放標準,以促進人工智慧行業的創新與合作。
ONNX以開放源代碼的方式託管在Github上。目前,官方支持加載ONNX模型並進行推理的深度學習框架有: Caffe2、PyTorch、 MXNet、ML.NET、TensorRT 和 Microsoft CNTK,並且 TensorFlow 也非官方的支持ONNX。實現不同框架之間的互操作性,簡化從研究到生產的路徑,有助於提高AI社區的創新速度。
發展歷程
ONNX最初名為Toffee,由Facebook的PyTorch團隊開發。2017年9月,更名為ONNX,並由Facebook和Microsoft發布。後來IBM、Huawei、Intel、AMD、Arm和Qualcomm都宣布支持ONNX。
2017年10月,Microsoft宣布將其Cognitive Toolkit和Project Brainwave平台納入ONNX。2017年12月,ONNX發布第一個正式版本(v1.0)。
2019年11月,ONNX加入Linux Foundation AI。該組織是一家致力於構建人工智慧(AI)、機器學習(ML)和深度學習(DL)領域開源創新生態系統的組織,推動人工智慧和數據領域的開源創新。
2020年10月,Zetane Systems成為ONNX生態系統的成員。
ONNX的目的
ONNX使開發者能夠在不同框架間轉換,進行互操作。開發者可以使用喜歡的框架,而不用擔心對推理的影響。框架的共享優化還會使硬體供應商和其他公司能夠針對ONNX,可以一次性改進多個框架的人工神經網絡性能。
ONNX 支持的框架
ONNX社區提供工具,幫助開發者創建和部署深度學習模型,支持的框架有:
-
Yandex CatBoost
-
Chainer - 基於Python的深度學習框架
-
Cognitive Toolkit - Microsoft Cognitive Toolkit (CNTK) 是一個開源工具包,通過定向圖將神經網絡描述為一系列計算步驟。CNTK 已不再積極開發。
-
CoreML
-
Optimum - Optimum是Transformers的擴展,以包集合的形式進行分發。Optimum提供了一套性能優化工具,以最高效率在目標硬體上訓練和運行模型。
-
Keras - Python編寫的開源人工神經網絡庫
-
LibSVM - 支持向量機庫(Support Vector Machines,SVM),支持C-SVM分類、nu-SVM分類、one-class-SVM、epsilon-SVM回歸、nu-SVM回歸,以及C-SVM分類的自動模型選擇工具
-
Matlab - Deep Learning Toolbox 包含一系列算法、預訓練模型和應用程序,為您設計和實現深度神經網絡提供框架。
-
MindSpore - 是由華為推出的新一代全場景AI開源計算框架
-
MosaicML Composer - 是一個PyTorch庫,能夠更快、更低的成本和更高的精度訓練神經網絡。
-
MXNet - MXNet是一個深度學習框架。它讓您能夠將符號和命令式編程相結合,以實現最高效率和工作效率。MXNet的核心包含一個動態依賴調度器,可自動並行化符號和命令式操作。
-
MyCaffe - C++ CAFFE開源項目的 C# 重寫版本。
-
NCNN - 為手機端極致優化的高性能神經網絡前向計算框架。
-
NeoML - NeoML是一個端到端的機器學習框架,支持構建、訓練和部署機器學習模型。
-
Neural Network Libraries - 一個深度學習框架
-
PaddlePaddle - 飛槳(PaddlePaddle)以百度多年的深度學習技術研究和業務應用為基礎,是中國首個自主研發、功能完備、 開源開放的產業級深度學習平台,集深度學習核心訓練和推理框架、基礎模型庫、端到端開發套件和豐富的工具組件於一體。
-
PyTorch - 針對深度學習, 並且使用 GPU 和 CPU 來優化的 tensor library。
-
DLPy - SAS Viya中提供的SAS深度學習功能的高級Python庫。
-
Simcenter Amesim - 是一個系統仿真平台,允許設計工程師對系統性能進行虛擬評估和優化。
-
Simio - 全面向對象的仿真軟體
-
Singa - Apache SINGA是Apache頂級項目之一,專注於深度學習和機器學習模型的分布式訓練
-
SciKit Learn - 是一個建立在SciPy上的 Python 編程語言的機器學習庫
-
Tengine - 由 OPEN AI LAB 主導開發,實現了深度學習神經網絡模型在嵌入式設備上的快速、高效部署需求。
-
TensorFlow - 端到端開源機器學習平台
-
Tribuo - 一個用於構建和部署機器學習模型的Java庫。
-
XGBoost
-
Wolfram - 計算機編程語言,具有用於神經網絡機器學習系統的構建、培訓和部署的最先進的功能.
-
Zama - 使用同態加密保護隱私的開源加密工具
-
...
結束語
ONNX是一種機器學習模型的開放標準,提供了開放的源代碼格式。許多AI框架的模型都可以轉換為標準的ONXX格式,可以在各種平台和設備上運行。