본문 바로가기
Python/환경 설정

NVIDIA Triton 에 대한 고찰

by beeny-ds 2023. 10. 29.
인공지능 모델을 서빙하기 위해 NVIDIA Triton 를 많이 사용한다. NVIDIA Triton 란 무엇인고, 왜 사용하는지, 어떻게 사용하는지에 대한 간단한 설명과 예시를 다룬다.

NVIDIA Triton 란 무엇인가?

인공지능 모델은 딥러닝의 발전으로 점점 커지고 성능도 향상되고 있다. 하지만 그만큼 추론 속도는 느려지고 많은 리소스가 필요하다. 더 좋은 GPU 를 사용하면 효과를 볼 수 있지만 많은 비용이 들기 때문에 어떻게 인공지능 모델을 효율적으로 운영할 수 있는지 연구가 계속 되고 있다. 비용을 줄이기 위한 방법으로는 모델 경량화와 같이 인공지능 모델의 크기를 줄이는 방법부터 효율적인 추론을 위한 ONNX, TensorRT 변환 등 다양한 방법이 있다.

 

ONNX, TensorRT 변환의 경우, 변환된 engine(=모델) 을 서빙하기 위해서는 별도의 코드 작성이 필요하다. 이때 리소스를 더 절약하는 방법을 사용하기 위해서는 C++ 로 코드를 작성해야 한다. (사실 python 을 깊게 파보면 거의 다 C 언어로 구성되어 있다....) C++ 로 작성하는 과정이 쉽지 않기 때문에 이런 어려운 부분을 Triton Inference Server 를 이용하여 쉽게 해결할 수 있다. 정리하면

 

  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 하는 유저가 여러 명이라 가정한 상황)

 

6가지나 되는 장점을 가지고 있다. 이를 간단히 한 문장으로 요약하면

 효율적인 자원 사용과 오픈 소스 코드, 모델 관리 기능을 제공한다.

가 되겠다.

 

실제로 필자는 인공지능 모델을 Python 으로 서빙도 해보고 Triton Server 로도 서빙해봤다.
둘 다 해봤는데 진짜 Python 으로 서빙하면 불편한 점이 한 둘이 아니다.
제일 큰 단점은 여러 명의 유저가 동시에 request 를 보낼 때 관리가 안 된다는 점이다.

 

어떻게 사용할 수 있을까?

출처: https://peaceatlast.tistory.com/25

위 사진은 Triton Server 를 사용할 때의 Process 다.

Client(=사용자)가 Inference Request 를 보내면 등록되어 있는 모델이 Inference 를 한다. 모델은 Model Repository 에 등록되어 있고, 동작하고 있는 모델만 Inference 가 가능하다.
(이때 모델은 어떤 GPU 에서 동작하는지 사전 정의가 되어 있다.)

모델의 Inference 가 끝나면 결과를 확인할 수 있다.

 

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 를 보낸다.

마무리,,

지금까지 NVIDIA Triton 에 대해 알아봤다. 인공지능 모델을 서빙하고 싶은 개발자라면, 데이터 사이언티스트라면 이 개념을 반드시 알고 있어야 한다.

 

다음 포스팅에서는 Triton Server 를 구축하는 방법을 상세하게 다뤄보겠다.

 

참고한 블로그

Triton Inference Server 로 모델 서빙 성능 끌어올리기

NVIDIA Triton 한 눈에 알아보기

반응형

'Python > 환경 설정' 카테고리의 다른 글

Triton Server 환경 구축하기  (0) 2024.02.20
[Setting] jupyter notebook 원격 접속  (0) 2022.08.19

댓글