피드로 돌아가기
Dev.toAI/ML
원문 읽기
Inference 최적화를 통한 DistilBERT 지연시간 750ms에서 280ms로 단축
Nobody Tells You This About Slow Transformer Models — I Fixed Mine in 3 Steps
AI 요약
Context
DistilBERT 기반의 서포트 티켓 분류 모델 운영 중 요청당 750ms의 높은 Latency 발생. 모델 아키텍처나 파라미터 문제가 아닌, 단일 입력 처리 방식의 Inference 파이프라인 구조로 인한 병목 현상 식별.
Technical Solution
- 단일 요청 처리 방식에서 Batch Processing 구조로 전환하여 Forward Pass 횟수 최소화
- PyTorch의 Training 전용 오버헤드(Autograd, Gradient Tracking) 제거를 위한 ONNX Runtime 도입
- ONNX Export 시 dynamic_axes 설정을 통한 가변 Batch Size 및 Sequence Length 대응 구조 설계
- 입력 데이터 분포 분석을 통한 max_length 최적화로 불필요한 연산량 제거
- CPU 환경의 추론 효율 극대화를 위한 Quantization 적용으로 연산 정밀도 조정 및 속도 향상
Impact
- 평균 요청 지연시간 750ms에서 280ms로 약 62% 개선
- Batching 도입만으로 750ms에서 480ms로 36% 성능 향상 달성
- 적정 max_length 설정(128 $\rightarrow$ 64)을 통해 추가 15% 성능 이득 확보
Key Takeaway
모델 자체의 경량화보다 Inference 파이프라인의 구조적 최적화가 실제 서비스 성능에 더 지대한 영향을 미침. 특히 CPU 환경에서는 Training 프레임워크의 오버헤드를 제거한 전용 Runtime 사용이 필수적임.
실천 포인트
- 단일 요청 처리 대신 Dynamic Batching 도입 및 적정 Batch Size(8~32) 검토 - PyTorch 모델의 CPU 서빙 시 ONNX Runtime 전환 및 Quantization 적용 여부 확인 - 입력 텍스트의 길이 분포를 분석하여 max_length를 실제 데이터에 맞게 최적화 - ONNX Export 시 dynamic_axes 설정을 통해 런타임 Shape 에러 방지