티스토리 뷰
Triton Inference Server란?
Triton Inference Server(이하 trtis)는 NVIDIA의 모델 추론용 오픈 소스 서버 프레임워크이다. 공식 홈페이지에서 소개 중인 이점은 아래와 같다.
1. 다수의 프레임워크 지원
- tensorflow, PyTorch, TensorRT, onnx 등 범용적인 모델 프레임워크들부터 Python 백엔드를 통한 자유로운 커스텀까지.
2. 고성능 추론
- C++ 기반이라 python 기반 inference보다 더 빠름
- 단일 GPU에서 여러 모델을 효율적으로 굴릴 수 있도록 설계되어 있음
- 다이나믹 배칭을 통해 지연 시간을 최소화 및 추론 시간을 최적화할 수 있음
- ensemble 기능을 지원, 모델 파이프라인을 효율적으로 설계 가능
3. DevOps와 MLOps를 위한 설계
- Multi GPU 지원
- 무중단 모델 업데이트 가능
- Kubernetes와의 통합 (Prometheus 기반 메트릭, 오토스케일링 등 기능 제공)
- Kubeflow 및 KServe와의 통합 (trtis 기반의 AI 워크플로우 구축 가능)
- 표준 HTTP/gRPC 인터페이스 제공
4. NVIDIA AI의 필수 요소
- GPU의 절대 강자 NVIDIA에서 공식적으로 발표한 서버 프레임워크이므로, 그 성능이 보장됨
위의 설명만 보면, 이런 사기적인 프레임워크가 또 있나 싶다. trtis는 실제로 좋은 성능과 뛰어난 완성도를 가지고 있지만, 도입 전에 고려해볼만한 요소 몇 가지를 운영 경험을 바탕으로 적어보려 한다.
Triton Inference Server 도입 전 고려 요소
1. '잘' 쓰기 위한 난이도가 높다.
이 프레임워크는 직관성과 유연함을 갖추고 있어, 인코더 기반 모델 하나정도 배포하는건 크게 어렵지 않게 따라할 수 있다. 다만, 정말 이 프레임워크를 효율적으로, 최대 성능을 뽑아내는 방향으로 잘 사용하려면 정말 많은 배경 지식과 기술적 숙련도가 필요하다.
우선, "서버"이기 때문에 네트워크에 관한 고려는 필수다. HTTP/gRPC를 기반으로 모델 입출력을 교환하기 때문에, 네트워크 I/O 작업에서 병목이 생기지 않도록 잘 설계해야 한다. trtis로 얻는 모델 성능의 이득보다 통신 과정에서 생기는 손해가 더 크면, 사용하는 의미가 퇴색될 수 있다.
또한, 모델에 대한 기초적인 개념, 모델 추론 및 최적화 방법론에 대한 이해가 있어야 한다. 배포하고자 하는 모델이 어떤 런타임에서 가장 좋은 성능을 보일지, 파이프라이닝 되어있는 추론 플로우를 어떻게 잘 뜯어내어 trtis에 이식시킬지 등. 모델에 대한 기반 지식이 있어야 결정할 수 있는 고려사항이 많다.
2. 생성형 모델 배포가 쉽지 않다.
디코더 기반의 (또는 디코더가 포함되어 있는) 생성형 모델은 여타 모델보다 추론 과정이 복잡하다. auto-regressive의 특성상 input 및 output size가 고정적이지 않으며, 토큰 추론 과정도 더욱 복잡하다. 또한 고려해야 할 생성 옵션 또한 매우 다양하다. 그래서 생성형 모델을 trtis로 활용하고자 할 때, python 코드를 그대로 추론에 활용할 수 있도록 제공되는 python 백엔드를 사용하기도 한다. 그러나..
3. python 백엔드는 손해다.
python 백엔드는 지양해야 한다고 생각한다. Nvidia가 자랑하는 C++ 기반 추론, 다이나믹 배칭, Multi GPU 등을 사용할 수 없게 되므로, 추론 성능 관점에서 아무런 이득도 얻을 수 없게 된다. 오히려 네트워크 통신 비용만 추가되어 성능 관점에선 손해가 발생하게 된다.
물론 python 백엔드도 Single GPU Multi Model에 대한 효율적인 관리가 가능한 점 등 여러 부가적인 관점에서 이득을 볼 수는 있다. 그러나 추론용 프레임워크를 쓰는데 추론 성능 저하가 있으면 그 의미가 많이 퇴색된다고 생각하므로, 최대한 python 백엔드의 대안을 찾아보는걸 추천한다.
예를 들어, 생성형 모델은 TensorRT-LLM (혹은 구 버전인 FasterTransformers)로 변환한 후 해당하는 백엔드를 활용하는 방안이 있을 수 있으며, 파이프라인의 경우 잘 분리하여 ensemble 백엔드로 재구축하는 방안이 있다.
4. 레퍼런스가 부족하다.
국내에서 AI 모델을 trtis 정도의 추론 최적화까지 해가며 배포하는 기업이 흔치는 않을거라 생각한다. trtis는 훌륭한 추론 프레임워크지만, 한국어 레퍼런스는 많이 부족한 편이다. 대부분의 정보를 공식 깃허브와 도큐먼트를 통해 찾아나가야 한다. 물론, 관련 정보와 example이 굉장히 잘 구성되어 있는 편이다. 요즘은 웹 번역도 잘 되니, 트러블슈팅이 어려다 정도의 부침이 있다.
이 시리즈를 통해서 해볼 것
우선, 간단한 감정분류 모델을 TensorRT Engine으로 변환 및 trtis에 띄워볼 것이다. 그 후 심화버전으로, 고유의 파이프라인을 가진 생성형 모델을 TensorRT-LLM 및 Ensemble을 활용하여 trtis에 띄워볼 예정이다. (아마 Whisper가 예시로 가장 적합할 것 같다)
다음엔 k8s와 결합하여 metric 연동, 오토스케일링 등을 해볼 것이며, 그 외에도 성능 측정 등의 다양한 태스크를 수행해보려 한다.
참조
'MLOps > Triton Inference Server' 카테고리의 다른 글
[Triton Inference Server] 한국어, 특수 문자 등이 출력되지 않는 경우 in python backend (0) | 2023.05.19 |
---|
- Total
- Today
- Yesterday
- Ai
- 메모리 누수
- 모델 추론
- Gunicorn
- memory leak
- 웹사이트배포
- 넷플릭스
- 유난한도전
- 조직문화
- 규칙없음
- 개발자회고
- 정적웹사이트
- 회고
- 모델 추론 최적화
- 개발자동아리
- Python
- 토스
- s3
- uvicorn
- AWS
- 백엔드
- Triton Inference Server
- mlops
- 사이드프로젝트
- S3+CloudFront
- CloudFront
- ddd
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |