본문 바로가기

Aastrago

AI 워크로드 내 추론 과정을 간소화시켜줄 최적의 솔루션 NVIDIA TRITON

 


 

안녕하세요, AI 영상 분석 전문 씨이랩입니다😊 AI 프로젝트를 진행하면서 가장 큰 두 단락이 있어요. 바로 '학습''추론'인데요. 적합한 데이터를 통해 모델을 학습시키고 나면, 인공지능 시스템이 학습한 지식이나 모델을 바탕으로 새로운 데이터를 분석하고 결론에 내리게 돼요. 우리는 이 과정을 AI 추론(Inference serving)이라고 부르게 되는데요!

 

학습은 AI의 기초를 형성하지만, 추론은 그 기초를 바탕으로 실제 문제를 해결하고, 새로운 상황에 적응하는데 필수적인 과정이기 때문에, AI 프로젝트 내에서는 학습보다 더 큰 파이를 차지하고 있는데요. 따라서 오늘은 AI 워크 로드에서 추론을 효율적이게 진행할 수 있는 방법을 알려주고자 해요.

 

모든 플랫폼에서의 고성능 추론을 위한 NVIDIA의 Triton 서버 소개를 통해 워크플로우를 최소화할 수 있는 방법! 함께 알아보아요😊😉

 

NVIDIA Triton 서버란?


이미지 출처: NVIDIA Developer

Triton 서버는 NVIDIA에서 출시한 오픈소스 머신러닝 모델 추론 서버로, AI 모델의 배포 및 실행을 표준화하는 소프트웨어에요. 프로덕션 환경에서 빠르게 확장 가능할 수 있도록 PyTorch, TensorFlow, Onnx, TensorRT 등 다양한 프레임워크를 지원하고 있어요. 또한 모델 파일은 모델 리포지토리에 저장하여 개발자가 쉽게 관리할 수 있도록 도와주는데요. 즉, AI 추론을 간소화하는 S/W라고 부를 수 있답니다.

 

 

지난 콘텐츠에서 소개한 '모델 경량화'를 통해 AI 추론 속도를 높일 수 있음을 확인했는데요. 이와 같은 맥락으로 Triton 서버에서도 다양한 형식으로 모델을 경량화하고 최적화한다는 특징을 가지고 있어요. 그 외에도 유저들에게 유연하고 편리한 추론 프로세스를 제공해 주어, NVIDIA Triton은 AI 모델의 추론을 위한 강력한 솔루션으로 꼽히고 있는데요. Triton의 등장 전, 개발자 및 AI 연구진은 추론 과정에 어떤 어려움이 있었을까요?

 

Triton 등장 전, 복잡하고 어려웠던 추론 서빙 프로세스


 
이미지 출처: NVIDIA Developer

 

1️⃣ 다중의 모델 프레임워크 제공

기존의 개발자 및 AI 연구진들은 모델 구축 단계에서 TensorFlow, PyTorch, TensorRT, ONNX Runtime 등의 AI와 딥 러닝 프레임워크를 이 자주 활용했어요. 이러한 프레임워크 각각에는 프로덕션 환경에서 모델을 구동할 수 있게 해주는 실행용 백엔드가 필요해요.

 

2️⃣ 다양한 유형의 추론 쿼리

추론 서빙을 위해서는 실시간 온라인 예측, 오프라인 배치(batch), 스트리밍 데이터, 파이프라인 등 여러 유형의 쿼리를 필요로 해요. 해당 추론 쿼리에서는 상황에 맞는 맞춤형 프로세스가 요구되었어요.

 

3️⃣ 지속적으로 변화하는 AI 모델

AI 모델들은 더 높은 정확성과 성능을 위해 끊임없이 새로운 데이터와 알고리즘을 바탕으로 재훈련 및 업데이트를 거듭합니다. 이러한 모델의 변화와 다양성을 고려했을 때, 하나의 애플리케이션에서 다양한 모델을 사용할 경우 작업 스케줄이 복잡해집니다.

 

4️⃣ 모델 훈련 후 최적화

모델들은 새로운 데이터와 알고리즘을 바탕으로 재훈련과 업데이트를 진행하게 되는데요. 이 훈련을 마친 대부분의 모델은 프로덕션 배포에 최적화가 되어있지 않은 상태입니다. 해당 결과로 모델은 사용자가 목표하는 환경에 맞춰 다시 한번 서버 변환 및 최적화 과정을 진행해야 돼요. 이 과정에서 번거로움이 유발되고 있어요.

 

위의 예시처럼, 추론 작업의 복잡성과 번거로움을 해결하기 위해 NVIDIA Triton 서버는 단일화 및 표준화된 추론 플랫폼을 제공하여 기업의 추론 서빙 과정(inference serving)을 간소화할 수 있어요.


추론 쿼리 예시 코드

(출처: SKT Enterprise)


I0209 08:14:55.228893 1 tritonserver.cc:1642]
+----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+
| Option | Value |
+----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+
| server_id | triton |
| server_version | 2.7.0 |
| server_extensions | classification sequence model_repository schedule_policy model_configuration system_shared_memory cuda_shared_memory binary_tensor_data statistics |
| model_repository_path[0] | /models |
| model_control_mode | MODE_NONE |
| strict_model_config | 1 |
| pinned_memory_pool_byte_size | 268435456 |
| cuda_memory_pool_byte_size{0} | 67108864 |
| min_supported_compute_capability | 6.0 |
| strict_readiness | 1 |
| exit_timeout | 30 |
+----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+


