5/24/2019

NVIDIA TensorRT Manual 및 관련자료 수집 및 용어정리

1. NVIDIA TensorRT Manual 

  • NVIDIA Deep Learning Manual 
  Deep Learning에 Frame 과 NVIDIA의 종합 SDK Manual
  아래사이트에서 궁금한 내용은 각각 아이콘을 클릭해서 들어가자
  https://developer.nvidia.com/deep-learning-software

  • NVIDIA TensorRT
C++ 구성이 되었으며, Inference Engine으로 사용됨
  https://developer.nvidia.com/tensorrt

  • TensorRT 기본기능 설명 
성능을 업그레이드 하는 방법소개하며, CPU만 사용할때보다는 최고 40배 빠르다고함.
  https://devblogs.nvidia.com/speed-up-inference-tensorrt/

  • TensorRT Cloud (nvidia-docker, x86만 지원하며, ARM 아직 미지원)
  https://ngc.nvidia.com/catalog/containers/nvidia:tensorrt


  • TensorRT python API 사용방법 소개 
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-developer-guide/index.html#python_topics


  • TensorRT의 DLA( Deep Learning Accelerator)
현재 Jetson TX2에는 HW적으로 해당사항이 없음 
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-developer-guide/index.html#dla_topic


  • TensorRT의 제약사항 (필수확인)
JetsonTX2FP32/FP16만 지원하며, DLA는 소스는 존재하지만 HW가 지원못함
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-support-matrix/index.html
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-support-matrix/index.html#layers-matrix
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-support-matrix/index.html#hardware-precision-matrix

  https://docs.nvidia.com/deeplearning/sdk/tensorrt-developer-guide/index.html


  • TensorRT의 성능측정
Nsight를 이용하여 CUDA를 측정하고 이를 개선하는것 같은데, 주로 x86용으로 사용하는 것 같다.
현재 Jetson TX2도 Nsight를 지원하지만, 이는 동작성능측정인 것 같다.
추후 Tensorflow의 Tensorboard로 분석하는 법을 배워야할 것 같다.
(우선 Tensorflow부터)
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-best-practices/index.html
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-best-practices/index.html#profiling

  • TensorRT Sample (C++/python)
C++ Sample / Python Sample
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-sample-support-guide/index.html

  • TensorRT (x86용 설치)
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-install-guide/index.html#overview

  • TensorRT의 함수 (Graph Surgeon)
TensorFlow의 Graph를 분석이 중요하다고 하는데, 이 부분을 어떻게 해야하는지를 나중에 자세히알아보도록 하자
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-api/python_api/graphsurgeon/graphsurgeon.html

  • TensorRT의 UFF/Caffe/Onnx Parser 함수 
다른 Model을 Import하여 Parser하여 변환을 할 것인데, 어떻게 진행하는 지 알아야함
현재 별도의 명령어로 Conver는 존재
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-api/python_api/parsers/Uff/pyUff.html


  • TensorRT의 Python Network 구성 (Layer)
Deep Learning Network로 상위에서 각 제약사항과 같이 봐야하며, 대충의 기능을 알아두자
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-api/python_api/infer/Graph/pyGraph.html#

  • TensorRT의 Python Core 기능 
Core에서 CudaEngine을 보면 핵심기능같은데, 상위문서 보면 Serialize 인것으로 생각
Profiler를 별도로 제공하며, 이를 분석하고 사용하는 도구가 무엇인지는 차후에 찾아보자
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-api/python_api/infer/Core/pyCore.html
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-api/python_api/infer/Core/Profiler.html

  • TensorRT Userful Resource 
  http://on-demand.gputechconf.com/gtcdc/2017/video/DC7172/
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-best-practices/index.html
  http://on-demand.gputechconf.com/gtcdc/2017/video/DC7172/
  https://devblogs.nvidia.com/tensorrt-4-accelerates-translation-speech-recommender/
  http://on-demand.gputechconf.com/gtc/2018/video/S8822/


1.1  NVIDIA에서 사용되는 용어 정리 

NVIDIA의 Manual을 보면 약어들이 존재해서 혼란하게 만들어서 관련부분들을 간단히 정리하여 적는다.
최근부터 NVIDIA에서 한글지원을 해주고 있으므로, 가능하다면 한글로 보자.
  • DGX: NVIDIA Workstation 인지 기기인지 좀 혼동, 추측으로 Workstation (홈페이지에서 세부설명이 없어혼동) 
  • NGC: NVIDIA GPU Cloud 로 x86기반으로 지원 (Docker)

 아래의  Product부분참조 
  https://www.nvidia.com/en-us/data-center/dgx-systems/

1.2 NVIDIA DGX System 
NVIDIA에서 Deep Learning Training 을 위해서 제작한 Workstation인지 혼동되며 이후 모델을 HGX로 만들 생각인 것 같다.
HGX는 이름만 존재하며, 아직 정식버전은 없는 것 같다.
DGX도 여러 종류가 존재하며, 빠른 train을 위한 Workstation으로 이용가능할 것 같으며, 클라우딩도 지원 및 다중 GPU도 지원이 되어 성능이 빠른 것 같다

  • NVIDIA DGX Series 
