ONNXは、学習済みニューラルネットの計算グラフと重みを共通フォーマットで書き出す交換規格です。研究室ではPyTorch、本番では別ランタイム——Keras/JAXなど学習の道具と運用の道具が分かれるとき、ONNXはモデルそのものの共通語——本記事はランタイムの性能比較より、「何を運び、何ではないか」に焦点を当てます。
なぜ交換フォーマットが要るか
深層学習の現場では、学習と推論で環境がずれることがよくあります(推論記事)。GPUサーバーで学習し、エッジ端末やクラウドの別サービスで実行——フレームワークが違えば、そのままではモデルファイルを共有できません。
G-458が示すMLOps——開発・デプロイ・監視——の文脈で、ONNXはデプロイの橋渡しに使われます。モデル名(BERT、AlexNet)ではなく、ファイル形式の規格です。
ONNXファイルに入っているもの
ONNXは「AIモデルそのもの」ではなく、モデルの設計図と重みの書き方を標準化したものです。
| 内容 | 役割 | 例え |
|---|---|---|
| 計算グラフ | 層の種類・接続・演算の順序 | 回路図 |
| 重み(パラメータ) | 学習で得た数値 | 部品の設定値 |
| 入出力の型・形状 | 推論時のテンソル仕様 | コネクタの規格 |
PyTorchで学習→ONNXへエクスポート→別環境で読み込み——フレームワークをまたぐのが目的です。試験では演算の細部より、モデル交換の共通フォーマットと覚えれば十分です。
学習から本番への流れ
- 1. 学習 — PyTorch、TensorFlow/Kerasなどでモデルを訓練
- 2. エクスポート — 学習済みモデルをONNX形式(.onnx)へ変換
- 3. 最適化 — 量子化・プルーニングなどで軽量化(G-406、G-025)
- 4. 推論 — ONNX Runtimeなどのランタイムやエッジ環境で推論(G-408)
ONNXは2の箱——軽量化や高速化は別の工程です。箱を速く運ぶ車はONNX Runtime(別記事)であり、ONNXそのものではありません。
ONNX Runtimeとの違い
| 名称 | 性質 | 役割 |
|---|---|---|
| ONNX | 交換フォーマット(規格・ファイル) | モデルを共通語で記述 |
| ONNX Runtime | 推論ランタイム(ソフトウェア) | ONNXモデルを高速実行 |
| PyTorch | 学習フレームワーク | 定義・学習・実験 |
| CUDA | GPU実行基盤 | ハードウェア上の演算加速 |
フォーマット・ランタイム・フレームワーク・GPU基盤——四つはよくセットで出ますが、層が違うと切り分けて答えるのが試験の要点です。
試験で押さえるポイント
- 定義 — Open Neural Network Exchange=モデル交換の共通フォーマット
- 目的 — フレームワークや環境の違いを越えてモデルを運ぶ
- 対比 — ONNX Runtime(実行)、PyTorch/Keras(学習)、MLOps(運用全体)
- 位置づけ — 学習後のデプロイ・推論パイプラインの一部
すり替えに注意
| 誤った説明 | 正しい理解 |
|---|---|
| ONNX=ONNX Runtime | ファイル規格 vs 推論ランタイム |
| ONNX=PyTorch | 交換フォーマット vs 学習フレームワーク |
| ONNX=モデル名 | 記述形式 vs BERT等の具体モデル |
| ONNX=MLOps | フォーマットの一部 vs 運用全体(G-458) |
| ONNX=量子化 | 交換規格 vs 軽量化手法(G-406) |
よくある質問
ONNXは何をするフォーマットですか?
学習済みニューラルネットワークの構造(計算グラフ)と重みを共通のファイル形式で保存し、異なるフレームワークや推論環境へ持ち運ぶための交換規格です。開発チームやクラウド・エッジで学習環境と本番環境が異なるときに使われます。
ONNXとONNX Runtimeは同じですか?
同じではありません。ONNXはモデルを記述する交換フォーマット(ファイル規格)です。ONNX RuntimeはONNX形式のモデルを高速に推論実行するランタイムソフトウェアです。荷物の箱と、箱を運ぶ配送車の関係に近いです。
ONNXとPyTorchは同じですか?
同じではありません。PyTorchはモデルを定義し学習するための深層学習フレームワークです。ONNXは学習後のモデルをエクスポートして他環境へ渡すための共通フォーマットです。PyTorchからONNXへ変換して運ぶ、という関係が典型です。