Inference Engineは、人工知能・機械学習分野における重要な概念・技術です。
Inference Engine(推論エンジン)は、学習済みの機械学習モデルを本番環境で効率的に実行するためのソフトウェアフレームワークです。学習は研究・開発フェーズで行われる一方、推論(Inference)は実運用で繰り返し実行されるため、高速性・低レイテンシ・省メモリ・デプロイの容易さが重視されます。
| 項目 | 学習(Training) | 推論(Inference) |
|---|---|---|
| 頻度 | 一度 / 定期 | 継続的 |
| 計算量 | 非常に多い | 中程度 |
| 勾配計算 | 必要 | 不要 |
| メモリ | 大量必要 | 少なくて済む |
| バッチサイズ | 大きい | 小さい(リアルタイム) |
| 目的 | モデル構築 | モデル活用 |
| エンジン |
|---|
| 開発元 |
|---|
| 対応 |
|---|
| 特徴 |
|---|
| ONNX Runtime | Microsoft | 全般 | 業界標準、広範な対応 |
| TensorRT | NVIDIA | NVIDIA GPU | 最高速度、GPU 特化 |
| OpenVINO | Intel | Intel CPU/GPU/NPU | Intel 最適化 |
| Core ML | Apple | Apple シリコン | iOS/macOS 統合 |
| TFLite | モバイル・組込み | Android 標準 |
| エンジン | 対応 | 特徴 |
|---|---|---|
| NCNN | モバイル | Tencent、軽量 |
| MNN | モバイル | Alibaba、高速 |
| TNN | モバイル | Tencent、軽量 |
| Paddle Lite | モバイル | Baidu |
| Armnn | ARM | ARM 最適化 |
| エンジン | 特徴 |
|---|---|
| vLLM | PagedAttention、高スループット |
| TGI | Hugging Face 本番向け |
| llama.cpp | CPU/GPU、量子化 |
| Ollama | ローカル LLM 実行 |
| TensorRT-LLM | NVIDIA、H100/B200 |
| MLC-LLM | マルチプラットフォーム |
モデルの精度を落として軽量化・高速化:
| 量子化 | サイズ | 速度 | 精度 |
|---|---|---|---|
| FP32 | 100% | 1× | 基準 |
| FP16 | 50% | 2× | 99% |
| BF16 | 50% | 2× | 99% |
| INT8 | 25% | 3× | 95-98% |
| INT4 | 12.5% | 4-6× | 85-95% |
複数の演算を 1 つに統合:
ハードウェアに応じた最適カーネル選択:
計算グラフを最適化:
入力サイズを動的に変更:
1 つの入力の推論時間:
単位時間あたりの処理数:
NVIDIA GPU 向け最強の推論エンジン:
import tensorrt as trt
# ONNX モデルを TensorRT エンジンに変換
logger = trt.Logger(trt.Logger.WARNING)
builder = trt.Builder(logger)
network = builder.create_network(1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH))
parser = trt.OnnxParser(network, logger)
with open('model.onnx', 'rb') as f:
parser.parse(f.read())
config = builder.create_builder_config()
config.set_flag(trt.BuilderFlag.FP16)
engine = builder.build_engine(network, config)
業界標準の汎用推論エンジン:
import onnxruntime as ort
# セッション作成
session = ort.InferenceSession(
'model.onnx',
providers=['CUDAExecutionProvider', 'CPUExecutionProvider']
)
# 推論実行
input_name = session.get_inputs()[0].name
result = session.run(None, {input_name: input_data})
Transformer の推論では Key-Value キャッシュが大きなメモリを占有:
トークン生成は本質的に逐次的だが、以下で高速化:
LLM 推論では INT4 が主流:
# TensorRT(最速)
pip install tensorrt onnx-tensorrt
# ONNX Runtime
pip install onnxruntime-gpu
# vLLM(LLM)
pip install vllm
# Ollama(簡単)
curl -fsSL https://ollama.com/install.sh | sh
# OpenVINO
pip install openvino
# ONNX Runtime CPU
pip install onnxruntime