ONNX Runtime(オニックス ランタイム、略称: ORT)は、Microsoftが開発するオープンソースの機械学習推論・学習高速化エンジンです。
Bing、Office、Azure AIなどMicrosoftの主要サービスで利用されており、平均してCPUパフォーマンスを2倍向上させる実績を持っています。
本記事では、ONNX Runtimeの機能、使い方、パフォーマンス最適化まで詳しく解説します。
ONNX Runtimeとは

ONNX Runtime(ORT)は、ONNX(Open Neural Network Exchange)形式の機械学習モデルを高速に実行するためのクロスプラットフォーム推論エンジンです。
基本概念
ONNX(Open Neural Network Exchange):
オープンソースで開発されている機械学習や人工知能のモデルを表現するための標準フォーマットです。
機械学習モデルは様々なフレームワーク(PyTorch、TensorFlow、Kerasなど)で学習され、様々なハードウェア(CPU、GPU、NPUなど)で実行されます。
ONNXは、モデルを記述する統一インターフェースを提供し、フレームワークとハードウェア間の相互運用性を実現します。
ONNX Runtime:
ONNX形式のモデルを運用環境にデプロイするためのハイパフォーマンスの推論エンジンです。
フレームワーク・OS・ハードウェアを問わず、単一のRuntime APIを介してONNXモデルを利用できます。
開発元と歴史
ONNX Runtimeは、Microsoftによって開発されたオープンソースプロジェクトです。
GitHubで公開されており、継続的に開発・改善が行われています。
最新の安定版は1.22.1(2025年7月リリース)です。
ONNX Runtimeの主な特徴
1. クロスプラットフォーム対応
対応OS:
- Linux
- Windows
- macOS
- iOS
- Android
プログラミング言語:
- C++(コアは C++ で記述)
- Python
- C#
- Java
- JavaScript(Node.js)
- C
2. 柔軟な実行環境
ONNX Runtimeは、クラウドとエッジの両方に最適化されています。
サーバーサイドの大規模推論から、モバイルデバイス上での軽量推論まで、幅広い環境で利用できます。
3. 多様なフレームワークのサポート
以下のフレームワークで学習したモデルをONNX形式に変換して利用できます。
- PyTorch: torch.onnx.export()で変換
- TensorFlow/Keras: tf2onnxで変換
- TensorFlow Lite: tf2onnxまたは専用ツールで変換
- scikit-learn: skl2onnxで変換
- その他: 多くのフレームワークがONNX変換をサポート
4. 広範なモデルサポート
従来の機械学習モデル:
- 決定木(Decision Tree)
- ランダムフォレスト(Random Forest)
- サポートベクターマシン(SVM)
- 回帰モデル
- クラスタリングモデル
ディープラーニングモデル:
- 画像分類(ResNet、VGG、MobileNetなど)
- 物体検出(YOLO、SSDなど)
- セマンティックセグメンテーション
- テキスト処理(BERT、GPTなど)
大規模言語モデル(LLM):
- LLaMA
- GPT Neo
- BLOOM
- 80以上の人気LLMアーキテクチャをサポート
5. 自動最適化機能
ONNX Runtimeは、デプロイ環境に合わせた最適化を自動で行います。
グラフ最適化:
- Basic: 不要ノードの除去、一部のop fusionsの実行
- Extended: 高度なop fusionsの実行
- Layout: NCHWc Optimizerによるレイアウト最適化
モデル量子化:
- 8-bit Model Quantizationによるモデルサイズ削減と高速化
- QuantizeLinear、DynamicQuantizeLinearなどの量子化演算子をサポート
モデルの自動分割:
ONNXモデルを自動的にサブグラフに分割し、各サブグラフを最適なアクセラレータ(CPU、GPU、NPUなど)で実行します。
実行プロバイダ(Execution Providers)
ONNX Runtimeの最大の強みは、拡張可能な「実行プロバイダ(EP)」フレームワークです。
これにより、異なるハードウェアアクセラレーションライブラリと連携し、最適な実行環境を提供します。
主要な実行プロバイダ
CPU向け:
- Default CPU (MLAS): 標準のCPU実行プロバイダ
- Intel oneDNN: Intel CPUに最適化
- Intel OpenVINO: Intel CPU、GPU、NPU、ARMのCPUに対応
- Google XNNPACK: ARM、x86、WebAssembly、RISC-VのCPUに対応
- KleidiAI: Armアーキテクチャ向けの高性能ライブラリ(ONNX Runtime 1.22から統合)
NVIDIA GPU向け:
- CUDA: NVIDIA GPU向けの基本的な実行プロバイダ
- TensorRT: NVIDIA GPU向けの高性能推論エンジン(CUDAより高速)
- TensorRT RTX: 最新のTensorRT実行プロバイダ(ONNX Runtime 1.22から追加)
AMD GPU向け:
- ROCm: AMD GPU向け
- MIGraphX: AMD GPUに最適化されたグラフコンパイラ
- Vitis AI: AMD(旧Xilinx)FPGAおよびAMD GPU向け
DirectML(Windows):
- すべてのDirectX 12対応デバイス(NVIDIA、Intel、AMD)で利用可能
- Windows GPU向けの推奨オプション
モバイル・エッジデバイス向け:
- CoreML: Apple デバイス(iOS、macOSなど)
- ACL(Arm Compute Library): Arm CPUおよびGPU
- QNN(Qualcomm Neural Network): Qualcomm NPU(QNN SDK 2.42.0に対応)
Web向け:
- WebAssembly (wasm): デフォルトのCPU実行プロバイダ
- WebGPU (webgpu): デフォルトのGPU実行プロバイダ
- WebNN (webnn): ネイティブに近いパフォーマンスを提供(ブラウザで手動有効化が必要)
- WebGL (webgl): 古いデバイス向けのGPU実行プロバイダ
実行プロバイダの選択
複数の実行プロバイダを優先順位付きで指定できます。
ONNX Runtimeは、優先度の高いプロバイダから順に、各ノードを実行可能か判定し、最適なプロバイダで実行します。
import onnxruntime as rt
# 実行プロバイダの優先順位を定義
# CUDA実行プロバイダを優先、不可能ならCPU実行プロバイダを使用
EP_list = ['CUDAExecutionProvider', 'CPUExecutionProvider']
# セッション初期化
sess = rt.InferenceSession("model.onnx", providers=EP_list)
Windows 11 24H2の自動EP選択機能
Windows 11 24H2以降では、Windows MLが標準搭載されています。
Windows MLは、ONNX Runtimeの実行プロバイダを自動的に選択するライブラリで、以下の流れで動作します。
- ONNX Runtime呼び出し
- Windows MLが実行プロバイダを自動選択
- CPU・GPU・NPU各社の実行プロバイダに振り分け
また、ONNX Runtime 1.22以降では、コンピューティングデバイスを自動検出し、最適なEPをダウンロード・登録する機能が追加されました(Windows 11 25H2以降で利用可能)。
ONNX Runtimeのパフォーマンス

