了解使用
Open Neural Network Exchange
(ONNX) 如何有助於將機器學習模型的推斷最佳化。 推斷 (或模型評分) 是將部署的模型用於預測的階段,通常用於生產資料。
因為您需要微調模型和推斷程式庫以充分利用硬體功能,所以很難將用於推斷 (或模型評分) 的機器學習模型最佳化。 如果您想要在不同種類的平台上 (雲端/邊緣、CPU/GPU 等) 獲得最佳效能,則問題會變得非常困難,因為每個平台各有不同的功能和特性。 如果您的模型來自各種架構而需要在各種平台上執行,複雜性會再增加。 若要將所有不同組合的架構和硬體最佳化,需要耗費大量時間。 因此,我們需要一種只要在您慣用的架構中定型一次,就能在雲端或邊緣上的任何地方執行的解決方案。 這就是 ONNX 的誕生原因。
Microsoft 和一群合作夥伴共同建立了 ONNX 來作為呈現機器學習模型的開放標準。
許多架構
(包括 TensorFlow、PyTorch、SciKit-Learn、Keras、Chainer、MXNet、MATLAB 和 SparkML) 的模型都可以匯出或轉換為標準的 ONNX 格式。 一旦模型採用 ONNX 格式,就可以在各種不同的平台和裝置上執行。
ONNX Runtime
是高效能的推斷引擎,可將 ONNX 模型部署到生產環境。 其已針對雲端和邊緣進行了最佳化,可在 Linux、Windows 和 Mac 上運作。 以 C++ 撰寫,但其也有 C、Python、C#、Java 和 Javascript (Node.js) API 可供用於各種環境。 ONNX Runtime 同時支援 DNN 和傳統的 ML 模型,並與不同硬體上的加速器整合,例如 NVidia GPU 上的 TensorRT、Intel 處理器上的 OpenVINO、Windows 上的 DirectML 等等。 藉由使用 ONNX Runtime,您可從大量的生產級最佳化、測試和持續的改進獲得好處。
ONNX Runtime 用於大規模 Microsoft 服務,例如 Bing、Office 和 Azure AI。 效能提升取決於許多因素,但這些 Microsoft 服務已實現
平均 2 倍的 CPU 效能提升
。 除了 Azure Machine Learning 服務之外,ONNX Runtime 也能在支援機器學習工作負載的其他產品中執行,包括:
Windows:執行階段內建到 Windows 中作為
Windows Machine Learning
的一部分,並在數億個裝置上執行。
Azure SQL 產品系列:對
Azure SQL Edge
和
Azure SQL 受控執行個體
中的資料執行原生評分。
ML.NET:
在 ML.NET 中執行 ONNX 模型
。
取得 ONNX 模型
您可以透過數種方式來取得 ONNX 模型:
在 Azure Machine Learning 中將新的 ONNX 模型定型 (請參閱本文底部的範例) 或使用
自動化機器學習功能
將現有模型從其他格式轉換成 ONNX (請參閱
教學課程
)
從
ONNX Model Zoo
取得預先定型的 ONNX 模型
從
Azure 自訂視覺服務
產生自訂 ONNX 模型
許多模型 (包括影像分類、物件偵測和文字處理) 均可呈現為 ONNX 模型。 如果某個模型遇到無法成功轉換的問題,請在所用個別轉換器的 GitHub 中提出問題。 您可以繼續使用現有格式的模型,直到問題解決為止。
在 Azure 中部署 ONNX 模型
Azure Machine Learning 可讓您部署、管理及監視 ONNX 模型。 使用標準
部署工作流程
和 ONNX Runtime,您可以建立裝載於雲端中的 REST 端點。 請參閱本文結尾的 Jupyter Notebook 範例,自行嘗試看看。
使用 Python 來安裝和使用 ONNX Runtime
您可在
PyPi.org
(
CPU
、
GPU
) 上取得 ONNX Runtime 的 Python 套件。 請先閱讀
系統需求
再進行安裝。
若要安裝適用於 Python 的 ONNX Runtime,請使用下列其中一個命令:
pip install onnxruntime # CPU build
pip install onnxruntime-gpu # GPU build
若要在您的 Python 指令碼中呼叫 ONNX Runtime,請使用:
import onnxruntime
session = onnxruntime.InferenceSession("path to model")
模型隨附的文件通常會告訴您使用模型所需的輸入和輸出。 您也可以使用視覺效果工具 (例如 Netron) 來檢視模型。 ONNX Runtime 也可讓您查詢模型中繼資料、輸入和輸出:
session.get_modelmeta()
first_input_name = session.get_inputs()[0].name
first_output_name = session.get_outputs()[0].name
若要推斷您的模型,請使用 run
,傳入您想要系統傳回的輸出清單 (如果您想要傳回全部則留空),以及傳入輸入值的對應。 結果是輸出清單。
results = session.run(["output1", "output2"], {
"input1": indata1, "input2": indata2})
results = session.run([], {"input1": indata1, "input2": indata2})
如需完整的 Python API 參考,請參閱 ONNX Runtime 參考文件 (英文)。
請參閱 how-to-use-azureml/deployment/onnx,以取得建立與部署 ONNX 模型的範例 Python 筆記本。
了解如何依照使用 Jupyter 筆記本來探索這項服務一文來執行筆記本。
您可以在 ONNX Runtime GitHub 中找到其他語言的用法範例。
深入了解 ONNX 或參與專案:
ONNX 專案網站
GitHub 上的 ONNX 程式碼
深入了解 ONNX Runtime 或參與專案:
ONNX Runtime 專案網站
ONNX Runtime GitHub 存放庫