NVIDIA Triton 란 무엇인가?
인공지능 모델은 딥러닝의 발전으로 점점 커지고 성능도 향상되고 있다. 하지만 그만큼 추론 속도는 느려지고 많은 리소스가 필요하다. 더 좋은 GPU 를 사용하면 효과를 볼 수 있지만 많은 비용이 들기 때문에 어떻게 인공지능 모델을 효율적으로 운영할 수 있는지 연구가 계속 되고 있다. 비용을 줄이기 위한 방법으로는 모델 경량화와 같이 인공지능 모델의 크기를 줄이는 방법부터 효율적인 추론을 위한 ONNX, TensorRT 변환 등 다양한 방법이 있다.
ONNX, TensorRT 변환의 경우, 변환된 engine(=모델) 을 서빙하기 위해서는 별도의 코드 작성이 필요하다. 이때 리소스를 더 절약하는 방법을 사용하기 위해서는 C++ 로 코드를 작성해야 한다. (사실 python 을 깊게 파보면 거의 다 C 언어로 구성되어 있다....) C++ 로 작성하는 과정이 쉽지 않기 때문에 이런 어려운 부분을 Triton Inference Server 를 이용하여 쉽게 해결할 수 있다.
NVIDIA Triton 서버는 오픈소스 소프트웨어로 제공되는 머신러닝 모델 inference 서버다. 학습된 모델 파일을 model repository에 저장하면 개발자가 별도의 코드를 작성할 필요 없이 해당 모델을 추론하는 API를 만들 수 있다.
Triton 백엔드란 모델을 실행하는 C 구현체를 일컫는 말로 TensorFlow, PyTorch 등 주요 머신러닝 프레임워크의 wrapper가 될 수도 있고 커스텀 C/C++ 코드가 될 수도 있다. TensorRT, Tensorflow, PyTorch, ONNX Runtime, Python 등의 백엔드가 디폴트로 제공된다
정리하면.
- NVIDIA Triton 이란?
- 인공지능 모델의 서빙을 위해 리소스를 절약하고자 효율적으로 모델을 추론하는 오픈 소스 소프트웨어
- 지원하는 기능
- ONNX, TensorRT engine(=모델)부터 PyTorch(&Tensorflow) 모델까지 추론 기능을 제공
- 이점
- 별도의 추론 코드를 작성할 필요가 없음
- C++ 기반으로 만들었기 때문에 Python 코드보다 빠른 추론이 가능
- 효율적인 GPU 사용 (⊃리소스 절약)
- 모델 서빙에 용이함
NVIDIA Triton 을 왜 사용해야 할까?
- 다양한 모델 프레임워크를 지원한다.
TensorFlow, PyTorch, ONNX 모델부터 TensorRT engine 까지.!!- 각 프레임워크에 맞는 추론 코드를 구성하고 관리하기가 여간 까다로운게 아니다..
- 알아서 모든 기능을 제공하는 오픈 소스를 사용하는게 편하지 않은가.!!
- C++ level 의 고성능 추론 기능을 제공한다.
- Python 보다 C++ 언어가 코드 최적화가 잘 되어 있다.
- 효율적인 추론이 가능하다.
- Kubernetes 를 이용한 확장 및 모니터링 지원이 가능하다.
- Triton Server 를 사용하여 서빙하는 모델을 K8S 로 관리할 수 있다.
- K8S 의 모니터링 기능을 활용하여 서빙하고 있는 모델을 관리할 수 있다.
- 모델 앙상블 기능을 지원한다.
- 하나의 서비스에 여러 개의 모델을 사용해야 하는 경우가 있다.
- 모델 앙상블 기능으로 여러 개의 모델을 추론할 수 있다.
- 모델 앙상블에 사용되는 모델 리스트를 관리할 수 있다.
- 모델 버전 관리가 편하다.
- Triton Server 로 모델을 서빙하면 모델 버전이 v1, v2, v3, ... 이런 식으로 관리된다.
- 모니터링 기능으로 서빙되는 모델을 확인할 수 있기 때문에 모델 버전 관리가 편하다.
- Single GPU, Multiple Model
- 하나의 GPU 에 여러 개의 모델을 올려 사용할 수 있다.
- 물론 Process 를 여러 개 띄우는 것도 가능하다. (request 하는 유저가 여러 명이라 가정한 상황)
어떻게 사용할 수 있을까?
Triton의 아키텍처를 한 번 살펴보자.
Triton은 model repository라는 저장소에서 서빙할 모델 파일들을 불러온다. 클라이언트는 HTTP/REST 및 GRPC 프로토콜 혹은 Triton에 내장된 C API를 통해 모델 추론 요청을 보낼 수 있다. Triton은 해당 모델의 정책에 따라 요청을 batching 및 scheduling한 후 추론 연산을 수행한다. 추론 결과는 다시 클라이언트에게 반환된다.
API 를 구성하기에 따라 Triton Server 의 Response 를 받은 후 모델의 결과를 후처리하여 Client 에게 제공되는 형태로 보내는 방식으로 사용되곤 한다.
Triton 으로 모델을 서빙하기 위해서는 개발자의 환경 셋팅과 데싸의 모델 준비가 필요하다.
- Server 를 셋팅한다. Server 란 온프레미스 환경이 될수도, AWS 와 같은 클라우드 환경이 될수도 있다.
- model_repository 폴더를 생성하고 서빙할 모델 파일들을 여기에 저장한다.
- NVIDIA cloud 에서 제공하는 Triton 서버 Docker Image 를 서버에서 run 한다.
- Triton Server 를 launch 한다.
- Triton Server 에 Request 를 보낸다.
출처: Beeny is all you need, Peace At Last's Tech Blog
뜨리스땅
https://tristanchoi.tistory.com/663
'인터넷, 통신, 플랫폼, 컨텐츠 산업' 카테고리의 다른 글
AI 모델 추론을 위한 최적화 모델: Triton Server & Tensor RT (0) | 2024.06.18 |
---|---|
딥러닝/AI 모델의 추론 성능을 높이기 위한 방법 (0) | 2024.06.18 |
AI 모델을 서비스에 사용(서빙)하기 위한 방법 - 서빙 최적화 방법 (0) | 2024.06.05 |
AI 모델 추론을 위한 VLLM이란 무엇인가? (feat. by Paged Attention) (0) | 2024.06.01 |
언어모델의 정의와 종류 (0) | 2024.05.26 |
댓글