添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
卖萌的小蝌蚪  ·  CMake Error at ...·  1 年前    · 
闯红灯的手术刀  ·  rust ...·  1 年前    · 

了解使用 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 存放庫
  •