추론 성능 끌어올리기 — 측정과 최적화
추론 성능 끌어올리기 — 측정과 최적화
무작정 최적화를 시작하기 전에 먼저 해야 할 일이 있어요. 바로 지금 숫자가 얼마인지 측정하는 거예요. TensorRT 공식 가이드는 '측정 → 최적화 → 다시 측정' 반복을 기본 흐름으로 제시해요.
출처: https://docs.nvidia.com/deeplearning/tensorrt/latest/performance/best-practices.html
베이스라인부터. trtexec 로 ONNX·양자화 모델·직렬화된 엔진 각각에 대해 지연 시간과 처리량을 재보세요. 벽시계 타이머와 CUDA 이벤트로 측정하고, GPU 클럭이나 전원·열 스로틀 같은 환경 변수를 통제해야 숫자를 신뢰할 수 있어요. 안정적인 베이스라인이 없으면 모든 최적화가 그냥 추측이 돼 버려요.
최적화 기법. 신뢰할 만한 숫자가 나온 뒤 적용할 수 있는 것들이 이래요:
- 병렬성: 배칭(batching), CUDA graphs, 스트리밍으로 병렬 처리 폭을 키워요.
- 빌더 활용: 레이어 퓨전·pointwise fusion·Q/DQ fusion 은 빌더가 자동으로 처리하게 해요.
- Tensor Core 정렬: 텐서를 Tensor Core가 잘 쓰도록 정렬해요.
- 정밀도 제어: FP16·INT8·FP8 같은 낮은 정밀도를 쓸 때 품질과 속도의 트레이드오프를 함께 확인해요.
글로벌 튜닝. 빌드 시간을 더 쓸 수 있다면, 빌더 내부 knob을 자동 탐색하는 글로벌 성능 튜닝을 쓸 수 있어요. trtexec --tuneBuildRoutes --tuningSearch --tuningCacheFile 같은 플래그로 정확도까지 확인하며 여러 빌드 경로를 시도하고, 결과를 해석할 때 주의점도 함께 살펴야 해요.
프로덕션 체크리스트의 핵심만 뽑으면 이래요: 서명된 엔진만 받기(역직렬화는 네이티브 코드 실행), 스레드당 컨텍스트 하나, ILogger/IErrorRecorder 로 관측성 확보, 메모리 상한 설정.