Inference Engine
추론 엔진은 레이어 융합, 저정밀도, 최적화된 커널을 활용해 대상 하드웨어에서 학습된 모델을 실행합니다. 작동 방식과 일반적으로 사용되는 엔진을 다룹니다.
추론 엔진은 학습된 신경망을 실행해 새로운 데이터에 대한 예측을 생성하는 소프트웨어입니다. 추론 엔진은 일반적으로 ONNX 파일과 같은 계산 그래프로 표현된 학습 프레임워크의 내보낸 모델을 입력받아 특정 프로세서에 맞게 그래프를 최적화하고, 가능한 한 낮은 추론 지연 시간과 적은 메모리로 실행합니다. 데이터 센터 GPU부터 휴대폰과 마이크로컨트롤러까지 모든 하드웨어 종류에 맞는 엔진이 있으며, 모델 배포 과정에서 엔진은 모든 예측을 계산하는 구성 요소입니다.
추론 엔진이 모델을 가속하는 방법#
배포된 모델의 가중치는 업데이트되지 않으므로, 엔진은 역전파에 필요한 저장된 활성화 값과 같이 학습에 필요한 요소를 모두 제거하고 그래프를 자유롭게 재작성할 수 있습니다. 엔진은 상수에만 의존하는 부분을 미리 계산하고, 합성곱·정규화·활성화와 같은 레이어의 연속 구간을 단일 커널로 융합해 중간 결과가 빠른 온칩 메모리에 머물도록 하며, 버퍼를 재사용하도록 메모리를 계획합니다. 또한 모델 양자화를 통해 숫자 정밀도를 FP16 또는 INT8로 낮출 수 있으며, INT8의 경우 샘플 데이터에서 활성화 값의 범위를 측정합니다. TensorRT와 같은 엔진은 실제 장치에서 각 레이어에 대한 여러 후보 커널의 실행 시간을 측정한 다음 가장 빠른 커널을 선택하므로, 결과는 해당 하드웨어에 종속됩니다:
배치 정규화를 앞선 합성곱에 통합하는 것은 가장 흔한 재작성 방법 중 하나입니다. 추론 시 정규화는 고정된 값으로 각 채널을 스케일링하고 이동시키기만 하므로, 이 값을 합성곱의 가중치와 편향에 병합할 수 있습니다. PyTorch는 동일한 변환을 fuse_conv_bn_eval로 제공합니다:
import torch
from torch.nn.utils.fusion import fuse_conv_bn_eval
torch.manual_seed(0)
# A trained convolution followed by batch normalization (random statistics here)
conv = torch.nn.Conv2d(16, 32, kernel_size=3, padding=1).eval()
bn = torch.nn.BatchNorm2d(32).eval()
bn.running_mean.uniform_(-1, 1)
bn.running_var.uniform_(0.5, 2.0)
# Fold the normalization's scale and shift into the convolution's weights and bias
fused = fuse_conv_bn_eval(conv, bn)
# One layer now replaces two and produces the same output
x = torch.randn(1, 16, 64, 64)
with torch.inference_mode():
diff = (bn(conv(x)) - fused(x)).abs().max().item()
print(f"Max difference after fusing: {diff:.1e}")출력된 최대 차이는 2.1e-06이며, 이는 부동소수점 반올림 오차입니다. 융합된 단일 레이어는 메모리를 두 번 순회하는 대신 한 번만 순회하면서 원래의 두 레이어와 동일한 함수를 계산합니다.
일반적인 추론 엔진#
- TensorRT: NVIDIA 데이터 센터 GPU 및 Jetson 모듈용 엔진입니다. 특정 GPU 모델과 TensorRT 버전에 맞는 실행 계획을 생성하므로, 둘 중 하나가 변경되면 엔진을 다시 빌드해야 합니다.
- OpenVINO: Intel CPU, 통합 및 외장 GPU, NPU용 툴킷입니다.
- ONNX Runtime: ONNX 모델용 Microsoft의 크로스 플랫폼 엔진입니다. CUDA, TensorRT, OpenVINO, Core ML 등을 포함하는 실행 공급자라는 하드웨어 백엔드에 작업을 전달합니다.
- LiteRT: 이전에 TensorFlow Lite로 불렸던 Google 런타임으로, Android, 임베디드 Linux 및 마이크로컨트롤러를 지원하며 모바일 GPU와 NPU용 델리게이트를 제공합니다.
- Core ML: CPU, GPU 및 Neural Engine에 작업을 분산하는 Apple 온디바이스 프레임워크입니다.
- vLLM: 대규모 언어 모델용 오픈 소스 엔진으로, 여러 사용자를 동시에 지원하기 위해 요청 스케줄링과 어텐션 캐시용 페이지드 메모리를 추가합니다.
Ultralytics YOLO API는 로드하는 파일에 따라 엔진을 선택하므로, 동일한 predict 호출로 PyTorch의 .pt 체크포인트, ONNX Runtime의 .onnx 파일, TensorRT의 .engine 파일 또는 OpenVINO의 OpenVINO 폴더를 실행할 수 있습니다. Ultralytics YOLO26을 OpenVINO로 내보내고 결과를 로드하면 다른 코드를 변경하지 않고도 엔진을 전환할 수 있습니다:
from ultralytics import YOLO
# PyTorch 모델을 OpenVINO 형식으로 내보냅니다
model = YOLO("yolo26n.pt")
path = model.export(format="openvino") # creates 'yolo26n_openvino_model/'
# 내보낸 폴더를 로드하면 OpenVINO 엔진을 통해 예측을 실행합니다
ov_model = YOLO(path)
results = ov_model("https://ultralytics.com/images/bus.jpg")
results[0].save(filename="bus_openvino.jpg")추론 엔진과 관련 용어 비교#
- PyTorch 및 기타 학습 프레임워크: 그래프를 유연하게 유지하고 그래디언트 계산을 위해 연산을 기록하므로 모델을 설계하고 학습할 수 있습니다. 이러한 프레임워크도 추론을 실행하지만, 단일 장치용으로 구축된 엔진보다 오버헤드가 큽니다.
- ONNX: 모델의 그래프와 가중치를 설명하는 파일 형식입니다. ONNX Runtime과 TensorRT는 이 형식을 읽는 엔진입니다.
- 모델 서빙: 하나 이상의 엔진을 API, 요청 배칭, 버전 관리를 제공하는 네트워크 서비스로 감쌉니다. 이전에 Triton Inference Server라고 불렸던 NVIDIA Dynamo-Triton은 TensorRT, ONNX Runtime, PyTorch 모델에 이 기능을 제공합니다.
- 전문가 시스템 추론 엔진: 규칙 기반 AI에서 유래한 이 용어의 오래된 의미입니다. 여기서 추론 엔진은 전방 연쇄 또는 후방 연쇄를 통해 지식 베이스에 if-then 규칙을 적용합니다.