I0209 08:14:55.231599 1 grpc_server.cc:3979] Started GRPCInferenceService at 0.0.0.0:8001
I0209 08:14:55.232107 1 http_server.cc:2717] Started HTTPService at 0.0.0.0:8000
I0209 08:14:55.275595 1 http_server.cc:2736] Started Metrics Service at 0.0.0.0:8002

"Model Repository 에 저장 이후 Triton 실행 시 정상 로딩 확인 코드 작업"

 
$ curl -v localhost:8000/v2/health/ready
...
< HTTP/1.1 200 OK
< Content-Length: 0
< Content-Type: text/plain

Triton 실행 검증

$ docker pull nvcr.io/nvidia/tritonserver:21.02-py3-sdk

Triton 테스트 : 도커 이미지 Pull

 

Triton 서버의 장점 살펴보기


✅자동화된 모델 성능의 경량화 및 최적화


Triton Model Analyzer를 통해서 모델 경량화 및 최적화를 위해 수동으로 일일이 확인해야 하는 처리량, 지연 시간, 메모리 활용 요구 사항 등의 조합을 자동으로 조정할 수 있어요. 해당 툴은 모델이 최고의 성능을 달성할 수 있는 구성을 찾아 최적화를 진행합니다.

Triton Model Analyzer로 최적의 모델 구성 선택하기 이미지 출처: 엔비디아 블로그

✅ 다양한 프레임워크 제공

개발자 및 AI 연구원이 주로 작업 시 사용하는 TensorFlow, NVIDIA TensorRT, PyTorch, Python, ONNX, Custom C++ 등과 같은 다양한 프레임워크를 지원해요.

 

✅ 유연한 배포 및 운영

추론 서빙에 필요한 여러 생태계의 소프트웨어나 툴을 통합하여 배포와 운영에 편리함을 제공해요. Kubernetes 환경을 지원하고, Red Hat OpenShift를 비롯한 온프레미스 환경과의 통합도 지원 가능합니다! 따라서 하드웨어 활용 극대화부터 모델 동시 실행, 그리고 간소화된 모델 배포 프로세스와 성능 최적화를 진행할 수 있어요.

 

✅ 최소한의 코드 작업

Triton 서버는 TensorRT의 추론 기능을 제공하기 때문에 별도의 복잡한 C++ 혹은 Python 코드 작성 없이 아래의 코드처럼 모델의 배포 스펙만 정의하면 Triton 추론 서버로 바로 배포가 가능해집니다.

 

AstraGo에서 Triton 실행 시, 워크플로우 67% 간소화 🔻


AstraGo는 올해 하반기에 추론 기능을 집중적으로 고도화할 예정인데요. 그중 하나가 바로 Triton 서버의 손쉬운 실행과 운영이에요.

 

그렇다면 Triton 서버는 오픈소스임에도 불구하고, 왜 별도의 지원 소프트웨어가 필요할까요? 가장 대표적인 이유가 바로 사용자의 편의성을 위함에 있어요. 실제로 AstraGo에서 Triton을 사용할 때와 개인 개발자가 혼자 Triton을 실행할 때의 워크플로우를 가져왔습니다.

 

오픈 소스의 경우, 누구에게나 사용 권한이 주어지지만, 실제 사용에 있어서는 다소 까다로운 가이드라인과 높은 ML 지식을 필요로 해요. Triton의 경우, 유연한 배포 운영에 도움을 주지만, 업로드 파일을 각각 수동으로 다운로드하고 형식에 맞게 파일을 변경하는 작업이 공수가 들고 실사용에 불편함을 끼치게 돼요. 따라서 AstraGo의 자동화 기능이 없다면 실 사용자는 아래와 같은 6단계의 Triton 사용 플로우를 거쳐야 돼요.

 

Triton 이용 플로우
1️⃣ 클러스터 내 또는 서버의 Triton 세팅을 위한 환경 준비
2️⃣ Model Repository 디렉토리 생성 후, 서빙할 모델 파일 저장
→ Triton 지정 디렉토리 형식에 따라 저장 (Model, Config 등)
3️⃣ NVIDIA Cloud에서 제공하는 Triton 서버 Docker Image Pull
4️⃣ Model Repository 디렉토리 경로에서 Triton
서버가 모델을 읽어올 수 있도록 마운트
→ K8S 경우, YAML 파일에서 지정 후 POD 생성
5️⃣ NVIDIA Triton 서버 가동
6️⃣ API 테스트 및 API Request 소스코드 작성 및 실 운영 환경 적용

 

반면, AstraGo에서는 사용자가 원하는 파일을 업로드만 하면 Triton 서버가 요구하는 파일 형식에 적합한 형태로 자동 변형을 진행해요. 덕분에 사용자는 약 작업 프로세스를 67%까지 간소화할 수 있고, 별도의 코드 작성이나 반복적인 작업 없이 빠르게 추론 워크로드를 실행할 수 있게 되어요 :) 😆👍

 

오늘은 NVIDIA의 Triton 서버에 대해 알아보았는데요. 이번 하반기에 고도화될 AstraGo의 추론 기능에 대해서도 따뜻한 관심 부탁드립니다🤗 추가적인 문의사항이 있으시다면 아래 배너를 클릭 후 문의 부탁드립니다.