ONNX Runtime(ORT)を使っていると、ORT_SEQUENTIAL や ORT_PARALLEL という設定を見かけることがあります。
これらは Execution Mode(実行モード) に関する重要な設定です。
この記事では、それぞれの違いと使い分けについてわかりやすく解説します。
ORT_SEQUENTIALとは
ORT_SEQUENTIAL は 逐次実行モード です。
特徴
- モデル内の処理(ノード)を 順番に1つずつ実行
- シングルスレッドに近い動作
- オーバーヘッドが少ない
向いているケース
- 小規模なモデル
- デバッグ用途
- 安定した動作を優先したい場合
ORT_PARALLELとは
ORT_PARALLEL は 並列実行モード です。
特徴
- 依存関係のないノードを 同時に並列実行
- CPUのマルチスレッドを活用
- 推論速度の向上が期待できる
向いているケース
- 大規模モデル
- CPUコア数が多い環境
- パフォーマンス重視の推論処理
違いのまとめ
| 項目 | ORT_SEQUENTIAL | ORT_PARALLEL |
|---|---|---|
| 実行方法 | 逐次(順番) | 並列 |
| スレッド | 基本1つ | 複数 |
| パフォーマンス | 安定・軽量 | 高速化の可能性あり |
| 向いている用途 | 小規模・デバッグ | 大規模・高速処理 |
注意点
並列実行は常に速いとは限りません。
理由としては以下があります:
- モデル構造が直列的だと並列化できない
- スレッド管理のオーバーヘッドが発生する
- キャッシュ効率が悪化する場合がある
👉 そのため、実際には両方試してベンチマークを取るのがベストです。
設定方法(Python)
以下のように SessionOptions で設定できます。
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_SEQUENTIAL と ORT_PARALLEL を切り替えることができます。
並列実行モード(ORT_PARALLEL)
var sessionOptions = new SessionOptions();
// 並列実行モードに設定
sessionOptions.ExecutionMode = ExecutionMode.ORT_PARALLEL;
using var session = new InferenceSession(“model.onnx”, sessionOptions);
逐次実行モード(ORT_SEQUENTIAL)
var sessionOptions = new SessionOptions();
// 逐次実行モードに設定
sessionOptions.ExecutionMode = ExecutionMode.ORT_SEQUENTIAL;
using var session = new InferenceSession(“model.onnx”, 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はマルチスレッドを活用した高速化向け- 最適な設定はモデルと環境によって変わる
👉 迷ったらまずは両方試して比較するのがおすすめです


