FORMAT COMPARISON
Safetensors vs ONNX
Safetensorsは名前付きテンソルを保存します。ONNXは演算グラフや入出力、演算子の版を含むモデル表現です。
SafetensorsとONNX、どちらを選ぶ?
対応モデルへ重みを読み込むならSafetensors、対応ランタイムへグラフを渡すならONNXを検討します。 直接の代替形式ではありません。重みからONNXを作るにはモデル定義と対応する変換工程が必要です。単なる拡張子変更ではグラフは生成されません。
Safetensors向き
機械学習モデルのテンソル重みを保存・配布する・対応するフレームワーク間で重みを読み込む
- 任意のPythonオブジェクトではなくテンソルと基本メタデータを交換する
- 必要なテンソルだけを参照して読み込む処理
ONNX向き
機械学習モデルの演算グラフと重みを対応ランタイムへ受け渡す・異なる学習フレームワークと推論環境の間でモデルを交換する
- 標準演算子とopsetに対応するランタイムで推論する
- グラフ・入出力型・演算子を含むモデルを交換する
基本情報を比較
SafetensorsとONNXの主な違いを確認できます。
| 項目 | Safetensors | ONNX |
|---|---|---|
| 拡張子 | .safetensors | .onnx |
| MIME Type | application/octet-stream | application/octet-stream |
| 主な用途 | 機械学習モデルのテンソル重みを保存・配布する・対応するフレームワーク間で重みを読み込む | 機械学習モデルの演算グラフと重みを対応ランタイムへ受け渡す・異なる学習フレームワークと推論環境の間でモデルを交換する |
| 圧縮 | none | none |
| 開く方法 | Safetensors対応ライブラリやモデルツールで読み込みます。対応ツールなら重み全体をGPUへ移す前にヘッダーからテンソル名・型・形状を確認できます。JSONヘッダーがあるからといってファイル全体がJSONテキストという意味ではありません。 | ONNX対応の検査ツールや推論ランタイムで読み込みます。運用前にモデルのIR/opset版、使用演算子、入出力の型とshape、ランタイムの対応状況を確認し、代表入力で元モデルと出力を比較します。 |
| 書き出し・変換 | モデルframeworkの対応APIでテンソル重みをSafetensorsへ保存します。Pickleベースの入力を変換する場合、その変換処理は入力のオブジェクト復元を伴うことがあるため、信頼できない元ファイルを無警戒にロードしないでください。変換後はテンソル名、shape、dtype、総要素数、モデルの推論結果を照合します。 | 元の学習frameworkが提供するONNX exporterでモデルを変換し、ONNX checker等で構造を検証します。変換成功は数値一致や対象デバイスでの実行を保証しません。外部データを使う場合は本体とすべての参照ファイルを同じ配布単位で保存します。 |
用途別の選び方
作りたいものや使う場面から選べます。
任意のPythonオブジェクトではなくテンソルと基本メタデータを交換する
機械学習モデルのテンソル重みを保存・配布する・対応するフレームワーク間で重みを読み込む
Safetensors向き必要なテンソルだけを参照して読み込む処理
機械学習モデルのテンソル重みを保存・配布する・対応するフレームワーク間で重みを読み込む
Safetensors向き標準演算子とopsetに対応するランタイムで推論する
機械学習モデルの演算グラフと重みを対応ランタイムへ受け渡す・異なる学習フレームワークと推論環境の間でモデルを交換する
ONNX向きグラフ・入出力型・演算子を含むモデルを交換する
機械学習モデルの演算グラフと重みを対応ランタイムへ受け渡す・異なる学習フレームワークと推論環境の間でモデルを交換する
ONNX向き確認ポイント 1
Safetensors単体はモデル構造や推論コードを定義しません。 ONNXはグラフ内の初期値テンソルを持ち、外部データも参照できます。
使い分け確認ポイント 2
Safetensorsのヘッダーはテンソル名・dtype・shape・データ範囲を記録します。分割重みの索引、設定、tokenizer等の必要物は別途確認します。
使い分け選ぶ理由を詳しく
- ONNXはIR/opset・演算子・型を対象ランタイムと照合し、外部重み参照を維持します。同じ前処理と代表入力で出力を比較し、構造検査合格を精度・速度の保証としません。
よくある質問
Safetensorsなら出所を確認しなくても安全ですか?
いいえ。pickleによる任意オブジェクト復元を避ける形式ですが、出所・ローダー・依存コード・モデル自体の安全性を保証しません。