Open Neural Network Exchange(ONNX)
Open Neural Network Exchange(ONNX)とは、機械学習や
人工知能のモデルを記述するために設計されたオープンソースのフォーマットであり、その略称は「オニキス」とも呼ばれています。このフレームワークは、異なる環境やハードウェア上で機械学習モデルが相互に動作できるようにすることを目的としており、ONNX Runtimeという実行エンジンも同時に開発されています。
概要
機械学習の分野では、
ニューラルネットワークなどのモデルは多様なフレームワークで学習されるため、それぞれのモデルが特定の環境に依存してしまいます。このため、あるフレームワークで構築されたモデルは、別のフレームワークやハードウェアでは利用できない場合が多く、データの相互運用性が不足してしまいます。これを解決するために、ONNXは統一されたインターフェースを提供しており、モデルをONNX形式として出力することで、さまざまなハードウェア環境においても推論が可能です。
開発の背景
ONNXの開発は、フレームワーク間での相互運用性を持たせるために進められ、特に開発者が異なるフレームワーク上で容易にデータをやり取りできる環境を整備することに重視されています。また、ハードウェアベンダーはONNXを対象とした調整を行うことで、複数のフレームワーク上の
ニューラルネットワークの性能を同時に向上させることができます。
このプロジェクトは2017年9月に、
FacebookとMicrosoftが共同で始動し、その後
IBMやHuawei、Intelなどの企業も支援を加えました。ONNXは
Linux Foundation AIに卒業プロジェクトとして移行したこともあり、注目の集まる技術となっています。
構成
ONNXは主に推論に焦点を当てており、拡張可能な計算グラフモデルと、標準
データ型および組み込み演算子の定義を提供しています。これらの要素は
有向非巡回グラフ(DAG)を形成しており、各ノードには入力と出力が関連付けられています。ONNXの仕様は「IR(Intermediate Representation)」と「Operator」の二つがあり、それぞれ独自にバージョン管理がされています。
ONNX IR
ONNX IRでは、モデルや計算グラフの基本的な構成要素が定義されており、Graph、Nodeなどが含まれます。また、データには様々な型(FLOAT、INT8、BFLOAT16など)が存在し、これらの基本
データ型が利用されます。
拡張演算子
ONNXは通常の演算子以外にも独自の拡張演算子を受け入れることができ、これによりさらなる柔軟性を実現しています。これらの拡張演算子は、モデルの属性として指定され、実行エンジンがサポートしている場合には使用することができます。
ONNX Runtime
ONNX Runtimeは、ONNXモデルの推論や学習を高速化するためのオープンソースプロジェクトです。様々な環境で利用でき、デプロイ環境に応じた最適化が自動で行われます。パフォーマンスの最適化に関しても考慮されており、エッジデバイスやクラウド環境における適応性が高いです。
対応デバイス
ONNX Runtimeは多様なデバイスに対応しており、
CPU、GPU、エッジデバイスにおける実行プロバイダが提供されています。具体的には、IntelのOpenVINO、NVIDIAの
CUDA、AMDのRO
Cm、ARM、RIS
C-Vなど、様々なアーキテクチャに対応しています。
モデルの生成
ONNXモデルは
Pythonのスクリプトから生成でき、異なるフレームワークからの変換も可能です。これにより、さまざまな機械学習フレームワークで得られたモデルをONNX形式に簡単に変換し、その後ONNX Runtimeを使用して推論を実行することが可能になります。
ONNXは今後も機械学習の世界において重要な役割を果たすことが期待されており、特に異なるフレームワーク間でのモデルの互換性を維持するための不可欠な技術として注目されています。また、ONNX Ecosystemの強化により、さらに多くの開発者や企業がこの技術を活用し、機械学習の発展に寄与していくことでしょう。