아래의 Link를 보면 각각의  Workstation 및 고사양으로 사용가능한 것 같다.
  https://www.nvidia.com/en-us/data-center/dgx-pod-reference-architecture/
  https://www.nvidia.com/en-us/data-center/dgx-systems/
  https://www.nvidia.com/ko-kr/data-center/dgx-station/
  https://youtu.be/PuZ2F87Lqg4

  • Tensorflow -> TensorRT
  https://docs.nvidia.com/deeplearning/frameworks/tf-trt-user-guide/index.html


1.3 NVIDIA의 Docker 사용

NVIDIA의 Docker의 구성은 다음과  같다.
  1. docker :  x86 과 ARM 지원 
  2. nvidia-docker :  ARM은 아직 미지원 

NVIDIA에서는 GPU Cloud를 이용하여 Docker기능을 좀 더 제공을 하고 있으며, 이 때 사용하는 것이 nvidia-docker 이지만, 이는 ARM은 아직 지원하지 않는다.
처음 nvidia-docker가 ARM을 지원을 하는줄 알고 착각하여 좀 삽질을 했다.

NVIDIA GPU Cloud 및 NVIDIA-DOCKER(nvidia-docker) 는 Host PC에서 사용되는 기능으로 주로 Training 과 이를 Test 하기 위해서 사용되는 것 같다.
개인생각으로는 추후에 ARM도 지원을 해줄 것 같은데, 그때 자세히 알아보자.

NVIDIA-DOCKER 지원 (Host PC만 지원 , ARM 미지원 )
  https://github.com/NVIDIA/nvidia-docker/issues/214
  https://github.com/NVIDIA/nvidia-docker/wiki
  https://github.com/NVIDIA/nvidia-docker/wiki/Frequently-Asked-Questions#do-you-support-tegra-platforms-arm64
  https://www.nvidia.co.kr/content/apac/event/kr/deep-learning-day-2017/dli-1/Docker-User-Guide-17-08_v1_NOV01_Joshpark.pdf

  • NVIDIA GPU Cloud  (NGC) 가입 및 이용
  https://ngc.nvidia.com/
  https://ngc.nvidia.com/catalog/containers/nvidia:tensorrt


  • TensorRT의 Docker 사용방법
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-container-release-notes/pullcontainer.html#pullcontainer

상위의 문서를 보면 DGX를 이용하지 않는다면, NVIDIA® GPU Cloud™ (NGC) 문서를 참고하라고 해서 이것을 참고
  https://docs.nvidia.com/ngc/ngc-getting-started-guide/index.html

  • Jetson TX2 에서 docker를 이용하여 TensorRT 설치 시도 

nvidia@tegra-ubuntu:~/jhlee$ mkdir docker
nvidia@tegra-ubuntu:~/jhlee$ cd docker
nvidia@tegra-ubuntu:~/jhlee/docker$ sudo docker pull nvcr.io/nvidia/tensorrt:19.05-py3   
[sudo] password for nvidia: 
19.05-py3: Pulling from nvidia/tensorrt
7e6591854262: Pulling fs layer 
089d60cb4e0a: Pulling fs layer 
9c461696bc09: Pulling fs layer 
45085432511a: Pull complete 
6ca460804a89: Pull complete 
2631f04ebf64: Pull complete 
86f56e03e071: Pull complete 
234646620160: Downloading [=====================>                             ]  265.5MB/615.2MB
7f717cd17058: Verifying Checksum 
e69a2ba99832: Download complete 
bc9bca17b13c: Download complete 
1870788e477f: Download complete 
603e0d586945: Downloading [=====================>                             ]  214.3MB/492.7MB
717dfedf079c: Download complete 
1035ef613bc7: Download complete 
c5bd7559c3ad: Download complete 
d82c679b8708: Download complete 
....

$ sudo docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
nvcr.io/nvidia/tensorrt   19.05-py3           de065555c278        2 weeks ago         3.83GB

Nvidia docker 기반에 TensorRT 동작
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-container-release-notes/running.html
Nvidia Docker (Docker에 Cuda기능추가)
  https://devblogs.nvidia.com/nvidia-docker-gpu-server-application-deployment-made-easy/
Jetson TX2 자료로 Docker 검색가능 
  https://elinux.org/Jetson_TX2



  • nvidia-docker 설치
NVIDIA에서 제공하는 Docker로 CPU중심의 Docker가 아닌 GPU도 같이 사용이 가능하며,  현재 ARM Version은 미제공
  https://github.com/nvidia/nvidia-docker/wiki/Installation-(version-2.0)
  https://nvidia.github.io/nvidia-docker/


  • Jetson의 개발환경 구축 (PC)
  https://github.com/teoac/DeepLearningOnJetson/wiki/How-to-Set-Environment-for-Development



  • Tensorflow for Jetson TX2
Jetson에서 쉽게 Tensorflow를 쉽게 설치가능
  https://docs.nvidia.com/deeplearning/frameworks/install-tf-jetsontx2/index.html
  https://www.nvidia.com/en-us/autonomous-machines/embedded-systems/jetson-tx2/


  • Jetson TX2의 Jetpack 과 Issack SDK 관련자료 
  https://developer.nvidia.com/embedded/jetpack
  https://developer.nvidia.com/isaac-sdk


  • Nsight 
NVIDIA에서 제공해주는 Eclipse 기반의 IDE Tool로 Jetpack 설치하면 존재함
  https://developer.nvidia.com/nsight-systems
  https://developer.nvidia.com/nsight-graphics