[AI]2단계_모델_추론성능_최적화_익명닉네임_생성 - 100-hours-a-week/12-marong-Wiki GitHub Wiki
1.기존 모델 추론의 성능 지표 수집 및 문서화
모델별 추론 성능 비교 지표
항목 | SBERT (KR-SBERT) | Word2Vec 계열 | FastText | Contextual Embedding (BERT 계열) |
---|---|---|---|---|
응답 시간 (Latency) | 평균 200~500msP95: 700msP99: 1s | 평균 5~10ms | 평균 10~20ms | 평균 700ms~1.5sP95 이상: 2s+ |
처리량 (Throughput) | 20~100 RPS (배치 최적화 시) | 1000+ RPS | 500~800 RPS | 5~50 RPS (GPU 기준) |
리소스 사용량 | GPU 사용률: 중VRAM: ~2.3GBCPU: 중 | CPU 기반RAM: 적음 | CPU 기반RAM: 중간 | GPU 사용률: 높음VRAM: 5~7GBCPU: 중 |
에러율 / 타임아웃 | 낮음 (형식 오류 외엔 안정적) | 매우 낮음 | 낮음 (OOV 발생 시 보정 필요) | 중간~높음 (메모리 이슈 발생 가능) |
Cold / Warm Start | Cold: 5~10초Warm: 200ms 이하 | Cold: 1초 미만Warm: 거의 없음 | Cold: 1~2초Warm: 빠름 | Cold: 수십 초Warm: 700ms 수준 |
2.식별된 성능 병목 요소 및 원인 분석
병목 구간 | 원인 분석 |
---|---|
Cold Start 모델 로딩 시간 | - 대용량 Transformer 가중치 파일 로딩 비용- Python 모듈 임포트 및 초기화 오버헤드 |
단건 요청 단일 추론 Latency | - 비효율적 배치 설정(작은 배치)- 동기식 I/O 블로킹 |
GPU 메모리 제약 | - 빈번한 메모리 할당·해제- 중복 데이터 복사로 VRAM 사용량 증가 |
CPU ↔ GPU 데이터 전송 지연 | - 직렬화/역직렬화 오버헤드(numpy ↔ torch Tensor)- 불필요한 포맷 변환 |
비효율적 배칭 전략 | - 고정 배치 크기로 인한 대기 시간 불균형- Dynamic Batching 미적용 |
I/O 대기 시간 (로깅·모니터링) | - 동기식 로그 기록 및 메트릭 수집- 디스크 쓰기 동기 처리 |
3.적용할 최적화 기법 구체 계획 수립
3. 적용할 최적화 기법 구체 계획 수립
최적화 기법 | 구체 계획 |
---|---|
모델 경량화 & 압축 | 8-bit 양자화 적용, Knowledge Distillation으로 소형 Student 모델 생성, ONNX 변환 및 Graph 최적화 |
배치 처리 & 동적 배칭 | Dynamic Batching 도입(pyTorch Serve / ONNX Runtime), 최적 배치 크기 탐색 |
Mixed Precision | PyTorch AMP 기반 FP16 활성화, NVIDIA Apex 검증 |
비동기 I/O 전환 | FastAPI 엔드포인트를 async def로 전환, aiohttp/uvicorn workers 확장 |
응답·벡터 캐싱 | Redis 기반 LRU 캐시 구현, 빈번 재요청 결과 캐싱 |
프로파일링 & 모니터링 | PyTorch Profiler / NVIDIA Nsight 프로파일링, Prometheus + Grafana 대시보드 구축 |
하드웨어 튜닝 | GPU 전원 관리 모드 최적화(P2/P4), CPU affinity 및 NUMA 바인딩 |
4.최적화 적용 후 기대 성능 지표 정의
지표 | 기존 값 | 목표 값 |
---|---|---|
평균 Latency | 200~500 ms | 100~300 ms |
P95 Latency | 700 ms | 350 ms |
P99 Latency | 1 s | 600 ms |
Throughput (RPS) | 20~100 | 80~200 |
GPU 사용률 | 중간 | 70~90% |
VRAM 사용량 | ~2.3 GB | ≤1.5 GB |
Cold Start 시간 | 5~10 초 | 2~3 초 |
Warm Start 시간 | ≤200 ms | ≤100 ms |
에러율 / 타임아웃 | < 1% | < 0.5% |
I/O 대기 시간 | ~20 ms | < 10 ms |
4.1. 최적화 목표치 설정 근거
-
Latency 단축
- 8-bit Quantization, Mixed Precision(FP16) 적용 → 연산량 절반 이하 감소
- Dynamic Batching 도입 → GPU 파이프라인 효율화
-
Tail Latency 개선 (P95/P99)
- 비동기 I/O 전환 및 벡터 캐싱 → latency spike 제거
- 빈번 재요청 키워드 캐시 히트 시 즉시 응답
-
Throughput 증가
- Dynamic Batching + GPU 전원 모드(P2/P4) 튜닝 → 처리량 2~3배 향상
- Redis 캐싱으로 불필요한 모델 호출 최소화
-
GPU 활용도 최적화
- Mixed Precision + Dynamic Batching → 70~90% 수준의 안정적 자원 활용
-
메모리 사용량 절감
- 8-bit Quantization & ONNX Graph 최적화 → VRAM 사용 ≤1.5 GB
-
Cold Start 단축
- ONNX Runtime/TorchScript 전환, 지연 임포트(lazy init) 적용 → 초기 로딩 2~3 초
-
Warm Start 가속
- 모델 캐시 유지 및 Worker 풀 운영 → 호출 지연 ≤100 ms
-
에러율·타임아웃 감소
- 비동기 로직, 벡터 캐싱, 프로파일링 → 실패 확률 절반 이하로 감소
- 자동 Retry 로직 추가
-
I/O 대기 시간 절반 이하
- 비동기 로그·메트릭 수집 → 디스크 I/O 블로킹 최소화
Note: 실제 벤치마크 결과에 따라 세부 목표치는 조정될 수 있습니다.