ONNX Runtime(ORT)を使っていると、ORT_SEQUENTIALORT_PARALLEL という設定を見かけることがあります。
これらは Execution Mode(実行モード) に関する重要な設定です。

この記事では、それぞれの違いと使い分けについてわかりやすく解説します。


ORT_SEQUENTIALとは

ORT_SEQUENTIAL逐次実行モード です。

特徴

  • モデル内の処理(ノード)を 順番に1つずつ実行
  • シングルスレッドに近い動作
  • オーバーヘッドが少ない

向いているケース

  • 小規模なモデル
  • デバッグ用途
  • 安定した動作を優先したい場合

ORT_PARALLELとは

ORT_PARALLEL並列実行モード です。

特徴

  • 依存関係のないノードを 同時に並列実行
  • CPUのマルチスレッドを活用
  • 推論速度の向上が期待できる

向いているケース

  • 大規模モデル
  • CPUコア数が多い環境
  • パフォーマンス重視の推論処理

違いのまとめ

項目 ORT_SEQUENTIAL ORT_PARALLEL
実行方法 逐次(順番) 並列
スレッド 基本1つ 複数
パフォーマンス 安定・軽量 高速化の可能性あり
向いている用途 小規模・デバッグ 大規模・高速処理

注意点

並列実行は常に速いとは限りません。

理由としては以下があります:

  • モデル構造が直列的だと並列化できない
  • スレッド管理のオーバーヘッドが発生する
  • キャッシュ効率が悪化する場合がある

👉 そのため、実際には両方試してベンチマークを取るのがベストです。


設定方法(Python)

以下のように SessionOptions で設定できます。

import onnxruntime as ort

so = ort.SessionOptions()

# 並列実行モード
so.execution_mode = ort.ExecutionMode.ORT_PARALLEL

# 逐次実行モードにしたい場合
# so.execution_mode = ort.ExecutionMode.ORT_SEQUENTIAL

session = ort.InferenceSession(“model.onnx”, so)


設定方法(C#)

C#でも SessionOptions を使って、ORT_SEQUENTIALORT_PARALLEL を切り替えることができます。

並列実行モード(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);


スレッド数の調整(補足)

並列実行の効果を最大化するには、スレッド数の調整も重要です。

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 はマルチスレッドを活用した高速化向け
  • 最適な設定はモデルと環境によって変わる

👉 迷ったらまずは両方試して比較するのがおすすめです