次の方法で共有


ONNX と Azure Machine Learning

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

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

便利なソリューションとしては、好みのフレームワークでモデルを 1 回トレーニングし、その後 ONNX にエクスポートまたは変換して、クラウドまたはエッジ上の任意の場所で実行できるようにすることです。 ONNX は、機械学習モデルを表現するためのオープン スタンダードとして、Microsoft とパートナー コミュニティによって作成されました。 多くのフレームワークのモデルを標準の ONNX 形式にエクスポートまたは変換できます。 サポートされているフレームワークには、TensorFlow、PyTorch、scikit-learn、Keras、Chainer、MXNet、MATLAB などがあります。 ONNX 形式のモデルは、さまざまなプラットフォームやデバイスで実行できます。

この ONNX フロー図は、利用可能なフレームワークとデプロ​​イ オプションを示しています。

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

ONNX Runtime

ONNX Runtime は、ONNX モデルを運用環境にデプロイするためのハイパフォーマンスの推論エンジンです。 ONNX Runtime はクラウドとエッジの両方に最適化されており、Linux、Windows、macOS で動作します。 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 サービスでは、ONNX を使用することで CPU のパフォーマンスが平均 2 倍向上すると報告されています。 ONNX Runtime は、Azure Machine Learning および次のような機械学習ワークロードをサポートするその他の Microsoft 製品で実行できます。

ONNX モデルを取得する方法

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

画像分類、物体検出、テキスト処理モデルなど、多くのモデルを ONNX として表現できます。 モデルを正常に変換できない場合は、使用したコンバーターのリポジトリで GitHub の問題を報告してください。

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

Azure Machine Learning で ONNX モデルのデプロイ、管理、および監視を実行できます。 標準的な MLOps デプロイ ワークフロー と ONNX Runtime を使用して、クラウドでホストされる REST エンドポイントを作成できます。

ONNX Runtime 用 Python パッケージ

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

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})

詳細な ONNX Runtime API のリファレンスについては、「Python API ドキュメント」を参照してください。