본문 바로가기
인터넷, 통신, 플랫폼, 컨텐츠 산업

NVIDIA Triton 란 무엇인가?

by 뜨리스땅 2024. 6. 5.
728x90
반응형

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 등의 백엔드가 디폴트로 제공된다
 
정리하면.
 

  1. NVIDIA Triton 이란?
    • 인공지능 모델의 서빙을 위해 리소스를 절약하고자 효율적으로 모델을 추론하는 오픈 소스 소프트웨어
  2. 지원하는 기능
    • ONNX, TensorRT engine(=모델)부터 PyTorch(&Tensorflow) 모델까지 추론 기능을 제공
  3. 이점
    • 별도의 추론 코드를 작성할 필요가 없음
    • C++ 기반으로 만들었기 때문에 Python 코드보다 빠른 추론이 가능
    • 효율적인 GPU 사용 (⊃리소스 절약)
    • 모델 서빙에 용이함

 

NVIDIA Triton 을 왜 사용해야 할까?

  1. 다양한 모델 프레임워크를 지원한다. 
    TensorFlow, PyTorch, ONNX 모델부터 TensorRT engine 까지.!!
    • 각 프레임워크에 맞는 추론 코드를 구성하고 관리하기가 여간 까다로운게 아니다..
    • 알아서 모든 기능을 제공하는 오픈 소스를 사용하는게 편하지 않은가.!!
  2. C++ level 의 고성능 추론 기능을 제공한다.
    • Python 보다 C++ 언어가 코드 최적화가 잘 되어 있다.
    • 효율적인 추론이 가능하다.
  3. Kubernetes 를 이용한 확장 및 모니터링 지원이 가능하다.
    • Triton Server 를 사용하여 서빙하는 모델을 K8S 로 관리할 수 있다.
    • K8S 의 모니터링 기능을 활용하여 서빙하고 있는 모델을 관리할 수 있다.
  4. 모델 앙상블 기능을 지원한다.
    • 하나의 서비스에 여러 개의 모델을 사용해야 하는 경우가 있다.
    • 모델 앙상블 기능으로 여러 개의 모델을 추론할 수 있다.
    • 모델 앙상블에 사용되는 모델 리스트를 관리할 수 있다.
  5. 모델 버전 관리가 편하다.
    • Triton Server 로 모델을 서빙하면 모델 버전이 v1, v2, v3, ... 이런 식으로 관리된다.
    • 모니터링 기능으로 서빙되는 모델을 확인할 수 있기 때문에 모델 버전 관리가 편하다.
  6. 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 으로 모델을 서빙하기 위해서는 개발자의 환경 셋팅과 데싸의 모델 준비가 필요하다.

  1. Server 를 셋팅한다. Server 란 온프레미스 환경이 될수도, AWS 와 같은 클라우드 환경이 될수도 있다.
  2. model_repository 폴더를 생성하고 서빙할 모델 파일들을 여기에 저장한다.
  3. NVIDIA cloud 에서 제공하는 Triton 서버 Docker Image 를 서버에서 run 한다.
  4. Triton Server 를 launch 한다.
  5. Triton Server 에 Request 를 보낸다.

 
 
 

출처: Beeny is all you need, Peace At Last's Tech Blog

뜨리스땅

 

 

 

https://tristanchoi.tistory.com/663

 

AI 모델 추론을 위한 최적화 모델: Triton Server & Tensor RT

AI모델에 대한 학습이 끝난 이후, 실제 production 환경에서 모델을 서빙할 때 필요한 부분들은 학습할 때와는 다르다. 가장 간단한 방식은 .predict()/.forward()를 실행하는 것이다. 하지만 더 속도와 TP

tristanchoi.tistory.com

 

728x90
반응형

댓글