Model Runtime and Conversion(モデルランタイムと変換)
ONNX/GGUF/SafeTensors/torch.export IR、CoreML/LiteRT/ExecuTorch/MLX 変換、TensorRT/llama.cpp/WebGPU、TVM/IREE、AWQ/GPTQ/FP8、アンチパターン 8 種を俯瞰。
article technology ja ONNX/GGUF/SafeTensors/torch.export IR、CoreML/LiteRT/ExecuTorch/MLX 変換、TensorRT/llama.cpp/WebGPU、TVM/IREE、AWQ/GPTQ/FP8、アンチパターン 8 種を俯瞰。Model Runtime and Conversion(モデルランタイムと変換)
学習済みチェックポイント (PyTorch/JAX/TF) を「中間フォーマット × 変換ツールチェーン × ターゲットランタイム × 量子化 × コンパイラ」の 5 軸合成最適化で繋ぐ翻訳レイヤ。サーバ/エッジ/モバイル/ブラウザ/組み込みで制約 (メモリ・電力・レイテンシ・op カバレッジ) が異なる。LLM 推論高速化は tech-46、運用 tech-64、配送 tech-66。バージョン/GA は訓練データ (~2025-08) 依存で 要確認 (2026-05)、confidence: medium。
中間交換フォーマット
学習 FW とランタイムを切り離す共通言語。
| フォーマット | 主用途 | 特徴 |
|---|---|---|
| ONNX (opset 17→20) | クロス FW 汎用 | opset で op バージョン管理、IR v7、>2GB は external data、dynamic axes、custom op |
| GGUF v3 | LLM CPU/Apple ローカル | llama.cpp 単一ファイル、重み+量子化+トークナイザ+メタ格納、GGML 置換 (2023-08) |
| SafeTensors 0.4.x | HF 重み配布 | pickle 任意コード実行排除、ヘッダ JSON+生 tensor、mmap ゼロコピー |
| StableHLO/MLIR | JAX/TF/PyTorch→XLA/IREE/TVM | XLA HLO 安定 op、JAX jit 生成、torch.compile XLA 入力 |
torch.export ExportedProgram | ExecuTorch/ONNX dynamo 入力 | Dynamo+AOT で純粋 FX、TorchScript 後継 |
TorchScript はレガシー、PyTorch 2.x は torch.export が中心軸。torch.compile (Inductor) は高速化用で torch.export (ポータブル成果物) と目的が異なる。
GGUF 量子化バリアントと K-quant
| バリアント | ビット | 用途 |
|---|---|---|
| Q8_0 | 8 | ほぼ fp16 品質、サイズ半減 |
| Q6_K / Q5_K_M | 6 / 5 | 高精度、Apple Silicon で人気 |
| Q4_K_M | 4 (K-quant) | 最普及、コンシューマ GPU/CPU 標準 |
| IQ4_XS/IQ3_XS/IQ2_XXS | 4/3/2 (importance) | 重要度加重で同ビット +品質、低メモリ向き |
K-quant: 256 要素スーパーブロック、スケール 6 bit + 最小値 4 bit + ブロックごと fp16 スケール d で再スケール、Q4_0 (32 要素) より大コンテキストで品質安定。IQ 系は activation 重要度で非一様量子化。bitsandbytes NF4/FP4 は QLoRA 用、NF4 は正規分布最適化 dtype。
PyTorch → ONNX/CoreML/LiteRT/ExecuTorch/MLX
- ONNX: レガシー
torch.onnx.export(TorchScript trace、制御フロー欠落)、PyTorch 2.x 推奨はtorch.onnx.dynamo_export(Dynamo→FX→ONNX、opset 18+)、RoPE/SDPA カスタム op は手動登録要。 - CoreML: coremltools 7+ で
ct.convert(..., convert_to="mlprogram")→.mlpackage、ANE 非対応 op は GPU/CPU fallback、neuralnetworkは deprecated。 - LiteRT (旧 TFLite): 2024 改称、
ai-edge-torchでtorch.export → StableHLO → .tflite、LiteRT Micro は Cortex-M + CMSIS-NN。 - ExecuTorch: Meta、PyTorch Mobile 後継、
torch.export → to_edge → .pte+ XNNPACK/Vulkan/CoreML/QNN/NeuroPilot。 - MLX: Apple Silicon 専用、
mlx_lm.convert --hf-path ... -qで HF→MLX 直接変換、Unified Memory+Lazy eval。
HF→GGUF / TF・JAX→ONNX / Optimum
HF→GGUF: llama.cpp/convert_hf_to_gguf.py で HF→fp16 GGUF→quantize で Q4_K_M 等の 2 段階。Llama/Mistral/Qwen/Gemma 対応、新アーキは未対応の場合あり。TF→ONNX は tf2onnx、JAX→ONNX は jax2tf → tf2onnx 二段または jaxonnxruntime。
HuggingFace Optimum は統一インターフェース: optimum-cli export onnx --model ... --task ... 1 コマンド変換 + 量子化/プルーニング API。バックエンドは ORT、optimum-intel (OpenVINO/IPEX)、optimum-nvidia (TRT 実験的)、optimum-habana (Gaudi)。
サーバクラスランタイム
ONNX Runtime 1.18.x (MIT): Execution Provider モデル — 配列順優先でノードを EP に割り当て、未対応 op は CPU EP fallback (providers=["TensorrtEP","CUDAEP","CPUEP"])。主要 EP は CPU (AVX-512/AMX)、CUDA、TensorRT、ROCm、DirectML、OpenVINO、CoreML。
TensorRT 10.x / TRT-LLM 0.x→1.x (Proprietary): Engine ビルドで演算子融合・カーネル選択・メモリ最適化、エンジンは CUDA・GPU アーキ依存で再配布注意。精度 FP32/FP16/BF16/INT8 (PTQ)/INT4 (weight-only)/FP8 (Hopper E4M3/E5M2)。TRT-LLM は paged attention・continuous batching・speculative decoding を乗せた LLM 特化、Triton 統合可能。
OpenVINO 2024.x (Apache 2.0): Intel CPU/GPU/NPU 最適化、openvino_genai で LLM、Meteor/Lunar Lake NPU サポート。Triton Inference Server は ORT/TRT/PyTorch/TF/Python/vLLM/TRT-LLM を統合、動的バッチング・アンサンブル・gRPC+HTTP API。
エッジ・モバイル・オンデバイスランタイム
- llama.cpp / whisper.cpp / stable-diffusion.cpp (MIT) — GGML/GGUF C++、CPU AVX-512/AMX + Metal/CUDA/Vulkan/SYCL/Kompute、OpenAI 互換
llama-server - MLX 0.x (MIT) — Apple Silicon Unified Memory、Lazy eval、
mlx-lm/mlx-examples - CoreML —
.mlpackageML Program、ANE 16-bit のみ + 大行列乗算で GPU/CPU fallback - LiteRT (旧 TFLite) —
.tfliteFlatBuffers、Edge TPU/XNNPACK/GPU/NNAPI デリゲート、LiteRT Micro でマイコン - ExecuTorch —
.pte+ デリゲート (XNNPACK/Vulkan/CoreML/QNN/NeuroPilot) - ORT Mobile (
.ort) / NCNN / MNN / Paddle-Lite / Qualcomm QNN (HTP.dlc) / MediaTek NeuroPilot
ブラウザランタイム
ONNX Runtime Web は WASM EP (SIMD+threads) + WebGPU EP (Chrome 113+)。TensorFlow.js は WebGL/WASM/WebGPU、Node.js 対応。MLC-LLM は TVM Unity ベースで WebGPU/Metal/CUDA/Vulkan/OpenCL 出力、WebLLM はその WebGPU 専用版 (@mlc-ai/web-llm npm、WGSL カーネル)。Transformers.js は ORT Web + HF Hub の ONNX モデルを pipeline() で Python transformers 同一 API。WebNN API (W3C CR) は DirectML/CoreML/NNAPI 経由のブラウザネイティブ NN グラフ [要確認: 本番対応]。
コンパイラ / IR / 自動チューニング
Apache TVM は Relay/Relax (TVM Unity) IR + AutoTVM/Ansor/Meta Schedule で演算子チューニング、LLVM/CUDA/Metal/Vulkan/WebGPU 出力。MLC-LLM は TVM Unity + LLM 推論、iOS/Android/WebGPU/Desktop 同一 codebase。IREE は OpenXLA/MLIR ベース、StableHLO/TFLite/ONNX 入力 → LLVM/Vulkan/Metal/CUDA、エッジ重視。torch.compile は TorchDynamo + AOT Autograd + Inductor で Triton/C++・OpenMP 生成、学習・推論両用。XLA/OpenXLA は HLO IR 最適化、JAX 主、TPU 第一級、2023 OSS 化。
量子化手法と FP8
| 手法 | 概要 |
|---|---|
| PTQ | 学習済み重みを calibration で量子化、実装簡易 |
| QAT | 学習中に量子化誤差シミュレート、精度劣化最小、再学習コスト |
| AWQ (MIT) | 活性化分布に応じて重みをチャネル単位スケール、weight-only 4-bit |
| GPTQ (ETH Zürich) | OBQ ベース layer-wise 4-bit、Hessian 利用 |
| SmoothQuant (MIT) | 活性化外れ値を重みに移動して INT8 化 |
| bitsandbytes NF4/FP4 | QLoRA 用 4-bit、NF4 は正規分布最適化 dtype |
| llm.int8() | 外れ値チャネル fp16 残留 + 他 INT8 ハイブリッド |
INT8 calibration は TensorRT が KL 最小化、他 MSE/percentile、本番に近い 512〜1024 サンプル必要。FP8 (E4M3/E5M2) は Hopper/Ada から CUDA ネイティブ — E4M3 (指数 4/仮数 3、±448) は精度重視で重み向き、E5M2 はレンジ重視で勾配向き。vLLM llm-compressor は SmoothQuant/GPTQ/AWQ/llm.int8() 統合後継、compressed-tensors を SafeTensors メタに格納し vLLM ネイティブロード [要確認]。Blackwell FP4 (E2M1) ネイティブ [要確認]。
アンチパターン 8 種
- ONNX opset ミスマッチ — エクスポート opset とランタイムサポート不一致で実行時エラー、TRT EP は CPU EP より遅れがち、事前確認必須。
- TensorRT 動的形状の profile 範囲外で再コンパイル — optimization profile min/max 外バッチで TRT エンジン再ビルド (数十秒〜数分)、想定範囲を明示。
- GGUF メタデータドリフト —
tokenizer.ggml.tokensと HFtokenizer.json乖離で fine-tune 後デコード崩壊、変換時--vocab-type bpe --vocab-model-file tokenizer.json明示。 - カスタム op カバレッジギャップ — RoPE/SDPA は PyTorch 内 FlashAttention 融合だが ONNX エクスポートで unfused 展開され TRT/CoreML EP が受けない、op カバレッジ表を確認。
- FP16/BF16/FP8 変換後の浮動小数点乖離 — softmax
exp()/LayerNorm variance で NaN、変換後 BLEU/perplexity 評価必須、bf16 は表現範囲広く回避しやすい。 - 量子化 Calibration セットのドメイン外バイアス — 本番乖離でスケールがドメイン外活性化に最適化、精度劣化、本番に近い 512〜1024 サンプル使用。
- SafeTensors 非 mmap FS でのメモリスパイク — Docker overlay2/NFS で
mmap()非対応 → 全テンソル ヒープコピーで OOM、K8s ではemptyDir medium: Memoryか NFS 回避。 - CoreML 16-bit 形状制約と ANE op カバレッジ — ANE は FP16 のみ、シーケンス長閾値超過で CPU 落ち、
ct.models.utils.get_compute_unit_usage()で確認。
関連記事
- tech-35 Transformer
- tech-43 推論バッチング
- tech-44 推論性能指標
- tech-45 推論フェーズ
- tech-46 推論高速化
- tech-48 分散学習
- tech-49 学習パラダイム
- tech-50 学習ハイパーパラメータ
- tech-51 学習最適化
- tech-64 スケーリングと運用
- tech-66 コンテナ化とオーケストレーション
未確認事項と注意点 (確認時点: 2026-05)
情報カットオフ ~2025-08、confidence: medium。最新値は公式リリースノート / W3C TR / Chrome Platform Status / Apple Developer ドキュメント参照。
- ① ONNX opset 21+ と ORT 対応
- ② GGUF v4 仕様計画
- ③ ExecuTorch 1.0 GA 日と API 範囲
- ④ WebNN W3C CR→REC と Chrome/Edge 本番対応 op
- ⑤ TensorRT 10.x→11.x API 変更
- ⑥ TRT-LLM 1.0 安定版 と互換性
- ⑦ Blackwell FP4 (E2M1) CUDA/TRT サポート詳細
- ⑧ Apple Foundation Models 公開 API (iOS/macOS 26 Tahoe 3B)
- ⑨ MLX M4 Ultra Llama 3 70B スループット
- ⑩ coremltools 8+ ANE op カバレッジ
- ⑪ Qualcomm AI Hub 対応モデル・SLA・料金
- ⑫ IREE StableHLO 完全対応 op
- ⑬ ai-edge-torch 安定 API / SafeTensors 0.5+ / TVM 0.18+ Relax IR
Backlinks
- related ML Model Deployment