Microsoft サービスでの実績
ONNX Runtimeは、以下のような高スケールのMicrosoft サービスで使用されています。
- Bing: 検索エンジン
- Office: オフィススイート
- Azure AI: クラウドAIサービス
これらのサービスでは、ONNX Runtimeを使用することで、平均してCPUパフォーマンスが2倍向上しています。
ベンチマーク結果
Azure Cobalt 100(Arm64 VM)でのベンチマーク:
- モデル: SqueezeNet INT8
- 平均推論時間: 1.86ミリ秒
- スループット: 538推論/秒
- CPU使用率: 96%
- メモリ使用量: 37MB以下
レイテンシの一貫性:
- P50 レイテンシ: 1.857ミリ秒
- P95 レイテンシ: 1.874ミリ秒
- P99 レイテンシ: 1.903ミリ秒
結果は非常に安定しており、エッジやクラウド推論に最適です。
パフォーマンス向上の要因
- グラフ最適化: モデルグラフに対して複数の最適化を適用
- サブグラフ分割: 利用可能なハードウェア固有のアクセラレータに基づいてサブグラフに分割
- 最適化された計算カーネル: コアONNX Runtime内の最適化されたカーネルがパフォーマンスを向上
- 実行プロバイダによる加速: 各サブグラフが実行プロバイダからさらなる加速を受ける
ステップ3(パフォーマンスチューニング)を行わなくても、ONNX Runtimeは元のフレームワークと比較して、多くの場合パフォーマンスの向上を提供します。
ONNX Runtimeの使い方
インストール
Python(PyPI):
# CPU版
pip install onnxruntime
# GPU版(CUDA対応)
pip install onnxruntime-gpu
NuGet(C#):
Install-Package Microsoft.ML.OnnxRuntime
Install-Package Microsoft.ML.OnnxRuntime.Gpu
npm(JavaScript/Node.js):
npm install onnxruntime-node
基本的な使用例(Python)
ステップ1: モデルの準備
PyTorchモデルをONNX形式に変換:
import torch
import torch.onnx
# モデルとダミー入力を準備
model = YourPyTorchModel()
dummy_input = torch.randn(1, 3, 224, 224)
# ONNX形式にエクスポート
torch.onnx.export(
model,
dummy_input,
"model.onnx",
export_params=True,
opset_version=11,
input_names=['input'],
output_names=['output']
)
ステップ2: ONNX Runtimeで推論
import onnxruntime as rt
import numpy as np
# セッションを初期化(実行プロバイダを指定)
sess = rt.InferenceSession(
"model.onnx",
providers=['CUDAExecutionProvider', 'CPUExecutionProvider']
)
# 入力・出力の情報を取得
input_name = sess.get_inputs()[0].name
output_name = sess.get_outputs()[0].name
# 推論実行
input_data = np.random.randn(1, 3, 224, 224).astype(np.float32)
result = sess.run([output_name], {input_name: input_data})
print("出力形状:", result[0].shape)
ステップ3(オプション): パフォーマンスチューニング
import onnxruntime as rt
# セッションオプションを設定
sess_options = rt.SessionOptions()
# グラフ最適化レベルを設定
sess_options.graph_optimization_level = rt.GraphOptimizationLevel.ORT_ENABLE_ALL
# スレッド数を設定
sess_options.intra_op_num_threads = 4
sess_options.inter_op_num_threads = 4
# プロファイリングを有効化
sess_options.enable_profiling = True
# セッションを初期化
sess = rt.InferenceSession(
"model.onnx",
sess_options=sess_options,
providers=['CUDAExecutionProvider', 'CPUExecutionProvider']
)
Web環境での使用(ONNX Runtime Web)
ONNX Runtime Webは、Webブラウザを含むJavaScript環境で動作します。
import * as ort from 'onnxruntime-web';
async function runModel() {
// セッションを作成
const session = await ort.InferenceSession.create('model.onnx', {
executionProviders: ['webgpu', 'wasm']
});
// 入力データを準備
const inputTensor = new ort.Tensor(
'float32',
Float32Array.from([1, 2, 3, 4]),
[1, 4]
);
// 推論実行
const feeds = { input: inputTensor };
const results = await session.run(feeds);
console.log('出力:', results.output.data);
}
runModel();
パフォーマンス最適化
1. 適切な実行プロバイダの選択
CPU環境:
- Intel CPU: oneDNNまたはOpenVINO
- ARM CPU: XNNPACKまたはACL
GPU環境:
- NVIDIA GPU: TensorRT(可能な場合)、さもなくばCUDA
- Windows GPU: DirectML
- AMD GPU: MIGraphXまたはVitis AI
Web環境:
- WebNN(利用可能な場合、最速)
- WebGPU(GPU対応デバイス)
- WebAssembly(小型モデルまたはGPU非対応環境)
2. グラフ最適化レベルの設定
sess_options = rt.SessionOptions()
sess_options.graph_optimization_level = rt.GraphOptimizationLevel.ORT_ENABLE_ALL
選択肢:
ORT_DISABLE_ALL: 最適化なしORT_ENABLE_BASIC: 基本的な最適化のみORT_ENABLE_EXTENDED: 拡張最適化ORT_ENABLE_ALL: すべての最適化(推奨)
3. スレッド数の調整
sess_options.intra_op_num_threads = 4 # ノード内並列化
sess_options.inter_op_num_threads = 4 # ノード間並列化
値を0に設定すると、自動選択されます。
4. モデル量子化
モデルサイズを削減し、推論速度を向上させます。
from onnxruntime.quantization import quantize_dynamic
quantize_dynamic(
"model.onnx",
"model_quantized.onnx",
weight_type=QuantType.QInt8
)
5. プロファイリングとデバッグ
sess_options.enable_profiling = True
sess = rt.InferenceSession("model.onnx", sess_options=sess_options)
# 推論実行後、プロファイリングデータが生成される
# chrome://tracing で確認可能なJSON形式
実際の活用事例
1. Windows ML
Windows 11 24H2以降に標準搭載されています。
ONNX Runtimeも同梱されており、Windowsアプリケーションで簡単に機械学習モデルを利用できます。
2. Azure Machine Learning
Azure MLでONNXモデルのデプロイ、管理、監視が可能です。
標準のMLOpsデプロイワークフローを使用して、クラウドでホストされるRESTエンドポイントを作成できます。
3. Azure SQL
Azure SQL EdgeとAzure SQL Managed Instanceは、ONNXを使用してデータに対してネイティブなスコアリングを実行します。
4. ML.NET
.NET向けの機械学習フレームワークML.NETで、ONNX Runtimeを使用してモデルを実行できます。
5. Oracle Database
Oracle DatabaseインスタンスでONNXモデルを使用した機械学習タスクを実行できます。
6. Piecesアプリ
コードスニペット管理ツール「Pieces」では、オンデバイスでの機械学習モデル実行にONNX Runtimeを採用しています。
プライバシー保護、低レイテンシ、コスト削減を実現しています。
ONNX Runtimeと他のランタイムの比較
ONNX Runtime vs TensorFlow Lite
TensorFlow Lite:
- Google開発のモバイル・エッジ向け軽量ランタイム
- TensorFlowモデルに特化
- 他のフレームワークからの変換が困難
ONNX Runtime:
- 多様なフレームワークをサポート
- モバイルからクラウドまで幅広い環境に対応
- より柔軟な実行プロバイダシステム
選択基準:
TensorFlowエコシステムに完全に依存している場合はTensorFlow Lite、複数のフレームワークを使用する場合やクロスプラットフォーム対応が必要な場合はONNX Runtime。
ONNX Runtime vs TorchServe
TorchServe:
- PyTorch公式のモデルサービングソリューション
- PyTorchモデルに特化
- サーバーサイドデプロイに焦点
ONNX Runtime:
- フレームワーク非依存
- エッジデバイスからクラウドまで対応
- より広範なハードウェアサポート
選択基準:
PyTorchのみを使用し、サーバーサイドデプロイのみを考慮する場合はTorchServe、複数フレームワークやエッジデプロイが必要な場合はONNX Runtime。
ONNX Runtime vs TensorRT
TensorRT:
- NVIDIA GPU専用の高性能推論エンジン
- NVIDIA GPU環境では最高のパフォーマンス
ONNX Runtime:
- TensorRTを実行プロバイダの一つとして利用可能
- 複数のハードウェアベンダーをサポート
- フォールバック機構を提供
選択基準:
NVIDIA GPU専用で最高のパフォーマンスが必要ならTensorRT単体、複数のハードウェア環境での移植性が必要ならONNX Runtime(TensorRT EPを含む)。
主要な統合製品
Windows環境
- Windows ML: Windows 11 24H2以降に標準搭載
- DirectML: Windows上でのニューラルネットワーク実行(2025年7月に開発終了、Windows MLに統合)
- Google Chrome(Windows版): ONNX Runtime backend for WebNNを搭載
クラウド環境
- Azure Machine Learning: モデルデプロイと管理
- Azure SQL Edge / Azure SQL Managed Instance: データベース内でのネイティブスコアリング
開発フレームワーク
- ML.NET: .NET向け機械学習フレームワーク
- Oracle Database: データベース内機械学習
注意点と制限事項
1. 未対応デバイス
主要なデバイスの中で、以下は現時点でONNX Runtimeに直接対応していません。
- Google TPU / Edge TPU: LiteRTのみ対応(ONNX非対応)
- AWS Trainium / Inferentia: PyTorch経由での利用を推奨
これらのデバイスは、JAX、TensorFlow、PyTorchには対応しているため、これらに変換することで動作可能です。
2. 演算子の制限
CPU版:
ONNXスペックのすべての演算子を完全実装していますが、バイナリサイズを小さく保つため、一般的なデータ型のみサポートされています。
CUDA版:
すべてのCUDAカーネルが実装されているわけではなく、優先順位に基づいて実装されています。
サポートされていない演算子がある場合、CPUにフォールバックしますが、パフォーマンスに大きな影響を与える可能性があります。
3. TensorRTの演算子サポート
TensorRT EPを使用する場合、モデル内の演算子がTensorRTでサポートされているかに依存します。
サポートされていない場合、CUDAにフォールバックします。
まとめ
ONNX Runtimeは、機械学習モデルの推論を高速化するための強力なツールです。
ONNX Runtimeの強み
- クロスプラットフォーム対応: Linux、Windows、macOS、モバイルデバイス、Web環境で動作
- フレームワーク非依存: PyTorch、TensorFlow、scikit-learnなど多様なフレームワークをサポート
- 豊富な実行プロバイダ: CPU、GPU、NPU、FPGAなど10以上のアクセラレータに対応
- 自動最適化: グラフ最適化、モデル量子化、サブグラフ分割を自動実行
- 実績ある性能: Microsoft サービスで平均2倍のCPUパフォーマンス向上
- オープンソース: GitHubで公開され、継続的に開発・改善
ONNX Runtimeが向いているケース
- 複数のフレームワークで学習したモデルを統一的に実行したい
- クラウドからエッジまで、様々な環境にモデルをデプロイしたい
- ハードウェアアクセラレータを活用して推論を高速化したい
- モデルの移植性を確保したい
- プライバシー保護のためオンデバイス推論を実現したい
今後の展望
- Windows 11での自動EP選択機能のさらなる強化
- 新しいハードウェアアクセラレータのサポート拡大
- LLM(大規模言語モデル)のサポート強化
- Web環境でのさらなる高速化
ONNX Runtimeは、機械学習モデルのデプロイと推論において、柔軟性、パフォーマンス、移植性を兼ね備えた優れた選択肢です。
オープンソースプロジェクトとして継続的に進化しており、今後もさらなる機能追加とパフォーマンス向上が期待されます。

コメント