b__ono__ng
Onnxruntime-DirectML 정확도 유지하며 추론 성능 개선 시도 본문
테스트 환경
모델
- onnxruntime-DirectML
- YOLOv8m
환경
- Intel Core i5-12600
- 32GB RAM
- RTX 3070
비디오
- 1920x1080
- 30FPS
최적화 단계별 변경 요약
Step 1: SessionOptions 최적화
create_ort_session()에서 기본 옵션 대신 튜닝된 SessionOptions 적용
| 옵션 | 기존 | 변경 |
| graph_optimization_level | ORT_ENABLE_BASIC (기본값) | ORT_ENABLE_ALL |
| enable_mem_pattern | False (기본값) | True |
| execution_mode | ORT_PARALLEL (기본값) | ORT_SEQUENTIAL |
- ORT_ENABLE_ALL: operator fusion, constant folding 등 그래프 수준 최적화 전부 활성화
- enable_mem_pattern: 추론 간 메모리 재사용 패턴 활성화 (할당/해제 감소)
- ORT_SEQUENTIAL: DirectML은 자체적으로 GPU 병렬화하므로 호스트 측은 sequential이 오버헤드 적음
결과: -4.7% (55.5 → 58.3 FPS)
Step 2: I/O Binding
session.run() 대신 io_binding으로 입출력을 GPU 디바이스에 직접 바인딩
- bind_cpu_input() → GPU로 입력 전송
- bind_output('dml') → GPU에 출력 버퍼 사전 할당
- run_with_iobinding() → 매 프레임 메모리 할당 없이 추론
결과: 노이즈 수준 차이 (0.03ms), 코드 복잡도만 증가 → 제거
Step 3: Warm-up 추론
ONNXModel.__init__() 마지막에 더미 입력으로 1회 추론 실행
dummy = np.zeros((1, 3, self.height, self.width), dtype=np.float32)
self.session.run(None, {self._input_name: dummy})
- DirectML은 첫 추론 시 GPU 셰이더를 컴파일함 (JIT)
- 모델 로딩 시점에 미리 컴파일해두면 실제 추론 시 지연 없음
결과: Std 1.01→0.70ms, Max 24.05→20.81ms (안정성 개선)
Summary
| 지표 | Baseline | 최종 | 변화 |
| Avg | 18.01ms | 17.77ms | -1.4% |
| FPS | 55.5 | 56.3 | +1.4% |
| Std | 1.01ms | 0.70ms | -30.7% |
| Max | 24.05ms | 20.81ms | -13.5% |
| 정확도 | 유지 | 유지 | 유지 |
bbox 기존 성능을 유지하면서 다른 전처리를 바꿔서 성능을 개선할 수 있을까 해서 해봤는데 생각보다 별 차이는 없다..
'IT > AI' 카테고리의 다른 글
| [Skills] Smart File Organizer: 파일 내용 기반 Rename&Sorting Skill (1) | 2026.03.09 |
|---|---|
| OpenClaw Agent 커스텀이 안 먹힐 때 (4) | 2026.03.04 |
| onnxruntime-directml 사용하게 되는 경우 (1) | 2026.02.26 |
| AgentDoG: LLM Guard (4) | 2026.02.03 |
| CALM(Continuous Autoregressive Language Models) 논문 리뷰 (2) | 2025.11.27 |