Model Runtime and Conversion(モデルランタイムと変換)

article technology medium #model-runtime#model-conversion#onnx#onnx-runtime#gguf#safetensors#tensorrt#tensorrt-llm#openvino#coreml#executorch#mlx#tflite#litert#llama-cpp#webgpu#webnn#mlc-llm#web-llm#transformers-js#tvm#iree#torch-compile#torch-export#stablehlo#openxla#optimum#quantization#awq#gptq#smoothquant#fp8#gguf-quants
Created: 2026-05-27 Updated:

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 v3LLM CPU/Apple ローカルllama.cpp 単一ファイル、重み+量子化+トークナイザ+メタ格納、GGML 置換 (2023-08)
SafeTensors 0.4.xHF 重み配布pickle 任意コード実行排除、ヘッダ JSON+生 tensor、mmap ゼロコピー
StableHLO/MLIRJAX/TF/PyTorch→XLA/IREE/TVMXLA HLO 安定 op、JAX jit 生成、torch.compile XLA 入力
torch.export ExportedProgramExecuTorch/ONNX dynamo 入力Dynamo+AOT で純粋 FX、TorchScript 後継

TorchScript はレガシー、PyTorch 2.x は torch.export が中心軸。torch.compile (Inductor) は高速化用で torch.export (ポータブル成果物) と目的が異なる。

GGUF 量子化バリアントと K-quant

バリアントビット用途
Q8_08ほぼ fp16 品質、サイズ半減
Q6_K / Q5_K_M6 / 5高精度、Apple Silicon で人気
Q4_K_M4 (K-quant)最普及、コンシューマ GPU/CPU 標準
IQ4_XS/IQ3_XS/IQ2_XXS4/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-torchtorch.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→ONNXtf2onnxJAX→ONNXjax2tf → 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.mlpackage ML Program、ANE 16-bit のみ + 大行列乗算で GPU/CPU fallback
  • LiteRT (旧 TFLite).tflite FlatBuffers、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/FP4QLoRA 用 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 種

  1. ONNX opset ミスマッチ — エクスポート opset とランタイムサポート不一致で実行時エラー、TRT EP は CPU EP より遅れがち、事前確認必須。
  2. TensorRT 動的形状の profile 範囲外で再コンパイル — optimization profile min/max 外バッチで TRT エンジン再ビルド (数十秒〜数分)、想定範囲を明示。
  3. GGUF メタデータドリフトtokenizer.ggml.tokens と HF tokenizer.json 乖離で fine-tune 後デコード崩壊、変換時 --vocab-type bpe --vocab-model-file tokenizer.json 明示。
  4. カスタム op カバレッジギャップ — RoPE/SDPA は PyTorch 内 FlashAttention 融合だが ONNX エクスポートで unfused 展開され TRT/CoreML EP が受けない、op カバレッジ表を確認。
  5. FP16/BF16/FP8 変換後の浮動小数点乖離 — softmax exp()/LayerNorm variance で NaN、変換後 BLEU/perplexity 評価必須、bf16 は表現範囲広く回避しやすい。
  6. 量子化 Calibration セットのドメイン外バイアス — 本番乖離でスケールがドメイン外活性化に最適化、精度劣化、本番に近い 512〜1024 サンプル使用。
  7. SafeTensors 非 mmap FS でのメモリスパイク — Docker overlay2/NFS で mmap() 非対応 → 全テンソル ヒープコピーで OOM、K8s では emptyDir medium: Memory か NFS 回避。
  8. CoreML 16-bit 形状制約と ANE op カバレッジ — ANE は FP16 のみ、シーケンス長閾値超過で CPU 落ち、ct.models.utils.get_compute_unit_usage() で確認。

関連記事

未確認事項と注意点 (確認時点: 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

Local graph