共用方式為


ONNX 與 Azure Machine Learning

了解使用 Open Neural Network Exchange (ONNX) 如何有助於將機器學習模型的推斷最佳化。 推斷模型評分,是使用已部署模型來產生生產資料預測的程序。

將用於推斷的機器學習模型最佳化需要您微調模型和推斷程式庫以充分利用硬體功能。 如果您想要在不同種類的平台上 (例如雲端或邊緣、CPU或GPU 等) 獲得最佳效能,則此工作會變得非常複雜,因為每個平台各有不同的功能和特性。 如果您的模型來自需要在不同平台上執行的各種架構,複雜性會再增加。 若要將所有不同組合的架構和硬體最佳化,需要耗費大量時間。 因此,有用的解決方案是在慣用的架構中定型模型一次,然後在雲端或邊緣上的任何位置執行,此解決方案位於 ONNX 所在的任何地方。

什麼是 ONNX?

Microsoft 和一群合作夥伴共同建立了 ONNX 來作為呈現機器學習模型的開放標準。 許多架構 (包括 TensorFlow、PyTorch、SciKit-Learn、Keras、Chainer、MXNet 和 MATLAB) 的模型都可以匯出或轉換為標準的 ONNX 格式。 一旦模型採用 ONNX 格式,就可以在各種不同的平台和裝置上執行。

ONNX Runtime 是高效能的推斷引擎,可將 ONNX 模型部署到生產環境。 其已針對雲端和邊緣進行了最佳化,可在 Linux、Windows 和 Mac 上運作。 當 ONNX 以 C++ 撰寫時,其也有 C、Python、C#、Java 和 Javascript (Node.js) API 可供用於許多環境。 ONNX Runtime 同時支援深度神經網路 (DNN) 和傳統機器學習模型,並與不同硬體上的加速器整合,例如 Nvidia GPU 上的 TensorRT、Intel 處理器上的 OpenVINO 和 Windows 上的 DirectML。 藉由使用 ONNX Runtime,您可從大量的生產級最佳化、測試和持續的改進獲得好處。

ONNX Runtime 會用於大規模的 Microsoft 服務,例如 Bing、Office 和 Azure AI。 雖然效能提升取決於許多因素,但這些 Microsoft 服務會報告 CPU 的平均 2 倍效能提升。 除了 Azure Machine Learning 服務之外,ONNX Runtime 也能在支援機器學習工作負載的其他產品中執行,包括:

顯示定型、轉換和部署的 ONNX 流程圖。

如何取得 ONNX 模型

您可以透過數種方式來取得 ONNX 模型:

許多模型 (包括影像分類、物件偵測和文字處理模型) 均可呈現為 ONNX 模型。 如果某個模型遇到無法成功轉換的問題,請在所使用轉換器的存放庫中提出 GitHub 問題。 您可以繼續使用現有模型格式,直到問題解決為止。

Azure 中的 ONNX 模型部署

Azure Machine Learning 可讓您部署、管理及監視 ONNX 模型。 使用標準 MLOps 部署工作流程和 ONNX Runtime,您可以建立裝載於雲端中的 REST 端點。 如需實作範例,請參閱這些 Jupyter Notebook

使用 Python 來安裝和使用 ONNX Runtime

您可在 PyPi.org (CPUGPU) 上取得 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 參考文件 (英文)。

範例

深入了解 ONNX 或參與專案:

深入了解 ONNX Runtime 或參與專案: