DeepStream

#1 DeepStream Introduction

후로링 2020. 11. 9. 16:34

1. DeepStream이란

  딥러닝은 이미 너무나 보편화된 기술이 되었습니다. 관심이 있는 사람이라면 누구나 자신의 어플리케이션이 딥러닝 모델을 사용 해 여러 기능을 넣을 수 있습니다. 하지만, 딥러닝을 이용한 서비스는 비용이 비쌉니다. 비싼 GPU서버를 유지해야 하며, 사용한다고 하더라도 많은 서비스를 돌릴 수 없습니다. 이를 위해 다양한 배치처리, 모델 경량화 방법들이 연구되어왔고 적용되었지만 아직도 딥러닝은 너무 비싼 기술입니다. 

 

  DeepStream은 비디오 분석 분야에서 높은 코스트를 가지는 딥러닝 분석을 사용할 수 있도록 NVIDIA에서 제작한 SDK입니다. 정확하게는 GStreamer 파이프라인 내에서 GPU관련된 디코딩/추론등을 수행할 수 있는 플러그인을 제작해 집어 넣은 것이라고 볼 수 있습니다. 약 5회정도에 걸쳐서 DeepStream을 실제로 설치해서 각종 샘플코드를 실행해 보고, 실제로 플러그인을 제작해 집어 넣는 방법에 대한 포스팅을 하려 합니다. 

 

2. GStreamer란

  GStreamer는 GObject 기반 자료형 체계와 더불어 C 프로그래밍 언어로 작성한 파이프라인 기반 멀티미디어 프레임워크입니다. 어떤 자료를 처리하기위해 파이프라인을 정의하고, 파이프라인으로 자료를 흘려보내여 정해진 연산을 수행하게 만들어주는 프레임워크라고 보시면 됩니다. 일반적으로는 비디오 플레이어등을 만들때 많이 사용된다고 알려져 있습니다. 

 

  엄청난 양의 서드파티 플러그인이 존재하고 있으며, 다양한 플러그인을 단순히 조합하는 것만으로 어플리케이션을 제작 할 수 있습니다. DeepStream도 수많은 서드파티 플러그인 중 하나라고 생각하시면 이해가 쉽습니다. 

 

3. DeepStream의 구조

  DeepStream은 GStreamer와 마찬가지로 C로 구현되어 있습니다. 그 안에서 NVIDIA에서 제공하는 다양한 컴포넌트(CUDA, TensorRT, Triton Inference Server)를 사용할 수 있도록 구현해 주었습니다. 정말 감사한 일이 아닐 수 없습니다. 이러한 오픈소스의 공개를 통해 세상의 발전에 기여하는 NVIDIA 개발팀에게 심심한 감사를 표합니다. 

 

  실제로 사용할때는 만들어진 플러그인을 C나 Python에서 불러와 사용하는 식이며, 앞으로 다룰 예제는 가능하면 Python에서 진행하려 합니다. 사실 Deep Stream용 Python Application을 만들어 주지 않았다면 해볼 엄두도 내지 못했을 것 같습니다. 

 

4. DeepStream이 돌아가는 하드웨어 

  DeepStream은 하드웨어 dependancy가 굉장히 강한 프레임워크 입니다. 특히 NVDEC이라는 하드웨어 디코더를 사용하기 위해서는 이를 탑재한 GPU가 필요한데요, 가장 쉽게 구할 수 있는 하드웨어는 약 10만원 정도하는 Jetson nano일 것이며, GTX 1080, RTX 2080 및 V100과 같은 서버향 GPU에서 이를 실행 해 볼 수 있습니다. 지원하는 GPU와 버전 440이상의 GPU드라이버가 깔려 있어야 합니다.