AI 모델 연산 최적화
AI 연산 및 후처리 속도 30% 향상
에이오팜·2024.05 - 2024.09·백엔드 개발
Python
PyTorch
C++
Pybind11
1. 문제
오픈소스 라이브러리를 사용한 AI 모델 연산 시 지연이 발생하여 선별 라인의 처리 속도를 따라가지 못했습니다.
비즈니스 임팩트
- 선별 라인 대기 시간 증가
- 처리량 목표 미달
- 고객 불만 증가
2. 최적화 전략
병목 분석
| 단계 | Before | 비율 | |------|--------|------| | 이미지 로드 | 20ms | 8% | | 전처리 | 30ms | 12% | | AI 추론 | 120ms | 48% | | 후처리 | 80ms | 32% |
→ AI 추론과 후처리가 주요 병목
최적화 포인트
- 후처리 로직 최적화 - 불필요한 연산 제거
- C++ 포팅 - GIL 우회, CPU 연산 성능 향상
- 메모리 최적화 - 불필요한 복사 제거
3. 핵심 기술 선택
Python → C++ 포팅 결정
| 고려사항 | Python | C++ | |----------|--------|-----| | GIL 영향 | ⚠️ 있음 | ❌ 없음 | | 연산 속도 | 기준 | 2~5배 빠름 | | 개발 속도 | 빠름 | 느림 |
선택: 핵심 연산만 C++ 포팅
- 전체 포팅이 아닌 병목 구간만 선택적 포팅
- Pybind11로 기존 Python 코드와 자연스러운 통합
4. 성능 결과
후처리 최적화 결과
| 연산 | Before | After | 개선 | |------|--------|-------|------| | NMS | 45ms | 15ms | 67% ↓ | | 좌표 변환 | 20ms | 5ms | 75% ↓ | | 합계 | 80ms | 23ms | 71% ↓ |
전체 파이프라인 개선
| 지표 | Before | After | 개선율 | |------|--------|-------|--------| | 총 처리 시간 | 250ms | 175ms | 30% ↓ | | 처리량 | 4 FPS | 5.7 FPS | 42% ↑ | | 정확도 | 기준 | 동일 | 유지 |
5. 배운 점
- 프로파일링 능력 - cProfile, line_profiler 활용
- C++ / Python 연동 - Pybind11 실무 적용 경험
- AI 모델 이해 - 추론 파이프라인 구조