이종관
Back to Projects

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 추론과 후처리가 주요 병목

최적화 포인트

  1. 후처리 로직 최적화 - 불필요한 연산 제거
  2. C++ 포팅 - GIL 우회, CPU 연산 성능 향상
  3. 메모리 최적화 - 불필요한 복사 제거

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. 배운 점

  1. 프로파일링 능력 - cProfile, line_profiler 활용
  2. C++ / Python 연동 - Pybind11 실무 적용 경험
  3. AI 모델 이해 - 추론 파이프라인 구조