ONNX

Open Neural Network Exchange

ONNXとは

ONNX(Open Neural Network Exchange)とは、機械学習モデルを異なるフレームワーク間で相互運用するためのオープンなファイルフォーマットです。PyTorchで学習したモデルをTensorRTで推論する、TensorFlowのモデルをONNX Runtimeで実行するなど、フレームワークに依存しないモデルの移植を可能にします。

表:ONNXの要点まとめ
ひとことで言うと異なるAIフレームワーク間でモデルをやりとりするための共通形式。
何がうれしいかPyTorchで学習したモデルを、別の環境や言語で動かせる。
注意点すべての演算が変換できるわけではない。変換後は必ず動作確認する。

ONNXの仕組み

ONNXは計算グラフとオペレータのセットを標準化した形式でモデルを表現します。各フレームワークはONNXエクスポーター(PyTorchのtorch.onnx.export、TensorFlowのtf2onnxなど)を提供しており、学習済みモデルをONNX形式に変換できます。ONNX形式のモデルは、ONNX対応のランタイムやハードウェアで直接実行可能です。

図:ONNXによるモデルの移行
1PyTorchで学習研究・開発環境
▶
2ONNXへ変換共通形式に書き出す
▶
3別環境へ持ち込むC++・スマホ・エッジ
▶
4推論を実行環境に依存しない
▶
5結果を検証元と一致するか確認

ONNX Runtimeの活用

ONNX Runtimeは、Microsoftが開発したONNXモデルの高性能推論エンジンです。CPU、GPU、NPUなど多様なハードウェアに対応し、グラフ最適化や量子化によって推論を高速化します。Azure Machine LearningやWindows ML、Edge環境での推論にも採用されています。

ONNXのエコシステム

ONNX Model ZooではImageNet分類、物体検出、自然言語処理などの事前学習済みONNXモデルが公開されています。Hugging FaceのOptimumライブラリを使えば、Transformerモデルを容易にONNX形式に変換し、推論を高速化できます。