
OpenVIN (Open Visual Inference and Neural Network Optimization) 는 Intel에서 제공하는 딥러닝 모델 최적화 및 추론 가속화 도구입니다. 특히 인텔 CPU, GPU, VPU (예: Movidius) 등 다양한 Intel 하드웨어에서 최적의 성능을 끌어내기 위해 만들어졌습니다.
1. OpenVINO가 무엇인지
OpenVINO는 크게 3가지 역할이 있습니다.
- 모델 변환
PyTorch, TensorFlow, ONNX 등에서 학습한 모델을 OpenVINO에서 사용할 수 있도록 IR (Intermediate Representation) 포맷으로 변환합니다. - 모델 최적화
- 정수 양자화 (INT8)
- 레이어 병합, 연산 단순화
- 레이턴시 최소화 및 메모리 절감
이런 최적화를 통해 속도는 빠르게, 성능은 유지하는 구조로 변환합니다.
- 추론 엔진 제공 (Inference Engine):
다양한 하드웨어 (CPU, GPU, MYRIAD 등)에 맞춰 자동으로 백엔드 선택 및 실행을 해줍니다.
2. 왜 OpenVINO가 필요한가?
1) PyTorch와 TensorFlow는 실무에 바로 쓰기엔 무겁다
PyTorch나 TensorFlow로 학습한 모델은 GPU 환경에서는 빠르지만, CPU나 임베디드 환경에서는 느리거나 무겁습니다. 특히 다음과 같은 문제들이 있습니다.
- CPU에서는 GPU 대비 추론 속도가 확연히 느림
- 모델이 너무 커서 모바일/엣지 디바이스에 올리기 어려움
- 다양한 하드웨어를 위해 따로따로 모델을 최적화해야 함
그래서 OpenVINO가 등장합니다!
OpenVINO는 다음과 같은 상황에서 꼭 필요합니다.
상황 | 해결 방법 (OpenVINO) |
💻 CPU에서도 빠르게 추론하고 싶다 | CPU 최적화된 연산으로 빠른 속도 제공 |
📱 모바일, 로봇, CCTV 등에서 사용하고 싶다 | 모델 경량화 + 하드웨어 친화적인 추론 |
🛠 다양한 Intel 디바이스에 하나의 모델로 적용하고 싶다 | IR 포맷 사용으로 호환성 극대화 |
⚡ 실시간 분석이 중요하다 (ex. 영상 스트리밍) | 딜레이 없는 고속 추론 처리 가능 |
3. 어떻게 모델을 최적화할까? (OpenVINO 최적화 구조)
Step 1. 모델 변환 (Model Conversion)
OpenVINO는 다양한 프레임워크 모델을 Intermediate Representation(IR) 포맷으로 변환합니다.
# 예: ONNX 모델을 OpenVINO IR로 변환
mo --input_model model.onnx
변환 결과는 model.xml (구조)과 model.bin (가중치) 두 파일입니다.
이 포맷은 Intel 하드웨어에서 빠르게 실행될 수 있도록 설계되어 있습니다.
Step 2. 모델 최적화 (Optimization)
변환된 모델에 대해 다음과 같은 최적화를 적용합니다:
✔ 연산 구조 최적화
- 불필요한 레이어 제거
- 연산 병합 (예: Convolution + BatchNorm → 1개 연산으로 합침)
- 불필요한 Precision 변환 제거
✔ 양자화 (Quantization)
- FP32 → INT8 정수형 변환
- 연산량 4배 감소, 메모리 사용량 대폭 절감
- 성능 손실은 거의 없이 속도 최대 2~5배 향상 가능
# POT API 예시 (Post-training Optimization)
from openvino.tools.pot import IEEngine, load_model, save_model, compress_model_weights
✔ Precision 변환
- FP32 → FP16: GPU에 적합
- FP32 → INT8: CPU, VPU에 적합
Step 3. 하드웨어별 Inference Engine 컴파일
OpenVINO는 사용자가 어떤 디바이스에서 추론할 것인지 지정하면, 자동으로 최적화된 컴파일을 진행합니다.
from openvino.runtime import Core
core = Core()
model = core.read_model("model.xml")
compiled_model = core.compile_model(model, device_name="CPU") # 또는 GPU, MYRIAD 등
하드웨어에 따라 메모리 배치, 연산 스케줄링 등을 자동 조정하여 속도를 최대화합니다.
OpenVINO는 경량화 + 성능향상의 핵심 솔루션
OpenVINO는 다음과 같은 경우 특히 유용하다.
- 엣지 디바이스에서 실시간 딥러닝 모델을 써야 할 때
- CPU 환경에서 빠르게 추론하고 싶을 때
- 모델을 작게 줄이고 싶을 때
- Intel 하드웨어를 적극 활용하고 싶을 때
4. OpenVINO vs TensorRT 뭐가 다를까?
항목 | OpenVINO | TensorRT |
🏢 제공사 | Intel | NVIDIA |
🎯 대상 하드웨어 | Intel CPU, GPU, VPU (ex. Movidius) | NVIDIA GPU (Jetson 포함) |
📦 프레임워크 호환 | ONNX, TensorFlow, PyTorch (via export) | ONNX, TensorFlow, PyTorch (via export) |
🔧 최적화 방식 | INT8/FP16/FP32, 레이어 병합, 하드웨어별 자동 조정 | INT8/FP16 최적화, 커널 튜닝, TensorFusion 등 |
🧠 런타임 엔진 | Inference Engine (플랫폼 자동 선택) | TensorRT Runtime (GPU 전용) |
🧪 양자화 도구 | POT (Post-training Optimization Tool) | QAT/PTQ 모두 지원 |
📱 엣지 지원 | ✅ Intel 엣지 디바이스 최적 | ✅ Jetson 등 NVIDIA 엣지 기기 최적 |
🛠 설치 난이도 | 상대적으로 쉬움 (pip 설치 가능) | 비교적 복잡함 (CUDA, cuDNN, TensorRT 설치 필 요) |
1) 그럼 어떤 경우에 TensorRT를 쓸까?
TensorRT는 다음 조건에 해당하면 최고의 선택 이다.
- NVIDIA GPU 기반 환경에서 서빙할 때 (예: 서버, Jetson)
- FP16 또는 INT8로 연산 최적화를 하고 싶을 때
- 성능이 중요하고 GPU에서 극한의 최적화가 필요할 때
예시
- 자율주행 차량 (Jetson Xavier에서 실시간 추론)
- 서버 기반 AI 서비스에서 RTX GPU로 서빙
2) 어떤 경우에 OpenVINO를 쓸까?
OpenVINO는 다음 조건에 맞는 경우 더 적합합니다:
- *ntel 기반의 환경(CPU, 내장 GPU, VPU)**에서 동작시켜야 할 때
- 엣지 디바이스나 CPU-only 환경에서 경량화된 모델이 필요할 때
- Intel 하드웨어를 사용하는 산업/로봇/영상 분석 시스템
예시
- CCTV 영상 분석 (Intel NUC 사용)
- 산업용 검사 장비 (Movidius 칩)
- 의료 AI 디바이스에서 실시간 판독
실무에서 비교
- 클라우드 GPU 서버에서 서빙: TensorRT 추천
- 모바일, 산업용, 인텔 CPU 기반 PC에서 서빙: OpenVINO 추천
- 엣지 AI 카메라 (Intel 기반): OpenVINO
- Jetson Nano, Xavier 같은 NVIDIA 엣지 디바이스: TensorRT
다음은 허깅페이스에서 모델을 가져와서 openvino 를 활용하여 최적화를 진행해보겠습니다.
감사합니다.
'딥러닝 (Deep Learning) > [04] - 학습 및 최적화' 카테고리의 다른 글
TensorRT 개념 및 이해 (1) | 2025.03.27 |
---|---|
PyTorch(.pt) vs ONNX 무엇이 다르고, 왜 ONNX 추론이 더 빠를까? (2) | 2025.03.14 |
[Optimizer] - 일반적으로 왜 Adam만 사용할까? [2] (2) | 2025.01.01 |
[Optimizer] - 초기 optimizer 이해 [1] (3) | 2024.12.28 |
Pseudo 라벨링(Pseudo Labeling)이란 무엇인가? (0) | 2024.11.24 |