NVIDIA의 Deep Learning 전체 시스템을 간단히 보면, TRAINING 과 INFERENCE 로 나누어지며, TRAINING을 통해 DATA MODEL을 만들고,
이 MODEL를 가지고 INFERENCE 에서 적용하는 방식이다.
정말 단순하고 당연한 구조이지만, NVIDIA만의 특징은 상위 두 기능에 각각의 NVIDIA의 기능들을 제공하고 있기때문이다.
상위에서 설명한 기능들을 살펴보자.
현재 NVIDIA의 공식사이트에서 확인된 기술은 다음과 같으며, 확인할때 마다 지속적으로 변경되는 것으로 보아 앞으로도 확장이 될 것 같다.
- Deep Learning Primitives (CUDA® Deep Neural Network library™ (cuDNN))
- Deep Learning Inference Engine (TensorRT™ )
- Deep Learning for Video Analytics (NVIDIA DeepStream™ SDK)
- Linear Algebra (CUDA® Basic Linear Algebra Subroutines library™ (cuBLAS))
- Sparse Matrix Operations (NVIDIA CUDA® Sparse Matrix library™ (cuSPARSE))
- Multi-GPU Communication (NVIDIA® Collective Communications Library ™ (NCCL))
CUDA는 NVIDIA에서 제공하는 Graphic Library로 그중에서 포함된 기능들을 설명한다.
- CUDA/CuDNN
Convolution , Pooling,을 제공을 해주며, 다양한 Deep Learning Framework에서 사용되어진다고 한다.
- CUDA/cuBLAS
CUDA 내부 역할을 잘모르기 때문에, 이부분을 단정지어 말하기가 애매하다.
- CUDA/cuSPARSE
Matlab 처럼 Matrix의 기능을 빠르게 지원을 해주는 것으로 생각된다.
일단 상위 3개의 기능이 CUDA에 포함이 되고 있으며, 이를 구분해서 알아두자.
- TensoRT
이는 x86/ ARM 을 다 지원하므로, 개별 부분은 다 자세히 알아봐야 한다.
현재 Jetson에서는 C++만을 지원하고 있다. (추후 Python은 어떻게 될지 모르겠다.).
- Deep Stream SDK
만약 사용이되어지면, 실시간으로 비디오 Yolo와 비슷 할 것 같다.
( TensorRT에서 현재 Yolo 지원)
- NCCL
Host PC에서 여러개의 GPU와 통신하여 빠른 기능을 사용할때 사용할 것 같다.
상위내용은 아래에서 확인
https://docs.nvidia.com/deeplearning/sdk/introduction/index.html
JetsonTX2 기준으로 본다면, 사용할 부분은 Training은 PC에서 특정 Framework을 이용하여 Model을 만드는 것을 진행 한 후 Inference은 Jetson TX2의 TensorRT로 최적화를 진행
(Tensorflow->TensorRT)
TensorRT Install 및 구조파악
https://docs.nvidia.com/deeplearning/sdk/tensorrt-install-guide/index.html
Nvidia Jetson Tutorial
https://developer.nvidia.com/embedded/learn/tutorials
Nvidia 의 TensorFlow to TensorRT
https://developer.nvidia.com/embedded/twodaystoademo
1.1 NVIDIA Deep Learning SDK Manual
상위 NVIDIA Manual을 보면 좌측을 보면 아래와 같이 구성이 되어있으며, 필요한 부분만 보자.
- Deep Learning SDK: 반드시 봐야하며, 전체 구조를 쉽게 파악가능
- Performance: Nvidia의 제공하는 성능에 대해서 설명해주지만, 현재 이해 불가능
- Training Library: 상위 cuDNN/NCCL 설명이 Training 중심으로 나오지만, 추후 자세히
- Inference Library: TensorRT가 Inference 엔진이 가장중요하며, 이부분을 이해
- Inference Server: Docker를 이용하여 동작되며, HTTP/GRPC제공하며, Tensorflow server와 비슷한 것 같다.
- Data Loading: Data Loading Library 라고 하는데, 읽어보면, Trainning시 Bigdata를 말하는 것 같다.
- Archives: 상위 각각의 설명을 Guide로 설명해주고 있다.
NVIDIA Deep Learning SDK
https://docs.nvidia.com/deeplearning/sdk/index.html
NVIDIA DGX (추후 파악)
https://docs.nvidia.com/deeplearning/dgx/
https://docs.nvidia.com/deeplearning/dgx/install-tf-jetsontx2/index.html
NVIDIA DEV COMMUNITY
https://devtalk.nvidia.com/
1.2 Jetson TX2의 Jetpack 설치 및 환경확인
Jetson TX2에서 진행을 하고 있기 때문에 제약사항은 반드시 확인을 해야한다.
- Jetson TX2 (Ubuntu 16.04)
- Jetpack 3.3 설치 (TensorRT 4.0.2)
- Tensorflow 1.8.0 설치
Jetpack 3.3 관련내용
https://developer.nvidia.com/embedded/jetpack-3_3
Jetpack 4.1 관련내용
https://developer.nvidia.com/embedded/downloads#?search=L4T%20Jetson%20TX2%20Driver%20Package
TensoRT는 x86과 Jetson에서도 돌아가는 시스템이지만 Manual을 볼때 반드시 체크해야할 것이 Jetson에도 적용이되는지를 확인을 해야한다.
TensorRT는 NVIDIA에서 제공하는 Deep Learning inference Engine을 말한다.
현재 TensorRT 5.x까지 지원을 하고 있으며, 현재 본인의 TensorRT version 아래와 같이 확인해보자.
nvidia@tegra-ubuntu$ dpkg -l | grep TensorRT ii libnvinfer-dev 4.1.3-1+cuda9.0 arm64 TensorRT development libraries and headers ii libnvinfer-samples 4.1.3-1+cuda9.0 arm64 TensorRT samples and documentation ii libnvinfer4 4.1.3-1+cuda9.0 arm64 TensorRT runtime libraries ii tensorrt 4.0.2.0-1+cuda9.0 arm64 Meta package of TensorRT
https://devtalk.nvidia.com/default/topic/1050183/tensorrt/tensorrt-5-1-2-installation-on-jetson-tx2-board/
Download TensorRT
https://developer.nvidia.com/nvidia-tensorrt-download
How To Upgrade TensorRT (x86기반)
https://docs.nvidia.com/deeplearning/sdk/tensorrt-install-guide/index.html#installing-debian
https://medium.com/@ardianumam/installing-tensorrt-in-jetson-tx2-8d130c4438f5
2. Training Framework
Manual의 Index를 보면, Training Library를 보면, CUDA의 cuDNN/NCCL 기능을 활용되는 기능만 설명이 되어있다.
현재 실제 Training을 해보지 않은 입장에서는 어떻게 Training을 진행해야하는지는 모르기 때문에, 추후 알게 된다면, 관련부분을 다시 자세히 서술하자.
Manual의 Performance에서 Training with Mixed Precision부분을 보면 다양한 Framework를 통해 진행을 하는 것 같다.
NVCaffe, Caffe2, MXNet, Microsoft Cognitive Toolkit, PyTorch, TensorFlow and Theano
그리고, 다양한 Format을 이용하여, 정확도를 변경하여 최적화를 진행을 하는 것 같다.
이 부분은 실제로 Training을 진행해봐야 아는 부분이기에, Manual만 읽고 이해하기로 한다.
- Framework들
3. Inference (TensorRT)
TensorRT의 기능은 위에서 설명했듯이 NVIDIA의 Inference의 엔진이며, C++로 구현이 되어있다.
그리고, 다른 Deep Learning Framework에서 작성된 Network Model을 가져와 이곳에 맞게 사용되어지는 것 같다.
- TensorRT의 사용법
- Deep Learning Framework와 연결하여 사용
- TensorRT 단독사용
상위 두개로 지원을 해주는 것 같으며, 최종으로는 TensorRT만 사용하도록 갈 것 같다.
TensorRT도 Deep Learning Framework 같지만, 오직 Inference 기능만 제공하기에,
다른 Framework과 다른 것 같다.
TensorRT의 최신기능 및 설명 ( 성능 )
https://developer.nvidia.com/tensorrt
http://www.nextplatform.com/wp-content/uploads/2018/01/inference-technical-overview-1.pdf
TensorRT의 기능설명 및 지원 Parser
https://docs.nvidia.com/deeplearning/sdk/tensorrt-developer-guide/index.html
TensorRT는 C++로 구현되었으며, Python도 구현이 되어있다고 한다.
Network 정의를 보면, input/output tensors들을 정의하고, Layer들을 추가 및 설정변경하고, 다양한 설정을 제공하는 것을 알 수 있다.
- Network Definition : Network Model 관련된 부분( Deep Learning 공부를 해야함)
- Builder: Network의 최적화에 관련된 부분 같다.
- Engine: Inference Engine 이라고 하는데 이 세개는 정확히 구분하기가 애매하다.
- TensorRT의 Parser
- Caffe Parser
- UFF Parser
- ONNX Parser
https://docs.nvidia.com/deeplearning/sdk/tensorrt-developer-guide/index.html#api
TensorRT는 다양한 Deep learning Framework를 연결지원하여, 생성된 Trained Model을 TensorRT에 최적화 진행이 가능하며 이때 이용하는 것이 Parser기능이다.
- Framework(TensorFlow)와 TensorRT 사용법 및 Convert
https://github.com/NVIDIA-AI-IOT/tf_to_trt_image_classification
- TensorFlow to UFF Convert Format
- TensorFlow에서 TensorRT Import 방법 및 사용법
https://docs.nvidia.com/deeplearning/sdk/tensorrt-developer-guide/index.html#import_tf_python
- TensorFlow에 TensorRT 적용
trt: TensorRT
https://jkjung-avt.github.io/tf-trt-models/
https://github.com/NVIDIA-AI-IOT/tf_trt_models
- TensorRT Support Matrix
TensorRT의 Layer와 Features의 제약사항확인
https://docs.nvidia.com/deeplearning/sdk/tensorrt-support-matrix/index.html
- TensorRT Release version 의 기능확인
- TensorRT API (C++/Python)
- TensorRT docker 사용법
- TensorRT의 Sample 사용법
https://docs.nvidia.com/deeplearning/sdk/tensorrt-sample-support-guide/index.html#mnist_sample
nvidia@tegra-ubuntu$ ls /usr/src/tensorrt/samples/ common Makefile sampleCharRNN sampleGoogleNet sampleMNIST sampleMovieLens sampleOnnxMNIST sampleUffMNIST trtexec getDigits Makefile.config sampleFasterRCNN sampleINT8 sampleMNISTAPI sampleNMT samplePlugin sampleUffSSD nvidia@tegra-ubuntu$ cd /usr/src/tensorrt/samples nvidia@tegra-ubuntu$ sudo make
Jetson의 TensorRT의 Python은 미지원이지만, 차후 지원
https://devtalk.nvidia.com/default/topic/1036899/tensorrt-python-on-tx2-/
3.1 TensorRT Sample TEST
Jetson TX2에서 Jetpack을 설치된 상태에서 Test를 진행을 했으며, 처음에는 Compile이 되지 않았기 때문에, 내부에서 Build를 해서 실행파일을 생성해야한다.
그리고, Network Model은 내부에 제공을 해주지만, Caffe Model로 지원을 해주고 있다.
trt : tensorRT
nvidia@tegra-ubuntu$ cd /usr/src/tensorrt/bin/ nvidia@tegra-ubuntu$ ls $ ls chobj sample_fasterRCNN sample_mnist sample_nmt sample_uff_mnist dchobj sample_fasterRCNN_debug sample_mnist_api sample_nmt_debug sample_uff_mnist_debug download-digits-model.py sample_googlenet sample_mnist_api_debug sample_onnx_mnist sample_uff_ssd giexec sample_googlenet_debug sample_mnist_debug sample_onnx_mnist_debug sample_uff_ssd_debug sample_char_rnn sample_int8 sample_movielens sample_plugin trtexec sample_char_rnn_debug sample_int8_debug sample_movielens_debug sample_plugin_debug trtexec_debug nvidia@tegra-ubuntu$ $ ls ../data/ // sample의 모델과 관련정보 char-rnn faster-rcnn googlenet mnist movielens ssd nvidia@tegra-ubuntu$ ./sample_mnist Reading Caffe prototxt: ../data/mnist/mnist.prototxt Reading Caffe model: ../data/mnist/mnist.caffemodel Input: @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@#-:.-=@@@@@@@@@@@@@@ @@@@@%= . *@@@@@@@@@@@@@ @@@@% .:+%%% *@@@@@@@@@@@@@ @@@@+=#@@@@@# @@@@@@@@@@@@@@ @@@@@@@@@@@% @@@@@@@@@@@@@@ @@@@@@@@@@@: *@@@@@@@@@@@@@@ @@@@@@@@@@- .@@@@@@@@@@@@@@@ @@@@@@@@@: #@@@@@@@@@@@@@@@ @@@@@@@@: +*%#@@@@@@@@@@@@ @@@@@@@% :+*@@@@@@@@ @@@@@@@@#*+--.:: +@@@@@@ @@@@@@@@@@@@@@@@#=:. +@@@@@ @@@@@@@@@@@@@@@@@@@@ .@@@@@ @@@@@@@@@@@@@@@@@@@@#. #@@@@ @@@@@@@@@@@@@@@@@@@@# @@@@@ @@@@@@@@@%@@@@@@@@@@- +@@@@@ @@@@@@@@#-@@@@@@@@*. =@@@@@@ @@@@@@@@ .+%%%%+=. =@@@@@@@ @@@@@@@@ =@@@@@@@@ @@@@@@@@*=: :--*@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ Output: 0: 1: 2: 3: ********** 4: 5: 6: 7: 8: 9: nvidia@tegra-ubuntu$ ./sample_uff_mnist ../data/mnist/lenet5.uff --------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@+ :@@@@@@@@ @@@@@@@@@@@@@@%= :. --%@@@@@ @@@@@@@@@@@@@%. -@= - :@@@@@ @@@@@@@@@@@@@: -@@#%@@ #@@@@ @@@@@@@@@@@@: #@@@@@@@-#@@@@ @@@@@@@@@@@= #@@@@@@@@=%@@@@ @@@@@@@@@@= #@@@@@@@@@:@@@@@ @@@@@@@@@+ -@@@@@@@@@%.@@@@@ @@@@@@@@@::@@@@@@@@@@+-@@@@@ @@@@@@@@-.%@@@@@@@@@@.*@@@@@ @@@@@@@@ *@@@@@@@@@@@ *@@@@@ @@@@@@@% %@@@@@@@@@%.-@@@@@@ @@@@@@@:*@@@@@@@@@+. %@@@@@@ @@@@@@# @@@@@@@@@# .*@@@@@@@ @@@@@@# @@@@@@@@= +@@@@@@@@ @@@@@@# @@@@@@%. .+@@@@@@@@@ @@@@@@# @@@@@*. -%@@@@@@@@@@ @@@@@@# --- =@@@@@@@@@@@@ @@@@@@# *%@@@@@@@@@@@@@ @@@@@@@%: -=%@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ 10 eltCount --- OUTPUT --- 0 => 14.2556 : *** 1 => -4.83078 : 2 => 1.09185 : 3 => -6.29008 : 4 => -0.835606 : 5 => -6.92059 : 6 => 2.40399 : 7 => -6.01171 : 8 => 0.730784 : 9 => 1.50033 : --------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@+ @@@@@@@@@@@@@@ @@@@@@@@@@@@. @@@@@@@@@@@@@@ @@@@@@@@@@@@- @@@@@@@@@@@@@@ @@@@@@@@@@@# @@@@@@@@@@@@@@ @@@@@@@@@@@# *@@@@@@@@@@@@@ @@@@@@@@@@@@ :@@@@@@@@@@@@@ @@@@@@@@@@@@= .@@@@@@@@@@@@@ @@@@@@@@@@@@# %@@@@@@@@@@@@ @@@@@@@@@@@@% .@@@@@@@@@@@@@ @@@@@@@@@@@@% %@@@@@@@@@@@@ @@@@@@@@@@@@% %@@@@@@@@@@@@ @@@@@@@@@@@@@= +@@@@@@@@@@@@ @@@@@@@@@@@@@* -@@@@@@@@@@@@ @@@@@@@@@@@@@* @@@@@@@@@@@@ @@@@@@@@@@@@@@ @@@@@@@@@@@@ @@@@@@@@@@@@@@ *@@@@@@@@@@@ @@@@@@@@@@@@@@ *@@@@@@@@@@@ @@@@@@@@@@@@@@ *@@@@@@@@@@@ @@@@@@@@@@@@@@ *@@@@@@@@@@@ @@@@@@@@@@@@@@* @@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ 10 eltCount --- OUTPUT --- 0 => -5.21897 : 1 => 14.7033 : *** 2 => -3.10811 : 3 => -5.6187 : 4 => 3.30519 : 5 => -2.81663 : 6 => -2.79249 : 7 => 0.943604 : 8 => 2.90335 : 9 => -2.76499 : --------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@*. .*@@@@@@@@@@@ @@@@@@@@@@*. +@@@@@@@@@@ @@@@@@@@@@. :#+ %@@@@@@@@@ @@@@@@@@@@.:@@@+ +@@@@@@@@@ @@@@@@@@@@.:@@@@: +@@@@@@@@@ @@@@@@@@@@=%@@@@: +@@@@@@@@@ @@@@@@@@@@@@@@@@# +@@@@@@@@@ @@@@@@@@@@@@@@@@* +@@@@@@@@@ @@@@@@@@@@@@@@@@: +@@@@@@@@@ @@@@@@@@@@@@@@@@: +@@@@@@@@@ @@@@@@@@@@@@@@@* .@@@@@@@@@@ @@@@@@@@@@%**%@. *@@@@@@@@@@ @@@@@@@@%+. .: .@@@@@@@@@@@ @@@@@@@@= .. :@@@@@@@@@@@ @@@@@@@@: *@@: :@@@@@@@@@@@ @@@@@@@% %@* *@@@@@@@@@@ @@@@@@@% ++ ++ .%@@@@@@@@@ @@@@@@@@- +@@- +@@@@@@@@@ @@@@@@@@= :*@@@# .%@@@@@@@@ @@@@@@@@@+*@@@@@%. %@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ 10 eltCount --- OUTPUT --- 0 => -2.20233 : 1 => -0.773752 : 2 => 23.4804 : *** 3 => 3.09638 : 4 => -4.57744 : 5 => -5.71223 : 6 => -5.92572 : 7 => -0.543553 : 8 => 4.85982 : 9 => -9.1751 : --------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@#-:.-=@@@@@@@@@@@@@@ @@@@@%= . *@@@@@@@@@@@@@ @@@@% .:+%%% *@@@@@@@@@@@@@ @@@@+=#@@@@@# @@@@@@@@@@@@@@ @@@@@@@@@@@% @@@@@@@@@@@@@@ @@@@@@@@@@@: *@@@@@@@@@@@@@@ @@@@@@@@@@- .@@@@@@@@@@@@@@@ @@@@@@@@@: #@@@@@@@@@@@@@@@ @@@@@@@@: +*%#@@@@@@@@@@@@ @@@@@@@% :+*@@@@@@@@ @@@@@@@@#*+--.:: +@@@@@@ @@@@@@@@@@@@@@@@#=:. +@@@@@ @@@@@@@@@@@@@@@@@@@@ .@@@@@ @@@@@@@@@@@@@@@@@@@@#. #@@@@ @@@@@@@@@@@@@@@@@@@@# @@@@@ @@@@@@@@@%@@@@@@@@@@- +@@@@@ @@@@@@@@#-@@@@@@@@*. =@@@@@@ @@@@@@@@ .+%%%%+=. =@@@@@@@ @@@@@@@@ =@@@@@@@@ @@@@@@@@*=: :--*@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ 10 eltCount --- OUTPUT --- 0 => -10.1173 : 1 => -2.8161 : 2 => -2.5111 : 3 => 19.4893 : *** 4 => -2.07457 : 5 => 6.91505 : 6 => -2.07856 : 7 => -0.881291 : 8 => -0.81335 : 9 => -7.68046 : --------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@.*@@@@@@@@@@ @@@@@@@@@@@@@@@@.=@@@@@@@@@@ @@@@@@@@@@@@+@@@.=@@@@@@@@@@ @@@@@@@@@@@% #@@.=@@@@@@@@@@ @@@@@@@@@@@% #@@.=@@@@@@@@@@ @@@@@@@@@@@+ *@@:-@@@@@@@@@@ @@@@@@@@@@@= *@@= @@@@@@@@@@ @@@@@@@@@@@. #@@= @@@@@@@@@@ @@@@@@@@@@= =++.-@@@@@@@@@@ @@@@@@@@@@ =@@@@@@@@@@ @@@@@@@@@@ :*## =@@@@@@@@@@ @@@@@@@@@@:*@@@% =@@@@@@@@@@ @@@@@@@@@@@@@@@% =@@@@@@@@@@ @@@@@@@@@@@@@@@# =@@@@@@@@@@ @@@@@@@@@@@@@@@# =@@@@@@@@@@ @@@@@@@@@@@@@@@* *@@@@@@@@@@ @@@@@@@@@@@@@@@= #@@@@@@@@@@ @@@@@@@@@@@@@@@= #@@@@@@@@@@ @@@@@@@@@@@@@@@=.@@@@@@@@@@@ @@@@@@@@@@@@@@@++@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ 10 eltCount --- OUTPUT --- 0 => -5.58382 : 1 => -0.332037 : 2 => -2.3609 : 3 => 0.0268471 : 4 => 9.68715 : *** 5 => 0.345264 : 6 => -5.68754 : 7 => 0.252157 : 8 => 0.0862162 : 9 => 4.92423 : --------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@= ++++#++=*@@@@@ @@@@@@@@#. *@@@@@ @@@@@@@@= *@@@@@ @@@@@@@@. .. ...****%@@@@@ @@@@@@@@: .%@@#@@@@@@@@@@@@@ @@@@@@@% -@@@@@@@@@@@@@@@@@ @@@@@@@% -@@*@@@*@@@@@@@@@@ @@@@@@@# :#- ::. ::=@@@@@@@ @@@@@@@- -@@@@@@ @@@@@@%. *@@@@@ @@@@@@# :==*+== *@@@@@ @@@@@@%---%%@@@@@@@. *@@@@@ @@@@@@@@@@@@@@@@@@@+ *@@@@@ @@@@@@@@@@@@@@@@@@@= *@@@@@ @@@@@@@@@@@@@@@@@@* *@@@@@ @@@@@%+%@@@@@@@@%. .%@@@@@ @@@@@* .******= -@@@@@@@ @@@@@* .#@@@@@@@ @@@@@* =%@@@@@@@@ @@@@@@%#+++= =@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ 10 eltCount --- OUTPUT --- 0 => -4.68429 : 1 => -5.85174 : 2 => -11.9795 : 3 => 3.46393 : 4 => -6.07335 : 5 => 23.6807 : *** 6 => 1.61781 : 7 => -2.97774 : 8 => 1.30685 : 9 => 4.07391 : --------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@%.:@@@@@@@@@@@@ @@@@@@@@@@@@@: *@@@@@@@@@@@@ @@@@@@@@@@@@* =@@@@@@@@@@@@@ @@@@@@@@@@@% :@@@@@@@@@@@@@@ @@@@@@@@@@@- *@@@@@@@@@@@@@@ @@@@@@@@@@# .@@@@@@@@@@@@@@@ @@@@@@@@@@: #@@@@@@@@@@@@@@@ @@@@@@@@@+ -@@@@@@@@@@@@@@@@ @@@@@@@@@: %@@@@@@@@@@@@@@@@ @@@@@@@@+ +@@@@@@@@@@@@@@@@@ @@@@@@@@:.%@@@@@@@@@@@@@@@@@ @@@@@@@% -@@@@@@@@@@@@@@@@@@ @@@@@@@% -@@@@@@#..:@@@@@@@@ @@@@@@@% +@@@@@- :@@@@@@@ @@@@@@@% =@@@@%.#@@- +@@@@@@ @@@@@@@@..%@@@*+@@@@ :@@@@@@ @@@@@@@@= -%@@@@@@@@ :@@@@@@ @@@@@@@@@- .*@@@@@@+ +@@@@@@ @@@@@@@@@@+ .:-+-: .@@@@@@@ @@@@@@@@@@@@+: :*@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ 10 eltCount --- OUTPUT --- 0 => 0.409332 : 1 => -3.60869 : 2 => -4.52237 : 3 => -4.49587 : 4 => -0.557327 : 5 => 6.62171 : 6 => 19.9842 : *** 7 => -9.71854 : 8 => 3.16726 : 9 => -4.7647 : --------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@%=#@@@@@%=%@@@@@@@@@@ @@@@@@@ %@@@@@@@@@ @@@@@@@ %@@@@@@@@@ @@@@@@@#:-#-. %@@@@@@@@@ @@@@@@@@@@@@# #@@@@@@@@@@ @@@@@@@@@@@@@ #@@@@@@@@@@ @@@@@@@@@@@@@: :@@@@@@@@@@@ @@@@@@@@@%+== *%%%%%%%%%@@ @@@@@@@@% -@ @@@@@@@@@#+. .:-%@@ @@@@@@@@@@@* :-###@@@@@@ @@@@@@@@@@@* -%@@@@@@@@@@@ @@@@@@@@@@@* *@@@@@@@@@@@@ @@@@@@@@@@@* @@@@@@@@@@@@@ @@@@@@@@@@@* #@@@@@@@@@@@@ @@@@@@@@@@@* *@@@@@@@@@@@@ @@@@@@@@@@@* *@@@@@@@@@@@@ @@@@@@@@@@@* @@@@@@@@@@@@@ @@@@@@@@@@@* @@@@@@@@@@@@@ @@@@@@@@@@@@+=#@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ 10 eltCount --- OUTPUT --- 0 => -6.70799 : 1 => 0.957398 : 2 => 3.31229 : 3 => 2.58422 : 4 => 3.30001 : 5 => -3.82085 : 6 => -6.51343 : 7 => 16.7635 : *** 8 => -2.20583 : 9 => -5.96497 : --------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@%+-: =@@@@@@@@@@@@ @@@@@@@%= -@@@**@@@@@@@ @@@@@@@ :%#@-#@@@. #@@@@@@ @@@@@@* +@@@@:*@@@ *@@@@@@ @@@@@@# +@@@@ @@@% @@@@@@@ @@@@@@@. :%@@.@@@. *@@@@@@@ @@@@@@@@- =@@@@. -@@@@@@@@ @@@@@@@@@%: +@- :@@@@@@@@@ @@@@@@@@@@@%. : -@@@@@@@@@@ @@@@@@@@@@@@@+ #@@@@@@@@@@ @@@@@@@@@@@@@@+ :@@@@@@@@@@ @@@@@@@@@@@@@@+ *@@@@@@@@@ @@@@@@@@@@@@@@: = @@@@@@@@@ @@@@@@@@@@@@@@ :@ @@@@@@@@@ @@@@@@@@@@@@@@ -@ @@@@@@@@@ @@@@@@@@@@@@@# +@ @@@@@@@@@ @@@@@@@@@@@@@* ++ @@@@@@@@@ @@@@@@@@@@@@@* *@@@@@@@@@ @@@@@@@@@@@@@# =@@@@@@@@@@ @@@@@@@@@@@@@@. +@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ 10 eltCount --- OUTPUT --- 0 => -5.12389 : 1 => -3.94476 : 2 => -0.990646 : 3 => 1.20684 : 4 => 3.48777 : 5 => -0.614695 : 6 => -4.78878 : 7 => -2.69351 : 8 => 14.321 : *** 9 => 3.12232 : --------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@%.-@@@@@@@@@@@ @@@@@@@@@@@*- %@@@@@@@@@@ @@@@@@@@@@= .-. *@@@@@@@@@@ @@@@@@@@@= +@@@ *@@@@@@@@@@ @@@@@@@@* =@@@@ %@@@@@@@@@@ @@@@@@@@..@@@@% @@@@@@@@@@@ @@@@@@@# *@@@@- @@@@@@@@@@@ @@@@@@@: @@@@% @@@@@@@@@@@ @@@@@@@: @@@@- @@@@@@@@@@@ @@@@@@@: =+*= +: *@@@@@@@@@@ @@@@@@@*. +@: *@@@@@@@@@@ @@@@@@@@%#**#@@: *@@@@@@@@@@ @@@@@@@@@@@@@@@: -@@@@@@@@@@ @@@@@@@@@@@@@@@+ :@@@@@@@@@@ @@@@@@@@@@@@@@@* @@@@@@@@@@ @@@@@@@@@@@@@@@@ %@@@@@@@@@ @@@@@@@@@@@@@@@@ #@@@@@@@@@ @@@@@@@@@@@@@@@@: +@@@@@@@@@ @@@@@@@@@@@@@@@@- +@@@@@@@@@ @@@@@@@@@@@@@@@@*:%@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ 10 eltCount --- OUTPUT --- 0 => -2.75228 : 1 => -1.51535 : 2 => -4.11729 : 3 => 0.316925 : 4 => 3.73423 : 5 => -3.00593 : 6 => -6.18866 : 7 => -1.02671 : 8 => 1.937 : 9 => 14.8275 : *** Average over 10 runs is 1.05167 ms. nvidia@tegra-ubuntu$ ./sample_googlenet Building and running a GPU inference engine for GoogleNet, N=4... Bindings after deserializing: Binding 0 (data): Input. Binding 1 (prob): Output. conv1/7x7_s2 + conv1/relu_7x7 input refo 0.378ms conv1/7x7_s2 + conv1/relu_7x7 1.465ms pool1/3x3_s2 0.488ms pool1/norm1 0.137ms conv2/3x3_reduce + conv2/relu_3x3_reduce 0.178ms conv2/3x3 + conv2/relu_3x3 2.240ms conv2/norm2 0.415ms pool2/3x3_s2 0.531ms inception_3a/1x1 + inception_3a/relu_1x1 0.275ms inception_3a/3x3 + inception_3a/relu_3x3 0.578ms inception_3a/5x5 + inception_3a/relu_5x5 0.134ms inception_3a/pool 0.245ms inception_3a/pool_proj + inception_3a/re 0.096ms inception_3a/1x1 copy 0.026ms inception_3b/1x1 + inception_3b/relu_1x1 0.561ms inception_3b/3x3 + inception_3b/relu_3x3 1.156ms inception_3b/5x5 + inception_3b/relu_5x5 0.613ms inception_3b/pool 0.140ms inception_3b/pool_proj + inception_3b/re 0.132ms inception_3b/1x1 copy 0.048ms pool3/3x3_s2 0.247ms inception_4a/1x1 + inception_4a/relu_1x1 0.286ms inception_4a/3x3 + inception_4a/relu_3x3 0.279ms inception_4a/5x5 + inception_4a/relu_5x5 0.068ms inception_4a/pool 0.075ms inception_4a/pool_proj + inception_4a/re 0.076ms inception_4a/1x1 copy 0.020ms inception_4b/1x1 + inception_4b/relu_1x1 0.302ms inception_4b/3x3 + inception_4b/relu_3x3 0.423ms inception_4b/5x5 + inception_4b/relu_5x5 0.096ms inception_4b/pool 0.076ms inception_4b/pool_proj + inception_4b/re 0.081ms inception_4b/1x1 copy 0.017ms inception_4c/1x1 + inception_4c/relu_1x1 0.299ms inception_4c/3x3 + inception_4c/relu_3x3 0.408ms inception_4c/5x5 + inception_4c/relu_5x5 0.092ms inception_4c/pool 0.076ms inception_4c/pool_proj + inception_4c/re 0.082ms inception_4c/1x1 copy 0.014ms inception_4d/1x1 + inception_4d/relu_1x1 0.300ms inception_4d/3x3 + inception_4d/relu_3x3 0.042ms inception_4d/3x3 + inception_4d/relu_3x3 0.892ms inception_4d/3x3 + inception_4d/relu_3x3 0.080ms inception_4d/5x5 + inception_4d/relu_5x5 0.115ms inception_4d/pool 0.075ms inception_4d/pool_proj + inception_4d/re 0.081ms inception_4d/1x1 copy 0.012ms inception_4e/1x1 + inception_4e/relu_1x1 0.441ms inception_4e/3x3 + inception_4e/relu_3x3 0.578ms inception_4e/5x5 + inception_4e/relu_5x5 0.195ms inception_4e/pool 0.078ms inception_4e/pool_proj + inception_4e/re 0.137ms inception_4e/1x1 copy 0.025ms pool4/3x3_s2 0.072ms inception_5a/1x1 + inception_5a/relu_1x1 0.196ms inception_5a/3x3 + inception_5a/relu_3x3 0.250ms inception_5a/5x5 + inception_5a/relu_5x5 0.074ms inception_5a/pool 0.044ms inception_5a/pool_proj + inception_5a/re 0.076ms inception_5a/1x1 copy 0.009ms inception_5b/1x1 + inception_5b/relu_1x1 0.279ms inception_5b/3x3 + inception_5b/relu_3x3 0.016ms inception_5b/3x3 + inception_5b/relu_3x3 0.749ms inception_5b/3x3 + inception_5b/relu_3x3 0.030ms inception_5b/5x5 + inception_5b/relu_5x5 0.104ms inception_5b/pool 0.053ms inception_5b/pool_proj + inception_5b/re 0.080ms inception_5b/1x1 copy 0.011ms pool5/7x7_s1 0.059ms loss3/classifier input reformatter 0 0.005ms loss3/classifier 0.022ms prob 0.009ms Time over all layers: 18.039 Done.
상위와 같이 간단한 테스트들은 잘되고 쉽으며, TensorRT만으로도 동작이 된다.
- NVIDIA DLA (Deep Learning Accelerator)
- TensorRT (previously known as GPU Inference Engine (GIE))
nvidia@tegra-ubuntu$ ./trtexec //tensorRT exec Mandatory params: --deploy=Caffe deploy file OR --uff= UFF file --output= Output blob name (can be specified multiple times) Mandatory params for onnx: --onnx= ONNX Model file Optional params: --uffInput= ,C,H,W Input blob names along with their dimensions for UFF parser --model= Caffe model file (default = no model, random weights used) --batch=N Set batch size (default = 1) --device=N Set cuda device to N (default = 0) --iterations=N Run N iterations (default = 10) --avgRuns=N Set avgRuns to N - perf is measured as an average of avgRuns (default=10) --percentile=P For each iteration, report the percentile time at P percentage (0 Generate a serialized TensorRT engine --calib=Read INT8 calibration cache file. Currently no support for ONNX model. nvidia@tegra-ubuntu$./giexec Mandatory params: --deploy= Caffe deploy file OR --uff= UFF file --output= Output blob name (can be specified multiple times) Mandatory params for onnx: --onnx= ONNX Model file Optional params: --uffInput= ,C,H,W Input blob names along with their dimensions for UFF parser --model= Caffe model file (default = no model, random weights used) --batch=N Set batch size (default = 1) --device=N Set cuda device to N (default = 0) --iterations=N Run N iterations (default = 10) --avgRuns=N Set avgRuns to N - perf is measured as an average of avgRuns (default=10) --percentile=P For each iteration, report the percentile time at P percentage (0 Generate a serialized TensorRT engine --calib=Read INT8 calibration cache file. Currently no support for ONNX model.
NVIDIA DLA (Deep Learning Accelerator)
https://docs.nvidia.com/deeplearning/sdk/tensorrt-developer-guide/index.html#dla_topic
- NVIDIA CUDA Example
nvidia@tegra-ubuntu$ ls /home/nvidia/NVIDIA_CUDA-9.0_Samples/bin/aarch64/linux/release alignedTypes conjugateGradientPrecond fp16ScalarProduct mergeSort simpleCubemapTexture simpleTexture_kernel64.ptx asyncAPI conjugateGradientUM freeImageInteropNPP MersenneTwisterGP11213 simpleCUBLAS simpleVoteIntrinsics bandwidthTest convolutionFFT2D FunctionPointers MonteCarloMultiGPU simpleCUBLASXT simpleZeroCopy batchCUBLAS convolutionSeparable histEqualizationNPP nbody simpleCUDA2GL smokeParticles BiCGStab convolutionTexture histogram newdelete simpleCUFFT SobelFilter bicubicTexture cppIntegration HSOpticalFlow oceanFFT simpleCUFFT_2d_MGPU SobolQRNG bilateralFilter cppOverload imageDenoising p2pBandwidthLatencyTest simpleCUFFT_MGPU sortingNetworks bindlessTexture cudaOpenMP inlinePTX particles simpleDevLibCUBLAS stereoDisparity binomialOptions cuSolverDn_LinearSolver interval postProcessGL simpleGL template BlackScholes cuSolverRf jpegNPP ptxjit simpleHyperQ threadFenceReduction boxFilter cuSolverSp_LinearSolver lineOfSight quasirandomGenerator simpleLayeredTexture threadMigration boxFilterNPP cuSolverSp_LowlevelCholesky Mandelbrot radixSortThrust simpleMultiCopy threadMigration_kernel64.ptx c++11_cuda cuSolverSp_LowlevelQR marchingCubes randomFog simpleMultiGPU transpose cannyEdgeDetectorNPP dct8x8 matrixMul recursiveGaussian simpleOccupancy UnifiedMemoryStreams cdpAdvancedQuicksort deviceQuery matrixMulCUBLAS reduction simplePitchLinearTexture vectorAdd cdpBezierTessellation deviceQueryDrv matrixMulDrv scalarProd simplePrintf vectorAddDrv cdpLUDecomposition dwtHaar1D matrixMulDynlinkJIT scan simpleSeparateCompilation vectorAdd_kernel64.ptx cdpQuadtree dxtc matrixMul_kernel64.ptx segmentationTreeThrust simpleStreams volumeFiltering cdpSimplePrint eigenvalues MC_EstimatePiInlineP shfl_scan simpleSurfaceWrite volumeRender cdpSimpleQuicksort fastWalshTransform MC_EstimatePiInlineQ simpleAssert simpleTemplates warpAggregatedAtomicsCG clock FDTD3d MC_EstimatePiP simpleAtomicIntrinsics simpleTexture concurrentKernels FilterBorderControlNPP MC_EstimatePiQ simpleCallback simpleTexture3D conjugateGradient fluidsGL MC_SingleAsianOptionP simpleCooperativeGroups simpleTextureDrv
https://tm3.ghost.io/2018/07/06/setting-up-the-nvidia-jetson-tx2/
- Multimedia 와 TensorRT
nvidia@tegra-ubuntu:$ cd ~/tegra_multimedia_api/samples/ nvidia@tegra-ubuntu:$ ls 00_video_decode 02_video_dec_cuda 04_video_dec_trt 06_jpeg_decode 08_video_dec_drm 10_camera_recording 13_multi_camera common Rules.mk 01_video_encode 03_video_cuda_enc 05_jpeg_encode 07_video_convert 09_camera_jpeg_capture 12_camera_v4l2_cuda backend frontend v4l2cuda nvidia@tegra-ubuntu:$ cd backend nvidia@tegra-ubuntu:$ ./backend 1 ../../data/Video/sample_outdoor_car_1080p_10fps.h264 H264 --trt-deployfile ../../data/Model/GoogleNet_one_class/GoogleNet_modified_oneClass_halfHD.prototxt --trt-modelfile ../../data/Model/GoogleNet_one_class/GoogleNet_modified_oneClass_halfHD.caffemodel --trt-forcefp32 0 --trt-proc-interval 1 -fps 10 // Xwindow에서 실행 , HDMI 연결후
https://devtalk.nvidia.com/default/topic/1027851/jetson-tx2/jetpack-3-2-tegra_multimedia_api-backend-sample-won-t-run/
https://www.youtube.com/watch?v=D7lkth34rgM
- OpenCV4Tegra
https://jkjung-avt.github.io/opencv3-on-tx2/
https://github.com/jetsonhacks/buildOpenCVTX2
https://www.youtube.com/watch?v=gvmP0WRVUxI
https://devtalk.nvidia.com/default/topic/822903/jetson-tk1/opencv4tegra-libraries/
https://devtalk.nvidia.com/default/topic/1043074/jetson-tx2/how-to-download-and-install-opencv4tegra/
https://devtalk.nvidia.com/default/topic/1042056/jetson-tx2/jetpack-3-3-opencv-error-no-cuda-support-the-library-is-compiled-without-cuda-support-/post/5285618/#5285618
- Jetson TX2 Yolo 실행 및 성능