ONNX Runtime(ORT)を使っていると、ORT_SEQUENTIAL や ORT_PARALLEL という設定を見かけることがあります。
これらは Execution Mode(実行モード) を指定する重要な設定で、推論速度やCPU使用率に影響します。
この記事では、
ORT_SEQUENTIALORT_PARALLEL
の違いを、PythonとC#のコード例付きでわかりやすく解説します。
ORT_SEQUENTIALとは
ORT_SEQUENTIAL は 逐次実行モード です。
モデル内の処理(ノード)を、順番に1つずつ実行します。
特徴
- 順番に処理を実行
- シングルスレッドに近い動作
- オーバーヘッドが少ない
- 動作が安定しやすい
向いているケース
- 小規模モデル
- デバッグ用途
- CPUコア数が少ない環境
- 安定動作を重視したい場合
ORT_PARALLELとは
ORT_PARALLEL は 並列実行モード です。
依存関係のないノードを同時に実行し、CPUのマルチスレッドを活用します。
特徴
- 複数ノードを同時実行
- CPUマルチコアを活用
- 推論速度向上が期待できる
- 大規模モデルで効果が高い
向いているケース
- 大規模モデル
- 高速推論が必要な環境
- CPUコア数が多いマシン
- サーバー用途
違いを比較
| 項目 | ORT_SEQUENTIAL | ORT_PARALLEL |
|---|---|---|
| 実行方式 | 逐次 | 並列 |
| スレッド利用 | 少ない | 多い |
| CPU使用率 | 低め | 高め |
| 推論速度 | 安定 | 高速化可能 |
| 小規模モデル | 向いている | 効果が小さい |
| 大規模モデル | やや不利 | 効果大 |
注意点
ORT_PARALLEL は常に速いわけではありません。
理由は以下です。
- モデル構造によっては並列化しづらい
- スレッド管理コストが発生する
- キャッシュ効率が悪化する場合がある
- 小さいモデルでは逆に遅くなることもある
そのため、
👉 実際には両方試してベンチマークを取るのがベストです。
Pythonでの設定方法
ORT_PARALLEL
import onnxruntime as ort
so = ort.SessionOptions()
# 並列実行モード
so.execution_mode = ort.ExecutionMode.ORT_PARALLEL
session = ort.InferenceSession("model.onnx", so)
ORT_SEQUENTIAL
import onnxruntime as ort
so = ort.SessionOptions()
# 逐次実行モード
so.execution_mode = ort.ExecutionMode.ORT_SEQUENTIAL
session = ort.InferenceSession("model.onnx", so)
C#での設定方法
ORT_PARALLEL
using Microsoft.ML.OnnxRuntime;
var sessionOptions = new SessionOptions();
// 並列実行モード
sessionOptions.ExecutionMode = ExecutionMode.ORT_PARALLEL;
using var session =
new InferenceSession("model.onnx", sessionOptions);
ORT_SEQUENTIAL
using Microsoft.ML.OnnxRuntime;
var sessionOptions = new SessionOptions();
// 逐次実行モード
sessionOptions.ExecutionMode = ExecutionMode.ORT_SEQUENTIAL;
using var session =
new InferenceSession("model.onnx", sessionOptions);
スレッド数を調整する方法(C#)
ORT_PARALLEL を使う場合は、スレッド数設定も重要です。
using Microsoft.ML.OnnxRuntime;
var sessionOptions = new SessionOptions();
// 並列実行
sessionOptions.ExecutionMode = ExecutionMode.ORT_PARALLEL;
// 演算内並列
sessionOptions.IntraOpNumThreads = 4;
// ノード間並列
sessionOptions.InterOpNumThreads = 2;
using var session =
new InferenceSession("model.onnx", sessionOptions);
パラメータの意味
| パラメータ | 内容 |
|---|---|
| IntraOpNumThreads | 1つの演算内部で使うスレッド数 |
| InterOpNumThreads | ノード間並列で使うスレッド数 |
どちらを選ぶべき?
ORT_SEQUENTIALがおすすめ
- 小規模モデル
- 軽量推論
- デバッグ用途
- シンプル構成
ORT_PARALLELがおすすめ
- 大規模モデル
- CPU推論高速化
- マルチコア環境
- サーバー運用
まとめ
ORT_SEQUENTIAL と ORT_PARALLEL の違いは、主に「逐次実行」か「並列実行」かです。
ORT_SEQUENTIAL- シンプル
- 安定
- 小規模向け
ORT_PARALLEL- 高速化可能
- マルチスレッド活用
- 大規模向け
最適な設定はモデルやCPU環境によって変わるため、
👉 実際にベンチマークして比較するのがおすすめです。


