ONNX と Azure Machine Learning

Open Neural Network Exchange (ONNX) の使用が機械学習モデルの推論の最適化にどのように寄与するかについて説明します。 "推論" つまり "モデル スコアリング" は、デプロイされたモデルを使用して実稼働データに対して予測を生成するプロセスです。

推論用に機械学習モデルを最適化するには、ハードウェア機能を最大限に活用するためにモデルと推論ライブラリを調整する必要があります。 クラウドやエッジ、CPU や GPU などのさまざまな種類のプラットフォームで最適なパフォーマンスを引き出そうとすると、このタスクは複雑になります。それぞれのプラットフォームで性能と特性が異なるためです。 さまざまなフレームワークのモデルがあって、それらを異なるプラットフォームで実行する必要がある場合、複雑さが増します。 異なるフレームワークとハードウェアの組み合わせをすべて最適化するには、時間がかかる場合があります。 したがって、便利なソリューションは、好みのフレームワークでモデルを 1 回トレーニングし、クラウドまたはエッジ上の任意の場所で実行することです。このソリューションで、ONNX を使用します。

ONNX とは

ONNX は、機械学習モデルを表現するためのオープン スタンダードとして、Microsoft とパートナー コミュニティによって作成されました。 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 は、Bing、Office、Azure AI といった高スケールの Microsoft サービスで使用されています。 パフォーマンスの向上は多くの要因に依存しますが、これらの Microsoft サービスでは、CPU で平均 2 倍のパフォーマンス向上が報告されています。 ONNX ランタイムは、Azure Machine Learning サービスに加えて、Machine Learning のワークロードをサポートする次のような他の製品でも実行できます。

トレーニング、コンバーター、デプロイを示す ONNX フロー図。

ONNX モデルを取得する方法

ONNX モデルは、さまざまな方法で取得できます。

  • Azure Machine Learning (この記事の「」セクションで説明されているように) で、または 自動機械学習機能 で新しい ONNX モデルをトレーニングします。
  • これらの チュートリアル で示すように、別の形式で作成された既存のモデルを ONNX に変換します。
  • 事前トレーニング済みの ONNX モデルを ONNX モデル ズー から取得します。
  • カスタマイズされた ONNX モデルを Azure AI Custom Vision サービス から生成します。

画像の分類、オブジェクトの検出、テキスト処理のモデルなど、多くのモデルは、ONNX モデルとして表現することができます。 モデルを正常に変換できない問題が発生した場合は、使用したコンバーターのリポジトリで GitHub issue を報告してください。 issue が解決されるまでは、既存のモデル形式を引き続きご使用ください。

Azure での ONNX モデルのデプロイ

Azure Machine Learning を使用して、ONNX モデルのデプロイ、管理、および監視を実行できます。 標準的な MLOps デプロイ ワークフロー と ONNX Runtime を使用して、クラウドでホストされる REST エンドポイントを作成できます。 実践的な例については、これらの Jupyter Notebooks に関するページを参照してください。

Python での ONNX Runtime のインストールと使用

ONNX Runtime 用 Python パッケージは、PyPi.org (CPUGPU) から入手できます。 インストール前に、システム要件 を必ず確認してください。

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 の詳細を確認するか、プロジェクトに協力します。