5/31/2019

UFF_SSD 와 Tensorflow 와 개발방법 외 TensorRT 5.0 기능소개

1. TensorRT python3  sample

Jetson TX2의 Jetpack 4.2에서 제공해주는 python 2가 아닌 다른 python3 sample 이며,이를 테스트를 하고자 한다.
UFF는 Format인 것은 알겠는데, SSD가 뭔지를 몰라서 아래와 같이 찾아봤다.

  • SSD ( Single Shot MultiBox Detector)관련사항 
Yolo 처럼  Detection  Network 중에 하나이며, 이 Source Tensorflow 기반으로 사용 중
  https://ai.google/research/pubs/pub44872
  http://openresearch.ai/t/ssd-single-shot-multibox-detector/74

결론적으로 동작은 Tensorflow의 모델을 SSD  Model을 가져와서 UFF로 저장 후 TensorRT로 변환하고 이를 동작하는 개념이다.
이전 Yolo 테스트와 유사하며, 기능도 거의 유사하다.


1.1 UFF_SSD  Sample 

README를 보면, SSD는 Object Detection에서 많이 사용되는 모델이라고 하며, SSD는 크게 두가지로 나뉘어지며, 특징추출과 detection 부분이라고 한다.
  1. convolutional feature extractor like VGG, ResNet, Inception (현재 Inception_v2 사용)
  2. detection part

이외에도 NVIDIA에서는 SSD 관련 example을 제공해주고 있으며, 이를 전부 다 테스트를 진행을 못할 것 같아 아래만 테스트 진행

  • Python3 -UFF_SSD Example 
TensorRT의 example 중  python 부분의 UFF-SSD 확인

$ cd /usr/src/tensorrt/samples/python
$ ls
common.py   end_to_end_tensorflow_mnist  introductory_parser_samples  uff_custom_plugin  yolov3_onnx
common.pyc  fc_plugin_caffe_mnist        network_api_pytorch_mnist    uff_ssd

$ cd uff_ssd 

$ ls
CMakeLists.txt  detect_objects.py  images  plugin  README.md  requirements.txt  utils  voc_evaluation.py

$ cat requirements.txt 
numpy
Pillow
pycuda
requests
tensorflow-gpu

//  README에서 요구하는 Package 설치진행 

$ sudo pip install -r requirements.txt    //tensorflow-gpu version 정의 문제로 찾지못함  
$ python3 -m pip install -r requirements.txt   // tensorflow-gpu version 정의 문제로 찾지못함 
Collecting numpy (from -r requirements.txt (line 1))
Collecting Pillow (from -r requirements.txt (line 2))
Collecting pycuda (from -r requirements.txt (line 3))
  Using cached https://files.pythonhosted.org/packages/4d/29/5a3eb66c2f1a4adc681f6c8131e9ed677af31b0c8a78726d540bd44b3403/pycuda-2019.1.tar.gz
Collecting requests (from -r requirements.txt (line 4))
  Using cached https://files.pythonhosted.org/packages/51/bd/23c926cd341ea6b7dd0b2a00aba99ae0f828be89d72b2190f27c11d4b7fb/requests-2.22.0-py2.py3-none-any.whl
Collecting tensorflow-gpu (from -r requirements.txt (line 5))
  Could not find a version that satisfies the requirement tensorflow-gpu (from -r requirements.txt (line 5)) (from versions: )
No matching distribution found for tensorflow-gpu (from -r requirements.txt (line 5))

// requirement의 tensorflow의 version 명시를 진행하지 않아 설치진행을 못하는 것 같음 
// pip를 진행을 해보면, Collecting 다음에 Building 으로 진행이 되어야 설치진행, 그래서 상위 Package 전부 미설치됨, 별도 설치진행 

$ pip or pip3 search //명령으로 찾으면 tensorflow-gpu (1.13.1) 발견, 혹시 몰라 NVIDIA Site 재확인 (공식버전이 있음) 

$ python3 -m pip install Pillow numpy pycuda requests  // requirment의 Module들을 별도 설치 진행 

python3는 현재 상위 requirment가 하나도 설치가 진행되지 않았으며, 관련부분은 별도설치진행

  • python3 Tensorflow-GPU 별도설치 
상위에서 tensorflow-gpu가 설치되지 않아 원인보면, version 미 정의로 설치가 되지 않는 것 같다.
그래서  NVIDIA의 공식 사이트에서 확인하고 관련사항 확인

$ python3 --version  // python3 version 확인 
Python 3.6.7
//  NVIDIA tensorflow-gpu official version install
$ sudo apt-get install libhdf5-serial-dev hdf5-tools // tensorlfow 에서 필요 
$ pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu==1.13.1+nv19.5 --user    //  official release of TensorFlow for Jetson TX2


How To Install Tensorflow-GPU
  https://devtalk.nvidia.com/default/topic/1038957/jetson-tx2/tensorflow-for-jetson-tx2-/
  https://developer.nvidia.com/embedded/downloads#?search=tensorflow
  https://docs.nvidia.com/deeplearning/frameworks/install-tf-jetsontx2/index.html

NVIDIA DeepLearning Frameworks
  https://developer.nvidia.com/deep-learning-frameworks

Jetson Package Download
  https://developer.nvidia.com/embedded/downloads

Jetson How to install Tensorflow Document
  https://docs.nvidia.com/deeplearning/dgx/install-tf-jetsontx2/index.html

  • Python3 -UFF_SSD Build 
README에서 확인가능하며,  그대로 설정

$ pwd
/usr/src/tensorrt/samples/python/uff_ssd

$ sudo  mkdir -p build
$ cd build
$ sudo cmake ..
$ sudo make
$ ls
CMakeCache.txt  CMakeFiles  cmake_install.cmake  libflattenconcat.so  Makefile
$ cd ..
$ pwd
/usr/src/tensorrt/samples/python/uff_ssd


  • UFF_SSD 위해 이미지 복사 및 테스트 
README.md을 읽어보면 다음과 같이 동작한다.
  1. download pretrained ssd_inception_v2_coco_2017_11_17 (tensorflow object detetion API)
  2. 이 모델을 TensorRT로 변환되고 Model version 이름이 추가됨 
  3. TensorRT inference engine 빌드 후 File로 저장 한다.
  4. TensorRT의 Optimization에서  frozen graph가 추가되며, 이는 Time consumimg 측정

세부내용은 README.md 를 확인하자.

$ sudo cp ../yolov3_onnx/dog.jpg .
$ sudo cp ../yolov3_onnx/cat.jpg .

$ vi detect_objects.py //TensorRT로 동작 (UFF->TensorRT Format) 
import os
import ctypes
import time
import sys
import argparse

import numpy as np
from PIL import Image
import tensorrt as trt

import utils.inference as inference_utils # TRT/TF inference wrappers
import utils.model as model_utils # UFF conversion
import utils.boxes as boxes_utils # Drawing bounding boxes
import utils.coco as coco_utils # COCO dataset descriptors
from utils.paths import PATHS # Path management
...............

$ sudo python3 detect_objects.py dog.jpg  // download ssd_inception_v2_coco_2017_11_17.tar.gz
Preparing pretrained model
Downloading /usr/src/tensorrt/samples/python/uff_ssd/utils/../workspace/models/ssd_inception_v2_coco_2017_11_17.tar.gz
Download progress [==================================================] 100%
Download complete
Unpacking /usr/src/tensorrt/samples/python/uff_ssd/utils/../workspace/models/ssd_inception_v2_coco_2017_11_17.tar.gz
Extracting complete
Removing /usr/src/tensorrt/samples/python/uff_ssd/utils/../workspace/models/ssd_inception_v2_coco_2017_11_17.tar.gz
Model ready
WARNING:tensorflow:From /usr/lib/python3.6/dist-packages/graphsurgeon/StaticGraph.py:123: FastGFile.__init__ (from tensorflow.python.platform.gfile) is deprecated and will be removed in a future version.
Instructions for updating:
Use tf.gfile.GFile.
WARNING: To create TensorRT plugin nodes, please use the `create_plugin_node` function instead.
UFF Version 0.5.5
=== Automatically deduced input nodes ===
[name: "Input"
op: "Placeholder"
attr {
  key: "dtype"
  value {
    type: DT_FLOAT
  }
}
attr {
  key: "shape"
  value {
    shape {
      dim {
        size: 1
      }
      dim {
        size: 3
      }
      dim {
        size: 300
      }
      dim {
        size: 300
      }
    }
  }
}
]
=========================================

Using output node NMS
Converting to UFF graph
Warning: No conversion function registered for layer: NMS_TRT yet.
Converting NMS as custom op: NMS_TRT
Warning: No conversion function registered for layer: FlattenConcat_TRT yet.
Converting concat_box_conf as custom op: FlattenConcat_TRT
Warning: No conversion function registered for layer: GridAnchor_TRT yet.
Converting GridAnchor as custom op: GridAnchor_TRT
Warning: No conversion function registered for layer: FlattenConcat_TRT yet.
Converting concat_box_loc as custom op: FlattenConcat_TRT
No. nodes: 563
UFF Output written to /usr/src/tensorrt/samples/python/uff_ssd/utils/../workspace/models/ssd_inception_v2_coco_2017_11_17/frozen_inference_graph.uff
UFF Text Output written to /usr/src/tensorrt/samples/python/uff_ssd/utils/../workspace/models/ssd_inception_v2_coco_2017_11_17/frozen_inference_graph.pbtxt
TensorRT inference engine settings:
  * Inference precision - DataType.FLOAT
  * Max batch size - 1

Building TensorRT engine. This may take few minutes.
TensorRT inference time: 97 ms
Detected bicycle with confidence 98%  // bicycle 발견했지만 에러발생 (libfreetype 문제) 
Traceback (most recent call last):
  File "detect_objects.py", line 193, in module
    main()
  File "detect_objects.py", line 180, in main
    analyze_prediction(detection_out, det * prediction_fields, img_pil)
  File "detect_objects.py", line 87, in analyze_prediction
    color=coco_utils.COCO_COLORS[label]
  File "/usr/src/tensorrt/samples/python/uff_ssd/utils/boxes.py", line 33, in draw_bounding_boxes_on_image
    boxes[i, 3], color, thickness, display_str_list[i])
  File "/usr/src/tensorrt/samples/python/uff_ssd/utils/boxes.py", line 77, in draw_bounding_box_on_image
    font = ImageFont.truetype('arial.ttf', 24)
  File "/home/jetsontx2/.local/lib/python3.6/site-packages/PIL/ImageFont.py", line 280, in truetype
    return FreeTypeFont(font, size, index, encoding, layout_engine)
  File "/home/jetsontx2/.local/lib/python3.6/site-packages/PIL/ImageFont.py", line 136, in __init__
    if core.HAVE_RAQM:
  File "/home/jetsontx2/.local/lib/python3.6/site-packages/PIL/ImageFont.py", line 40, in __getattr__
    raise ImportError("The _imagingft C module is not installed")
ImportError: The _imagingft C module is not installed

$ sudo apt-get install libfreetype6-dev    // libfreetype 문제발생, 설치 진행 
$ pip3 uninstall Pillow;pip3 install --no-cache-dir Pillow  // pillow package 재설치    

$ sudo python3 detect_objects.py dog.jpg   // 재설치 이후 다시 테스트 진행 
TensorRT inference engine settings:
  * Inference precision - DataType.FLOAT  //32bit FLOAT, 16bit HALF
  * Max batch size - 1

Loading cached TensorRT engine from /usr/src/tensorrt/samples/python/uff_ssd/utils/../workspace/engines/FLOAT/engine_bs_1.buf
TensorRT inference time: 347 ms
Detected bicycle with confidence 98%
Detected dog with confidence 95%
Detected car with confidence 79%
Total time taken for one image: 456 ms
Saved output image to: /usr/src/tensorrt/samples/python/uff_ssd/utils/../image_inferred.jpg

$ eog image_inferred.jpg   // 아래그림 참조

$ sudo python3 detect_objects.py cat.jpg   // 재설치 이후 다시 테스트 진행
TensorRT inference engine settings:
  * Inference precision - DataType.FLOAT
  * Max batch size - 1

Loading cached TensorRT engine from /usr/src/tensorrt/samples/python/uff_ssd/utils/../workspace/engines/FLOAT/engine_bs_1.buf
TensorRT inference time: 120 ms
Detected cat with confidence 98%
Total time taken for one image: 186 ms

Saved output image to: /usr/src/tensorrt/samples/python/uff_ssd/utils/../image_inferred.jpg

$ eog image_inferred.jpg  // 아래그림 참조 

SSH로 테스트와 직접 HDMI 연결하여 테스트를 진행해보면, SSH가 좀 느린 것 같다.
처음에는 300x300만 되는줄 알았는데, 테스트해보니, 얼추 다 동작되는 것 같다.





1.2 VOC TEST 부분 

README의 옵션으로 시도 했으며, SSD 모델을 VOC라는 Image들을 이용하여 Training 하여 성능을 향상시키는 것 같다. (세부내용은 README에도 없음)

VOC 내부에는 다양한 Image들이 존재하며 왜 이렇게 존재하는지는 나중에 별도로 알아야 할 것 같다.

$ sudo wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar   //download 가 잘안됨,
$ sudo wget http://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar    //다른 mirror 사이트를 찾음,  https://pjreddie.com/projects/pascal-voc-dataset-mirror/

$ sudo tar xvf VOCtest_06-Nov-2007.tar

$ sudo python3 voc_evaluation.py --voc_dir /usr/src/tensorrt/samples/python/uff_ssd/VOCdevkit/VOC2007  // Model은 상위와 동일 
Preprocessing VOC dataset. It may take few minutes.
TensorRT inference engine settings:
  * Inference precision - DataType.FLOAT
  * Max batch size - 64

Building TensorRT engine. This may take few minutes.
Infering image 1/4952
Infering image 65/4952
Infering image 129/4952
Infering image 193/4952
Infering image 257/4952
Infering image 321/4952
Infering image 385/4952
Infering image 449/4952
Infering image 513/4952
Infering image 577/4952
Infering image 641/4952
Infering image 705/4952
Infering image 769/4952
Infering image 833/4952
Infering image 897/4952
Infering image 961/4952
Infering image 1025/4952
Infering image 1089/4952
Infering image 1153/4952
Infering image 1217/4952
Infering image 1281/4952
Infering image 1345/4952
Infering image 1409/4952
Infering image 1473/4952
Infering image 1537/4952
Infering image 1601/4952
Infering image 1665/4952
Infering image 1729/4952
Infering image 1793/4952
Infering image 1857/4952
Infering image 1921/4952
Infering image 1985/4952
Infering image 2049/4952
Infering image 2113/4952
Infering image 2177/4952
Infering image 2241/4952
Infering image 2305/4952
Infering image 2369/4952
Infering image 2433/4952
Infering image 2497/4952
Infering image 2561/4952
Infering image 2625/4952
Infering image 2689/4952
Infering image 2753/4952
Infering image 2817/4952
Infering image 2881/4952
Infering image 2945/4952
Infering image 3009/4952
Infering image 3073/4952
Infering image 3137/4952
Infering image 3201/4952
Infering image 3265/4952
Infering image 3329/4952
Infering image 3393/4952
Infering image 3457/4952
Infering image 3521/4952
Infering image 3585/4952
Infering image 3649/4952
Infering image 3713/4952
Infering image 3777/4952
Infering image 3841/4952
Infering image 3905/4952
Infering image 3969/4952
Infering image 4033/4952
Infering image 4097/4952
Infering image 4161/4952
Infering image 4225/4952
Infering image 4289/4952
Infering image 4353/4952
Infering image 4417/4952
Infering image 4481/4952
Infering image 4545/4952
Infering image 4609/4952
Infering image 4673/4952
Infering image 4737/4952
Infering image 4801/4952
Infering image 4865/4952
Infering image 4929/4952
Reading annotation for 1/4952
Reading annotation for 101/4952
Reading annotation for 201/4952
Reading annotation for 301/4952
Reading annotation for 401/4952
Reading annotation for 501/4952
Reading annotation for 601/4952
Reading annotation for 701/4952
Reading annotation for 801/4952
Reading annotation for 901/4952
Reading annotation for 1001/4952
Reading annotation for 1101/4952
Reading annotation for 1201/4952
Reading annotation for 1301/4952
Reading annotation for 1401/4952
Reading annotation for 1501/4952
Reading annotation for 1601/4952
Reading annotation for 1701/4952
Reading annotation for 1801/4952
Reading annotation for 1901/4952
Reading annotation for 2001/4952
Reading annotation for 2101/4952
Reading annotation for 2201/4952
Reading annotation for 2301/4952
Reading annotation for 2401/4952
Reading annotation for 2501/4952
Reading annotation for 2601/4952
Reading annotation for 2701/4952
Reading annotation for 2801/4952
Reading annotation for 2901/4952
Reading annotation for 3001/4952
Reading annotation for 3101/4952
Reading annotation for 3201/4952
Reading annotation for 3301/4952
Reading annotation for 3401/4952
Reading annotation for 3501/4952
Reading annotation for 3601/4952
Reading annotation for 3701/4952
Reading annotation for 3801/4952
Reading annotation for 3901/4952
Reading annotation for 4001/4952
Reading annotation for 4101/4952
Reading annotation for 4201/4952
Reading annotation for 4301/4952
Reading annotation for 4401/4952
Reading annotation for 4501/4952
Reading annotation for 4601/4952
Reading annotation for 4701/4952
Reading annotation for 4801/4952
Reading annotation for 4901/4952
Saving cached annotations to /usr/src/tensorrt/samples/python/uff_ssd/utils/../workspace/annotations_cache/annots.pkl
AP for aeroplane = 0.7817
AP for bicycle = 0.7939
AP for bird = 0.6812
AP for boat = 0.5579
AP for bottle = 0.4791
AP for bus = 0.8383
AP for car = 0.7645
AP for cat = 0.8259
AP for chair = 0.5948
AP for cow = 0.7847
AP for diningtable = 0.6731
AP for dog = 0.7886
AP for horse = 0.8402
AP for motorbike = 0.8103
AP for person = 0.7848
AP for pottedplant = 0.4290
AP for sheep = 0.7474
AP for sofa = 0.7683
AP for train = 0.8429
AP for tvmonitor = 0.7145
Mean AP = 0.7251

상위 테스트들은 전부 Jetson TX2의 Normal 상태에서 테스트를 진행을 했으며, 성능을 더 올리고 싶다면, Clock 부분을 수정하여 재 테스트를 진행하자.

2. TensorBoard 테스트 

아직 TensorBoard의 정확한 용도와 사용법을 숙지하지 못하여 실행부분만 실행해본다.

$ cd ~ 
$ mkdir jhlee
$/home/jetsontx2/.local/bin/tensorboard --logdir ~/jhlee   // tensorboard는 상위 tensorflow로 이미 설치됨 

browser를 이용하여 JetsonTX2의 ip를 접속 http://10.0.0.174:6006/



TensorBoard (*.PBTX)
  https://www.tensorflow.org/guide/graph_viz
  https://gusrb.tistory.com/21

3. TensorFlow와 TensorRT 개발방법 

아래의 문서를 보면, TensorRT Inference optimization tool with TensorFlow 발표했으며,  TensorFlow 1.7 에서 이용가능한 것 같다.

아래의 문서를 기반으로 예제를 Download 받아 테스트를 진행을 해보며 추후 시간이 된다면 더 자세히 문서를 읽고 관련내용들을 숙지한 후 테스트를 진행해본다.

Tensorflow와 TensorRT  개발 
  https://devblogs.nvidia.com/tensorrt-integration-speeds-tensorflow-inference/

Example 



  • Tensorflow의 개발 과 Tensorflow와 TensorRT개발 비교 

Trained Graph 만들고, 이를 Frozen Graph 변경하고 실행을 한다.
처음 Freeze 라는 용어를 몰랐는데, 일종의 실행 Format으로 변경한다고 생각하면 되겠다.
TensorRT에서는 Serialize라는 용어가 나오는데 이역시 실행될 수 or 저장되어지는Format이라고 생각하면되겠지만, TensorRT의 동작이 정확히 이해는 안되지만, 정리하자.

하지만, Freeze과 Serialize의 차이는 존재하는 것 같으며, 각각 사용되어지는 Framework에서 저장되는 방식이 다른 것 같다.
Framework에서는 호환

아래를 보면, Optimized Plan들이 TensorRT 유저입장에서는 엔진으로 보이며,
Optimized Plan들은  TensorRT Runtime Engine에 의해 De-Serialized되며, 적용이 된다.


3.1 TensorRT Deployment Flow 







  • 상위 STEP 1의 Optimize trained model


Layer & Tensor Fusion
복잡한 Layer의 갯수를 최소한으로 줄이는 것이며, 이를 통하여, 많은 Layer가 줄어든다.
성능향상이 된다.




Weights & Activation Precision Calibration
FP32, FP16, INT8 로 변경하면 아래와 같이 Range가 변경이 되며, 최적화를 진행하지만, 이는 TensorRT의 Manual 반드시 참조 (각 Layer와 지원여부 확인)




Kernel Auto Tuning 과 Dynamic Tensor Memory
Kernel 과 Memory관리를 해주는 기능인 것 같은데, 이부분은 정확한 이해를 다른 부분을 이해하고 하자.



  • UFF Format TensorRT (python)



아래를 보면 이해를 할수 있다. Plan 파일이  Engine파일이며, 이는 TensorRT에 동작된다
.


  • DEEP LEARNING DEPLOYMENT WITH TENSORRT 
상위설명이 자세히 나오며, 이부분은 이해가 될때까지 여러번 시청을 하자.
  http://on-demand.gputechconf.com/gtcdc/2017/video/DC7172/
  https://youtu.be/6My-daDk4zE?list=PLoS6u5SJMkUk1kk2_WWHfTrANJuYvZNIP


3.2 TensorRT의 장점의 정리 



  • TensorRT는 아래와 같이 다양한 Framework를 지원가능




  1. Caffe                                 ->  Caffe Parser
  2. CNTK, mxnet, pytorch, caffe2  -> onnx parser
  3. Tensorflow                          -> UFF parser  or TF-TRT 사용 


아래의 정리는 TensorRT 4.0이므로 착각하지말고 , TensorRT 5.0은  기능이 더 개선되었음



3.3 Tensorflow 설치 와 tftrt_sample 실행 


  • python2-Tensorflow-gpu 설치 
python2에서 tensorflow를 설치 진행했더니, CUDA Version 9.0 버전문제발생
python3 version 도 제대로 동작이 안됨 (주의, python3 tensorflow-gpu 재설치 진행 )

  $ pip install --extra-index-url=https://developer.download.nvidia.com/compute/redist/jp/v33/ tensorflow-gpu  
// 문제발생 CUDA 9.0 으로 동작하므로 현재 CUDA 10.0하고 PATH가 맞지 않음 
//libcublas.so.9.0: cannot open shared object file: No such file or directory

python2 /3 version 설치방법 있지만, 시도해보지 않음
  https://stackoverflow.com/questions/49811510/how-to-install-tensorflow-gpu-for-both-python2-and-python3?rq=1


  • Example TEST ( python2->python3 변경) 

$ tar -xvf tftrt_sample.tar.xz 
$ cd tftrt/

$ cat README 
TRT Tensorflow integration example

Install tensorRT and Tensorflow with TRT contrib. Instructions are available from:
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/tensorrt

Run the sample with:
./run_all.sh
It will run through native, FP32, FP16 and INT8 examples


$ cat ./run_all.sh 
#!/bin/bash

python tftrt_sample.py --native --FP32 --FP16 --INT8 \
                       --num_loops 10 \
                       --topN 5 \
                       --batch_size 4 \
                       --workspace_size 2048 \
                       --log_file log.txt \
                       --network resnet_v1_50_frozen.pb \
                       --input_node input \
                       --output_nodes resnet_v1_50/predictions/Reshape_1 \
                       --img_size 224 \
                       --img_file  grace_hopper.jpg
 
$ ./run_all3.sh  // python3로 변경 후 실행 

Namespace(FP16=True, FP32=True, INT8=True, batch_size=4, dump_diff=False, native=True, num_loops=10, topN=5, update_graphdef=False, with_timeline=False, workspace_size=2048)
Starting at 2019-06-05 10:36:28.410090
2019-06-05 10:36:28.522480: W tensorflow/core/platform/profile_utils/cpu_utils.cc:98] Failed to find bogomips in /proc/cpuinfo; cannot determine CPU frequency
2019-06-05 10:36:28.524851: I tensorflow/compiler/xla/service/service.cc:161] XLA service 0x27b6b450 executing computations on platform Host. Devices:
2019-06-05 10:36:28.525015: I tensorflow/compiler/xla/service/service.cc:168]   StreamExecutor device (0): , 
2019-06-05 10:36:28.657662: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:965] ARM64 does not support NUMA - returning NUMA node zero
2019-06-05 10:36:28.658228: I tensorflow/compiler/xla/service/service.cc:161] XLA service 0x27a69610 executing computations on platform CUDA. Devices:
2019-06-05 10:36:28.658354: I tensorflow/compiler/xla/service/service.cc:168]   StreamExecutor device (0): NVIDIA Tegra X2, Compute Capability 6.2
2019-06-05 10:36:28.658837: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1433] Found device 0 with properties: 
name: NVIDIA Tegra X2 major: 6 minor: 2 memoryClockRate(GHz): 1.02
pciBusID: 0000:00:00.0
totalMemory: 7.67GiB freeMemory: 784.20MiB
2019-06-05 10:36:28.658921: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1512] Adding visible gpu devices: 0
2019-06-05 10:36:32.198382: I tensorflow/core/common_runtime/gpu/gpu_device.cc:984] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-06-05 10:36:32.198520: I tensorflow/core/common_runtime/gpu/gpu_device.cc:990]      0 
2019-06-05 10:36:32.198596: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1003] 0:   N 
2019-06-05 10:36:32.198931: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 3926 MB memory) -> physical GPU (device: 0, name: NVIDIA Tegra X2, pci bus id: 0000:00:00.0, compute capability: 6.2)
WARNING:tensorflow:From tftrt_sample.py:92: FastGFile.__init__ (from tensorflow.python.platform.gfile) is deprecated and will be removed in a future version.
Instructions for updating:
Use tf.gfile.GFile.
INFO:tensorflow:Starting execution
./run_all3.sh: line 13: 31992 Segmentation fault      (core dumped) python3 tftrt_sample.py --native --FP32 --FP16 --INT8 --num_loops 10 --topN 5 --batch_size 4 --workspace_size 2048 --log_file log.txt --network resnet_v1_50_frozen.pb --input_node input --output_nodes resnet_v1_50/predictions/Reshape_1 --img_size 224 --img_file grace_hopper.jpg
일단 상위예제로 Graph가 동작될 줄 알았으나, 문제가 있어 동작되지 않으며, Tensorboard와 연결해서 볼수 있을 줄 알았는데,  디버깅을 해야 할 것 같음

추후 Tensorboard의 graph 부분의 활용법을 알아봐야겠음


4. NVIDIA의 UFF Format  관련사항 

TensorRT에서는 현재 3가지 Parser를 제공하여 다른 기반 Platform 의 모델을 가져올수 있다
현재 상위 Tensorflow는 UFF를 사용하므로, 정확한 역할과 관련기능을 정확하게 이해를 해야겠다.

TensorRT의 배포구조 
  https://devblogs.nvidia.com/deploying-deep-learning-nvidia-tensorrt/

UFF Parser
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-api/python_api/parsers/Uff/pyUff.html

UFF Converter
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-api/index.html
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-api/python_api/uff/uff.html

UFF Operator
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-api/python_api/uff/Operators.html

5/30/2019

TensorRT5.0-Yolov3

1. TensorRT 5.0

Jetpack 4.2를 설치를 다 진행을 하고 SDK를 다 설치를 진행을 했으면, 이전 Jetpack 3.3 처럼 기본 Sample을 다시 확인하면,
드디어 python 지원 되는 것을 확인가능하며, C++  예제도 여전히 존재한다.

이전 SDK보다 Sample의 갯수가 많아졌으며, 추측으로는 Server 기반의 API도 지원가능한 것 같다.
각각의 기능을 다 살펴보려면 Manual과 소스를 조금씩 다 분석을 해봐야겠다.

1.1 TensorRT Sample TEST 

이전 처럼 TensorRT Sample 소스로 가서 빌드 후 생긴 각각의 bin 파일들을 테스트 진행

  • Sampel Build 
$ ssh -X jetsontx2@192.168.55.1   // jetson TX2 접속 

jetsontx2@jetsontx2-desktop:~$  ls /usr/src/tensorrt/samples/
common     Makefile.config  sampleFasterRCNN  sampleINT8API  sampleMNISTAPI   sampleOnnxMNIST  sampleUffMNIST
getDigits  python           sampleGoogleNet   sampleMLP      sampleMovieLens  samplePlugin     sampleUffSSD
Makefile   sampleCharRNN    sampleINT8        sampleMNIST    sampleNMT        sampleSSD        trtexec

jetsontx2@jetsontx2-desktop:~$ cd /usr/src/tensorrt/samples
jetsontx2@jetsontx2-desktop:~$ sudo make 


  • Sampel Test
jetsontx2@jetsontx2-desktop:~$ cd ..
bin  data  python  samples

jetsontx2@jetsontx2-desktop:~$ cd ./bin
jetsontx2@jetsontx2-desktop:/usr/src/tensorrt/bin$ ls
chobj                     sample_googlenet        sample_mnist            sample_onnx_mnist        sample_uff_ssd
dchobj                    sample_googlenet_debug  sample_mnist_api        sample_onnx_mnist_debug  sample_uff_ssd_debug
download-digits-model.py  sample_int8             sample_mnist_api_debug  sample_plugin            trtexec
giexec                    sample_int8_api         sample_mnist_debug      sample_plugin_debug      trtexec_debug
sample_char_rnn           sample_int8_api_debug   sample_movielens        sample_ssd
sample_char_rnn_debug     sample_int8_debug       sample_movielens_debug  sample_ssd_debug
sample_fasterRCNN         sample_mlp              sample_nmt              sample_uff_mnist
sample_fasterRCNN_debug   sample_mlp_debug        sample_nmt_debug        sample_uff_mnist_debug

:/usr/src/tensorrt/bin$ ./sample_mlp  // Simple TEST 이며, 다 테스트 진행 



---------------------------



@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@%+-:  =@@@@@@@@@@@@
@@@@@@@%=      -@@@**@@@@@@@
@@@@@@@   :%#@-#@@@. #@@@@@@
@@@@@@*  +@@@@:*@@@  *@@@@@@
@@@@@@#  +@@@@ @@@%  @@@@@@@
@@@@@@@.  :%@@.@@@. *@@@@@@@
@@@@@@@@-   =@@@@. -@@@@@@@@
@@@@@@@@@%:   +@- :@@@@@@@@@
@@@@@@@@@@@%.  : -@@@@@@@@@@
@@@@@@@@@@@@@+   #@@@@@@@@@@
@@@@@@@@@@@@@@+  :@@@@@@@@@@
@@@@@@@@@@@@@@+   *@@@@@@@@@
@@@@@@@@@@@@@@: =  @@@@@@@@@
@@@@@@@@@@@@@@ :@  @@@@@@@@@
@@@@@@@@@@@@@@ -@  @@@@@@@@@
@@@@@@@@@@@@@# +@  @@@@@@@@@
@@@@@@@@@@@@@* ++  @@@@@@@@@
@@@@@@@@@@@@@*    *@@@@@@@@@
@@@@@@@@@@@@@#   =@@@@@@@@@@
@@@@@@@@@@@@@@. +@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@


2. Yolov3 python 테스트 

TensorRT 5.0 부터 python으로 Yolov3를 onnx 기반에서 지원하며, 아래 테스트를 진행해보면, 결국 TensorRT 용 전용 Data를 생성해서 동작된다.

  • Python Package 확인 
$ dpkg -l | grep TensorRT     // TensorRT 관련 Package 설치확인 
ii  graphsurgeon-tf                               5.0.6-1+cuda10.0                                arm64        GraphSurgeon for TensorRT package
ii  libnvinfer-dev                                5.0.6-1+cuda10.0                                arm64        TensorRT development libraries and headers
ii  libnvinfer-samples                            5.0.6-1+cuda10.0                                all          TensorRT samples and documentation
ii  libnvinfer5                                   5.0.6-1+cuda10.0                                arm64        TensorRT runtime libraries
ii  python-libnvinfer                             5.0.6-1+cuda10.0                                arm64        Python bindings for TensorRT
ii  python-libnvinfer-dev                         5.0.6-1+cuda10.0                                arm64        Python development package for TensorRT
ii  python3-libnvinfer                            5.0.6-1+cuda10.0                                arm64        Python 3 bindings for TensorRT
ii  python3-libnvinfer-dev                        5.0.6-1+cuda10.0                                arm64        Python 3 development package for TensorRT
ii  tensorrt                                      5.0.6.3-1+cuda10.0                              arm64        Meta package of TensorRT
ii  uff-converter-tf                              5.0.6-1+cuda10.0                                arm64        UFF converter for TensorRT package

TensorRT 설치확인 (주의 x86기반 설명이므로 참고만)
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-install-guide/index.html

  • Python Package 설치
$ sudo apt-get install -y python-pip python-dev  // python2    상위소스가 python 2이므로 이것만설치 
$ sudo apt-get install -y python3-pip python3-dev // python3  , 다른 소스는 python3 이므로 설치  

$ pip install wget

//onnx 에러 해결을 위해 아래와 같이 설치 
$ sudo apt-get install cmake  //  onnx에서 필요 
$ sudo apt-get install build-essential // build 관련부분 전체설치 
$ sudo apt-get install protobuf-compiler libprotoc-dev  //

$ pip install onnx     // 설치시 cmakd 및 probuf 설치가 필요 1.5.0 
$ pip uninstall onnx; pip install onnx==1.4.1  // 상위 onnx가 NVIDIA에서 알려진 이슈로 나옴,  
$ pip uninstall onnx; pip install onnx=1.2.2    // 진행 했지만 설치 안됨 
$ pip install Pillow==2.2.1  // libjpeg 설치안해서 아래의 소스에서 에러  
$ sudo apt-get install libjpeg-dev  // libjpeg 설치  후 PIL 재설치 및 설정  
$ pip uninstall Pillow; pip install --no-cache-dir -I pillow  // Pillow==6.0.0 변경 


pip 설치 및  tensorflow 기본설치
  https://github.com/jetsonhacks/installTensorFlowJetsonTX

onnx 설치시 문제발생
  https://github.com/onnx/onnx-tensorrt/issues/62


2.1 python yolov3_onnx test 진행  

상위에서 필요한 python pakcage들을 전부 설치를 해야 동작가능하며, 나의 경우는 테스트하면서 필요한 Package를 설치하여 상위와 같이 적었다.

README 를 반드시 읽고 관련사항 숙지
-  YOLOv3 -> ONNX -> TensorRT 로 최종변환

$ cd /usr/src/tensorrt/samples/python
$ ls
common.py                    fc_plugin_caffe_mnist        network_api_pytorch_mnist  uff_ssd
end_to_end_tensorflow_mnist  introductory_parser_samples  uff_custom_plugin          yolov3_onnx

$ cd yolov3_onnx/

$ vi README.md  // python 3는 미지원 확인 및 아래 명령들 확인, 각 python 기능확인

$ cat requirements.txt   // 설치되어있어야 하는 Python Package
numpy>=1.15.1
onnx
pycuda>=2017.1.1
Pillow>=5.2.0
wget>=3.2

$ python2 -m pip install -r requirements.txt  // python2 onnx 1.5.0 설치됨 (다시별도로  1.4.1 변경 후 진행)  
$ python3 -m pip install -r requirements.txt  // python3  (나는 아직 설치 안함)


//python2이며 동작되면, yolov3.weight yolov3.cfg download 진행후 onnx 변환 
$ sudo python yolov3_to_onnx.py    // onnx 1.4.1 동작 ,   
Layer of type yolo not supported, skipping ONNX node generation.
Layer of type yolo not supported, skipping ONNX node generation.
Layer of type yolo not supported, skipping ONNX node generation.
graph YOLOv3-608 (
  0_net[FLOAT, 64x3x608x608]
) initializers (
  1_convolutional_bn_scale[FLOAT, 32]
  1_convolutional_bn_bias[FLOAT, 32]
  1_convolutional_bn_mean[FLOAT, 32]
  1_convolutional_bn_var[FLOAT, 32]
  1_convolutional_conv_weights[FLOAT, 32x3x3x3]
  2_convolutional_bn_scale[FLOAT, 64]
  2_convolutional_bn_bias[FLOAT, 64]
  2_convolutional_bn_mean[FLOAT, 64]
  2_convolutional_bn_var[FLOAT, 64]
  2_convolutional_conv_weights[FLOAT, 64x32x3x3]
  3_convolutional_bn_scale[FLOAT, 32]
  3_convolutional_bn_bias[FLOAT, 32]
  3_convolutional_bn_mean[FLOAT, 32]
  3_convolutional_bn_var[FLOAT, 32]
  3_convolutional_conv_weights[FLOAT, 32x64x1x1]
  4_convolutional_bn_scale[FLOAT, 64]
  4_convolutional_bn_bias[FLOAT, 64]
  4_convolutional_bn_mean[FLOAT, 64]
  4_convolutional_bn_var[FLOAT, 64]
  4_convolutional_conv_weights[FLOAT, 64x32x3x3]
  6_convolutional_bn_scale[FLOAT, 128]
  6_convolutional_bn_bias[FLOAT, 128]
  6_convolutional_bn_mean[FLOAT, 128]
  6_convolutional_bn_var[FLOAT, 128]
..........
  %104_convolutional_conv_weights[FLOAT, 128x256x1x1]
  %105_convolutional_bn_scale[FLOAT, 256]
  %105_convolutional_bn_bias[FLOAT, 256]
  %105_convolutional_bn_mean[FLOAT, 256]
  %105_convolutional_bn_var[FLOAT, 256]
  %105_convolutional_conv_weights[FLOAT, 256x128x3x3]
  %106_convolutional_conv_bias[FLOAT, 255]
  %106_convolutional_conv_weights[FLOAT, 255x256x1x1]
...
) {
  1_convolutional = Conv[auto_pad = u'SAME_LOWER', dilations = [1, 1], kernel_shape = [3, 3], strides = [1, 1]](0_net, 1_convolutional_conv_weights)
  1_convolutional_bn = BatchNormalization[epsilon = 1e-05, momentum = 0.99](1_convolutional, 1_convolutional_bn_scale, 1_convolutional_bn_bias, 1_convolutional_bn_mean, 1_convolutional_bn_var)
  1_convolutional_lrelu = LeakyRelu[alpha = 0.1](1_convolutional_bn)
  2_convolutional = Conv[auto_pad = u'SAME_LOWER', dilations = [1, 1], kernel_shape = [3, 3], strides = [2, 2]](1_convolutional_lrelu, 2_convolutional_conv_weights)
...
  %103_convolutional_bn = BatchNormalization[epsilon = 1e-05, momentum = 0.99](%103_convolutional, %103_convolutional_bn_scale, %103_convolutional_bn_bias, %103_convolutional_bn_mean, %103_convolutional_bn_var)
  %103_convolutional_lrelu = LeakyRelu[alpha = 0.1](%103_convolutional_bn)
  %104_convolutional = Conv[auto_pad = u'SAME_LOWER', dilations = [1, 1], kernel_shape = [1, 1], strides = [1, 1]](%103_convolutional_lrelu, %104_convolutional_conv_weights)
  %104_convolutional_bn = BatchNormalization[epsilon = 1e-05, momentum = 0.99](%104_convolutional, %104_convolutional_bn_scale, %104_convolutional_bn_bias, %104_convolutional_bn_mean, %104_convolutional_bn_var)
  %104_convolutional_lrelu = LeakyRelu[alpha = 0.1](%104_convolutional_bn)
  %105_convolutional = Conv[auto_pad = u'SAME_LOWER', dilations = [1, 1], kernel_shape = [3, 3], strides = [1, 1]](%104_convolutional_lrelu, %105_convolutional_conv_weights)
  %105_convolutional_bn = BatchNormalization[epsilon = 1e-05, momentum = 0.99](%105_convolutional, %105_convolutional_bn_scale, %105_convolutional_bn_bias, %105_convolutional_bn_mean, %105_convolutional_bn_var)
  %105_convolutional_lrelu = LeakyRelu[alpha = 0.1](%105_convolutional_bn)
  %106_convolutional = Conv[auto_pad = u'SAME_LOWER', dilations = [1, 1], kernel_shape = [1, 1], strides = [1, 1]](%105_convolutional_lrelu, %106_convolutional_conv_weights, %106_convolutional_conv_bias)
  return %082_convolutional, %094_convolutional, %106_convolutional

//python 2이며, onnx에서 tensorRT 변환 (README참조) 
$ sudo python onnx_to_tensorrt.py   // PIL Module 6.0.0  과 jpeglib 필요 
$ sudo python onnx_to_tensorrt.py 
Loading ONNX file from path yolov3.onnx...
Beginning ONNX file parsing
Completed parsing of ONNX file
Building an engine from file yolov3.onnx; this may take a while...
Completed creating Engine
Running inference on image dog.jpg...
[[135.04631129 219.14287094 184.31729756 324.86083388]
 [ 98.95616386 135.5652711  499.10095358 299.16207424]
 [477.88943795  81.22835189 210.86732516  86.96319981]] [0.99852328 0.99881124 0.93929232] [16  1  7]
Saved image with bounding boxes of detected objects to dog_bboxes.png

$ eog dog_bboxes.png  // box와 label 이 생김 

$ ls
coco_labels.txt     data_processing.pyc  dog.jpg              README.md         yolov3.cfg   yolov3_to_onnx.py   yolov3.trt
data_processing.py  dog_bboxes.png       onnx_to_tensorrt.py  requirements.txt  yolov3.onnx  yolov3_to_onnx.pyc  yolov3.weights

$ sudo python onnx_to_tensorrt.py   // 두번째 실행하면, onnx->trt 변환이 필요 없으므로, 빨리 실행 
Reading engine from file yolov3.trt
Running inference on image dog.jpg...
[[135.04631129 219.14287094 184.31729756 324.86083388]
 [ 98.95616386 135.5652711  499.10095358 299.16207424]
 [477.88943795  81.22835189 210.86732516  86.96319981]] [0.99852328 0.99881124 0.93929232] [16  1  7]
Saved image with bounding boxes of detected objects to dog_bboxes.png.

$ vi coco_labels.txt  // 분류가능한 것 정보가 나온다. 

$ pip list   // pip는 기본으로 pip2로 설정되며, python2 Package Version ( pip3, python3)
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
appdirs (1.4.3)
asn1crypto (0.24.0)
atomicwrites (1.3.0)
attrs (19.1.0)
configparser (3.7.4)
contextlib2 (0.5.5)
cryptography (2.1.4)
decorator (4.4.0)
enum34 (1.1.6)
funcsigs (1.0.2)
gps (3.17)
graphsurgeon (0.3.2)
idna (2.6)
importlib-metadata (0.17)
ipaddress (1.0.17)
keyring (10.6.0)
keyrings.alt (3.0)
Mako (1.0.10)
MarkupSafe (1.1.1)
more-itertools (5.0.0)
numpy (1.16.4)
onnx (1.4.1)
pathlib2 (2.3.3)
Pillow (6.0.0)
pip (9.0.1)
pluggy (0.12.0)
protobuf (3.8.0)
py (1.8.0)
pycairo (1.16.2)
pycrypto (2.6.1)
pycuda (2019.1)
pygobject (3.26.1)
pytest (4.5.0)
pytools (2019.1.1)
pyxdg (0.25)
scandir (1.10.0)
SecretStorage (2.3.1)
setuptools (41.0.1)
six (1.12.0)
tensorrt (5.0.6.3)
typing (3.6.6)
typing-extensions (3.7.2)
uff (0.5.5)
unity-lens-photos (1.0)
wcwidth (0.1.7)
wget (3.2)
wheel (0.30.0)
zipp (0.5.1)



결론적으로 yolo ->onnx ->TensorRT 변환시간이 많이 걸리며, 한번 변한면 속도는 괜찮다.


  • 다른 그림  테스트 진행 

간단히 소스를 수정해서 다른 그림들을  손쉽게 테스트가 가능하며, 지금까지 나는 최상의 성능으로 테스트를 진행하지 않았다.
JetsonTX2가  Pan이 안돌면 보통상태이다.

$ sudo cp ~/download/*.jpg     // 크롬을 이용하여 자동차 , 고양이 사진 download 
$ sudo cp onnx_to_tensorrt.py jhleetest.py  // 다른 그림 테스트 용 (권한 root )

$ sudo vi jhleetest.py  // 관련부분 car.jpg 수정 
$ sudo python jhleetest.py  // 빠른실행 Car 변환 
Reading engine from file yolov3.trt
Running inference on image car.jpg...
[[ 120.05153578  152.42545467  966.89172317  486.4402317 ]
 [  89.13414976  131.88476328 1018.99139214  434.55479845]] [0.96183921 0.78680305] [2 7]
Saved image with bounding boxes of detected objects to car_bboxes.png.

$ sudo vi jhleetest.py  // 관련부분 cat.jpg 수정
$ sudo python jhleetest.py //빠른실행
Reading engine from file yolov3.trt
Running inference on image cat.jpg...
[[113.97585209  53.73459241 781.95893924 365.30765023]] [0.85985616] [15]
Saved image with bounding boxes of detected objects to cat_bboxes.png.

$ eog car_bboxes.png
$ eog cat_bboxes.png




  • 최상의 상태에서 테스트 진행

아래의 Command를 먼저 주고 실행

$ sudo nvpmodel -m 0
$ sudo ~/jetson_clocks.sh


jetson_clock.sh (Jetpack 4.2)
  https://devtalk.nvidia.com/default/topic/1049117/jetson-agx-xavier/jetpack-4-2-missing-jetson_clocks-sh-/

관련사항
  https://devtalk.nvidia.com/default/topic/1047018/tensorrt/yolov3_to_onnx-py-sample-failure/

TensorRT backend for ONNX
  https://github.com/onnx/onnx-tensorrt#tests

NVIDIA Multimedia
   https://docs.nvidia.com/jetson/archives/l4t-multimedia-archived/l4t-multimedia-281/index.html

2.2 ONNX Model

ONNX Model에 관련된 아래의 예제가 별도로 있으며, 아래의 예제는 추후 시간이 되면 실행을 해보고 관련된 내용을 습득한다.

아래의 문서를 읽어보면, Profile 에 관한내용 및 Optimization 및  좋은 내용이 많이 있으므로 추후 반드시 관련내용을 알아두자.

How to Speed Up Deep Learning Inference Using TensorRT
  https://devblogs.nvidia.com/speed-up-inference-tensorrt/

3.  Visionworks Sample 

사용할지 안할지 모르겠지만, Jetson TX2에 아래의 같은  Sample이 존재하여 더 첨부해서 넣는다.
Visionworks를 사용하는 예제이며, Jetsonhacks에서 제공하는데라 따라하면, 쉽게 실행을 할수 있다.

  https://www.youtube.com/watch?v=tFrrCrSTCig
  https://www.youtube.com/watch?v=KROP46Wte4Q&t=552s

5/28/2019

NVIDIA Nsight Tools (Jetpack 4.2 )

1. Host 에 설치된 Nvidia 개발 Tool 확인 

Jetpack 3.3->4.2로 Upgrade되면서 추가된 Nvidia의 개발툴들을 알아보고자 아래와 같이 간단히 정리를 한다.
Jetpack 4.2를 설치 후 Ubuntu에서 자동으로 찾거나 잡히면 다행이지만, 못찾는다면, 아래에서 설치되었는지 확인하고,이를 직접실행을 해주자.
(나의 경우는 거의 자동을 찾지를 못했기 때문에, NVIDIA의 Manual을 보고 다 찾아 실행을 함)


  • JetPack 3.3 Nsight Tools 확인 
JetPack 4.2와 3.3은 거의 유사하기 때문에, 아래의 블로그를 읽고 정확히 안다음에 보자
  https://ahyuo79.blogspot.com/2019/01/nsight-nvidia.html

나의 경우는 Nsight System은 쉽게 잡히는데, Nisght Graphic는 안잡혀서 아래와 같이 직접 찾아서 실행을 했다.

1.1 JetPack 4.2 Highlights 변경사항

변경사항들을 간단히 정리를 했으며,  읽기쉬운 영어라서 별도로 번역은 하지 않았다.

  • Nsight Eclipse Edition
True plugins can be installed in the developer’s own Eclipse environment
Offers an all-in-one integrated environment to edit, build, and debug CUDA applications


  • NVIDIA Nsight Systems
Improved correlation highlighting on the timeline
Improved performance and responsiveness of the timeline
Added support for launching profiler as superuser (root)


  • NVIDIA Nsight Graphics
Nsight Compute is a new interactive kernel profiler for CUDA applications bundled with CUDA Toolkit. It provides detailed performance metrics for analysis and enables results comparison between baselines and the current run. This first version of Nsight Compute supports Jetson AGX Xavier.

  https://developer.nvidia.com/embedded/jetpack
  https://developer.nvidia.com/tools-overview


2. NVIDIA Nsight Ecplise 10.0

CUDA Version이 의 9.0에서 10.0으로 변경되면서 Nsight Eclipse 역시 동일하게 변경이 되었다.  기능은 기존에 사용하는 방법과 거의 유사한 것 같다

  • Nsight Ecplise Edition 위치 확인 및 실행 
$ /usr/local/cuda-10.0/bin/nsight // JetPack 4.2 
or
$ /usr/local/cuda-9.0/bin/nsight // JetPack 3.3


실행할 경우 , 동일한 Workspace를 가지면, 아래와 같이 이전에 사용한 Project 역시 사용가능하다.
기본적인 사용방법은 Ecplise-CDT 와 거의 동일하다고 보면된다.





  • NVIDIA Visual Profiler
NVIDIA Visual Profiler (JetPack3.3) 가 상위의 Profile Tab으로 합쳐졌으며, 별도로 실행을 할 필요가 없다.
만약 별도로 실행하고자 하면 , 아래 내용 참고하고  사용방법 역시 동일하니 관련부분은 참조

$ sudo /usr/local/cuda-9.0/bin/nvvp // JetPack 3.3
or 
$ sudo /usr/local/cuda-10.0/bin/nvvp // JetPack 4.2   




3.  NVIDIA Nsight System 2019.3.2

기존의 사용하던 Tegra System Profiler (NVIDIA System Profiler)가 Nsight System으로 변경되고, User Interface도 거의 동일하다.
새로운 기능인줄 알았으나, 착각이며, 기존 같이 SSH로 연결하여 사용하면 된다.
관련내용은 기존 JetPack 3.3 참고하며, 쉽게 Process와 함께 다양한 것을 분석해준다.

  • Nsight Systems  JetPack 4.2 위치 확인 
$ ls /opt/nvidia
nsight-graphics-for-l4t  nsightsystems  sdkmanager

$ ls /opt/nvidia/nsightsystems/nsightsystems-2019.3.2/
Host-x86_64  Target-arm  Target-arm-linux

$ /opt/nvidia/nsightsystems/nsightsystems-2019.3.2/Host-x86_64/nsight-sys  // Nsight System 2019.3.2 Version 실행  아래와 같이 실행 

  •  Tegra System Profiler (NVIDIA System Profiler)  JetPack 3.3 위치 확인 
$ cd ~/project/jetsonTX2   // Jetpack 3.3 설치장소 
$ cd  NVIDIA_System_Profiler
$ ls 
Host-x86_64  Target-arm  Target-arm-linux

$ cd Host-x86_64
$ ./SystemProfiler                // Tegra System Profiler  실행 



  • Nsight System 2019.3.2 Version 확인 및 실행  (JetPack4.2)


NVIDIA NSIGHT System  (추후에 다 통합 될것 같다)


  1. Proejct 생성 
  2. Android에서 Linux 변경 
  3. Select Device for Profiling->Config Devices 선택 



SSH 설정




  • Sample Target Process 설정 
Sample Rate : 높을 수록 정확도가 높다.
Target Application: Attach or Launch 선택 후  Process 선택


아래와 같이 선택 후 옵션을 선택 Profile Start

설정된 Process를 Sample rate로 Data 분석중


STOP을 선택하면, 이제 분석된 Data를 아래와 같이 볼수 있다.


CPU 점유율도 볼수 있으며, 성능측정이 쉽게 할수 있다.




4.  NVIDIA Nsight Graphics 

기존에 사용하던 Tegra Graphics Debugger가 이것으로 변경된 것 같은데, 전에는 사용해보지 못해지만, 현재는 동작이 되어 아래 기능들을 확인을 해본다.
주로 기능을 보면 GPU의 Profiling 부분 과  GPU Trace  및 다양한 기능을 제공을 해주는데, 사용법은 관련 프로그램과 같이 다양한 실습을 해봐야 알 것 같다.


  • Nsight Graphics  위치 확인 및 실행  (JetPack 4.2)
$ ls /opt/nvidia
nsight-graphics-for-l4t  nsightsystems  sdkmanager

$ sudo /opt/nvidia/nsight-graphics-for-l4t/nsight-graphics-for-l4t-2018.7/host/linux-desktop-nomad-x64/nv-nsight-gfx   // JetPack 4.2에서 실행 , sudo로 해야 파일 Save가능


  • Tegra-Graphics-Debugger ( JetPack 3.3)
$ cd ~/project/jetsonTX2   // Jetpack 3.3 설치장소 
$ cd devtools_docs
$ ls 
NVIDIA System Profiler 4.0  Tegra Graphics Debugger 2.5     // 관련 Manual 참조 

$ sudo /usr/local/Tegra-Graphics-Debugger-2.5/nvidia-gfx-debugger    // Tegra Graphic-Debugger 실행 


  • Nsight Graphics 실행화면 
Connect 로 가서 SSH로 연결하여 실행하자.


Connect 사용 SSH로 연결 ( USB로 이미 연결됨, 192.168.55.1 ) 후 Program을 돌릴 경우, 하단 아래에 PID정보를 확인가능



4.1 NVIDIA Nsight Graphics 준비 

우선 아래와 같이 Multimedia가 동작되는 소스기반으로 테스트를 진행을 해본다.

Multimedia Sample 예제 준비

$ cd ~/tegra_multimedia_api/samples/backend // Multimedia 예제 

$ cat test.sh  // 테스트를 위한 Shell Script 생성 
./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-proc-interval 1 -fps 10



아래와 같이 새로생성된 ShellScript or 파일 선택 및 연결가능


 Activity의 주요 기능 중 3개 중 하나를 선택 후 Launch 시작 (현재 이 3개의 기능만 지원)
  1. Frame Debugger
  2. Frame Profiler
  3. Generate C++ Capture

  • Additional options 확인 



4.2  Activity->Frame Debugger Mode 

실시간으로 동영상 Frame을 분석하는 기능으로 Breaking Point와 함께 영상의 Frame을 Debuging이 가능

Frame Debugger 선택 후 Launch 시작 
제대로 실행이되면, HDMI 화면에서 동영상이 나오면서, 아래와 같이 작동


  • Frame Debugger->Caputre for Live Analysis 선택 
다양한 기능을 제공하고 있으며, 실시간으로 소스의 세부분석도 가능하면, Breaking Point와 함께 세부 동작을 알수 있다.
(HDMI로 보면 동일한 화면으로 정지)



  • Capture for Live Analysis->Profile Frame->Range Profiler View 제공 

기능 좀 불안정하며, 완벽하게 작동은 되지 않는 것 같으며, 아래의 NVIDIA Site에서 사용법을 제대로 익히자.


4.3 Activity->Frame profiler Mode
Frame profiler 선택 후 Launch 시작 
실시간으로 그래프를 확인가능



  • Capture for Live Analysis 선택 
상위와 좀 다르게 구성되지만, 얼추 거의 비슷한 기능같으며, Range Profiler View가 쉽게 볼수 있다.

Range Profiler VIew-> Metrics 및 선택을 해서 각 값들을 확인 가능한데, 솔직히 무슨의미 인지 잘모르기에, 이부분은 추측으로만 파악하고 기능을 확인해야겠다.



4.4 Activity->Generate C++ Capture  Mode 
동작 중인 파일을 C++ Code로 생성하여, 이를 Build하고 Install 하고 이를 실행하는 기능같다.
쉽게 Reverse Engineering 기능을 제공해주는 것 같은데, 에러 없이 동작은 되지만, 완벽히는 동작되는 것 같지 않다.

  • 상위 Tap Generate C++ Capture 선택 
상위 탭 Generate C++ Caputre  클릭 할 경우, 현재 화면 Capture 가능 및 분석가능
상위에서 제공하던 Capture for Live Analysis 미지원
반드시 sudo 로 실행이 되어야 파일이 Save가 됨


상위의 Build 부분 NV_TOPDIR을 찾지 못하는 문제발생하며, 상위 주소는 Jetpack 설치장소 설정


  • Main Menu에서 Tools->Options 선택  (JetPack 4.1.1 선택)



C++ 파일이 생성 및 Caputre 화면 확인



  • SDK PATH 설정 후 Build에서 Build 실행 
나의 경우는 SDK 설정을 하고 Build가 되다가, nvgles.h 내에서 gl30platform.h 가 없다고 해서 에러가 발생했지만 아래와 같이 Package를 설치하면 문제해결됨

Ubunut에서 Host에서 아래 Package 설치

 $ sudo apt install  libgles2-mesa-dev 

GLES3/gl3platform.h error 문제
  https://packages.ubuntu.com/xenial-updates/amd64/libgles2-mesa-dev/filelist
  https://www.khronos.org/opengl/wiki/Platform_specifics:_Linux




  • Build 문제 해결 



  • Target 에 Build 된 File을 Install  후 실행 
Install 할 경우  Target 에 /tmp/backend .... 설치가 진행완료
아래의 Run->Execute 실행하면 Taraget에 Seriaized Window 화면 생성 (HDMI로 확인)


나의 경우는 SerializedWindow가 화면이 검정색이여서 아래 Output Message를 분석했더니,
아래와 같이 GL_INVALID_OPERATION 문제발생
이 부분은 추후 이기능이 필요시 사용을 해야겠다.



4.4 기타 사항 

  • Output Message 

아래의 아이콘 클릭시 확인가능


  • 오동작될 경우 환경설정 확인사항 

$ ps -aux | grep test.sh   // Jetson 에서 확인 (오동작)
nvidia   24227  0.0  0.0   6124  2660 ?        Ss   06:54   0:00 bash -c cd /home/nvidia/tegra_multimedia_api/samples/backend && ENABLE_VK_LAYER_NV_nomad="1" LD_PRELOAD="/tmp/var/linux-v4l_l4t-nomad-t210-a64/libNvda.Graphics.Interception.so" NOMAD_AGGRESSIVE_REPLAY_THREAD_CONTROL="Auto" NOMAD_ALLOW_UNSUPPORTED_CAPTURE="0" NOMAD_BLOCK_ON_FIRST_INCOMPATIBILITY="0" NOMAD_COLLECT_SHADER_DISASSEMBLY="1" NOMAD_COLLECT_SHADER_REFLECTION="1" NOMAD_COLLECT_SHADER_SOURCE="1" NOMAD_D3D11_SHADER_COMPILE_SYNCHRONOUS="0" NOMAD_D3D12_REPLAY_FENCE_BEHAVIOR="Default" NOMAD_DRIVER_INSTRUMENTATION="1" NOMAD_DXGI_SYNC_INTERVAL="0" NOMAD_FORCE_REPAINT="0" NOMAD_FRAME_CAPTURE_SINGLETHREADED="0" NOMAD_HWPM_COLLECTION="1" NOMAD_OPENGL_DELIMITER="SwapBuffers" NOMAD_REPORT_FORCE_FAILED_QUERY_INTERFACES="1" NOMAD_REPORT_UNKNOWN_OBJECTS="1" NOMAD_RTX_ACCELERATION_STRUCTURE_ALLOW_SHALLOW_GEOMETRY_COPY="0" NOMAD_RTX_ACCELERATION_STRUCTURE_COLLECT_TO_VIDMEM="0" NOMAD_RTX_ACCELERATION_STRUCTURE_COPY_GEOMETRY_MODE="Collect Full Builds And Refits" NOMAD_SASS_COLLECTION="0" NOMAD_SERIALIZATION="1" NOMAD_TARGET_HUD="1" NOMAD_UNWEAVE_THREADS="0" NOMAD_VULKAN_COHERENT_BUFFER_COLLECTION="1" NOMAD_VULKAN_FORCE_VALIDATION="0" NOMAD_VULKAN_HEAP_RESERVE_MB="0" NOMAD_VULKAN_SAFE_OBJECT_LOOKUP="Auto" NOMAD_VULKAN_SERIALIZATION_OBJECT_SET="Only Active" NOMAD_VULKAN_UNSAFE_PNEXT_INSPECTION="0" NSIGHT_DISABLE_OPENGL_SHADER_DEBUGGER_DRIVER_SUPPORT="0" NVIDIA_PROCESS_INJECTION_CRASH_REPORTING="1" NVTX_INJECTION64_PATH="Nvda.Graphics.Interception.dll" NV_TPS_LAUNCH_TOKEN="Frame Debugger" NV_TPS_LAUNCH_UUID="{c2a1ac93-0cec-4ff1-a96a-d7c39f2dc84c}" "/home/nvidia/tegra_multimedia_api/samples/backend/test.sh" 

$ ps -aux | grep test.sh  // Jetson 에서 확인 (제대로 동작)
nvidia   24916  0.0  0.0   6124  2880 ?        Ss   07:12   0:00 bash -c cd /home/nvidia/tegra_multimedia_api/samples/backend && DISPLAY=":0" ENABLE_VK_LAYER_NV_nomad="1" LD_PRELOAD="/tmp/var/linux-v4l_l4t-nomad-t210-a64/libNvda.Graphics.Interception.so" NOMAD_AGGRESSIVE_REPLAY_THREAD_CONTROL="Auto" NOMAD_ALLOW_UNSUPPORTED_CAPTURE="0" NOMAD_BLOCK_ON_FIRST_INCOMPATIBILITY="0" NOMAD_COLLECT_SHADER_DISASSEMBLY="1" NOMAD_COLLECT_SHADER_REFLECTION="1" NOMAD_COLLECT_SHADER_SOURCE="1" NOMAD_D3D11_SHADER_COMPILE_SYNCHRONOUS="0" NOMAD_D3D12_REPLAY_FENCE_BEHAVIOR="Default" NOMAD_DRIVER_INSTRUMENTATION="1" NOMAD_DXGI_SYNC_INTERVAL="0" NOMAD_FORCE_REPAINT="0" NOMAD_FRAME_CAPTURE_SINGLETHREADED="0" NOMAD_HWPM_COLLECTION="1" NOMAD_OPENGL_DELIMITER="SwapBuffers" NOMAD_REPORT_FORCE_FAILED_QUERY_INTERFACES="1" NOMAD_REPORT_UNKNOWN_OBJECTS="1" NOMAD_RTX_ACCELERATION_STRUCTURE_ALLOW_SHALLOW_GEOMETRY_COPY="0" NOMAD_RTX_ACCELERATION_STRUCTURE_COLLECT_TO_VIDMEM="0" NOMAD_RTX_ACCELERATION_STRUCTURE_COPY_GEOMETRY_MODE="Collect Full Builds And Refits" NOMAD_SASS_COLLECTION="0" NOMAD_SERIALIZATION="1" NOMAD_TARGET_HUD="1" NOMAD_UNWEAVE_THREADS="0" NOMAD_VULKAN_COHERENT_BUFFER_COLLECTION="1" NOMAD_VULKAN_FORCE_VALIDATION="0" NOMAD_VULKAN_HEAP_RESERVE_MB="0" NOMAD_VULKAN_SAFE_OBJECT_LOOKUP="Auto" NOMAD_VULKAN_SERIALIZATION_OBJECT_SET="Only Active" NOMAD_VULKAN_UNSAFE_PNEXT_INSPECTION="0" NSIGHT_DISABLE_OPENGL_SHADER_DEBUGGER_DRIVER_SUPPORT="0" NVIDIA_PROCESS_INJECTION_CRASH_REPORTING="1" NVTX_INJECTION64_PATH="Nvda.Graphics.Interception.dll" NV_TPS_LAUNCH_TOKEN="Frame Debugger" NV_TPS_LAUNCH_UUID="{56668efa-f1f6-4747-9b8f-5c7177c9b9cd}" "/home/nvidia/tegra_multimedia_api/samples/backend/test.sh" 

//처음 아래의 설정때문에 오동작되는 것으로 생각했는데, 이 문제가 아님 
NVTX_INJECTION64_PATH="Nvda.Graphics.Interception.dll"  


접속에러일 경우, Auto Connection을 NO로 하고, 상위와 같이 Target에서 설정확인
  https://devtalk.nvidia.com/default/topic/1047040/nsight-graphics/connection-error-detected-while-trying-to-launch-net-core-application/

NVTX_INJECTION64_PATH 확인
  https://docs.nvidia.com/cuda/profiler-users-guide/index.html


처음에는 상위와 같이 잘 동작하다가, 갑자기 아래와 같이 동작되지 않는 현상 발생

$ sudo /opt/nvidia/nsight-graphics-for-l4t/nsight-graphics-for-l4t-2018.7/host/linux-desktop-nomad-x64/nv-nsight-gfx  // 실행시 문제발생시, Log 기록  
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
[13341:13341:0704/154153.945344:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
[13351:13351:0704/154153.976574:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
Running Firefox as root in a regular user's session is not supported.  ($HOME is /home/jhlee which is owned by jhlee.)
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: iceweasel: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: seamonkey: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: mozilla: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: epiphany: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: konqueror: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: chromium-browser: not found
[13380:13380:0704/154154.152895:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: www-browser: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: links2: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: elinks: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: links: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: lynx: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: w3m: not found
xdg-open: no method available for opening 'https://developer.nvidia.com/nsight-graphics'
[13470:13470:0704/154209.229063:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
[13480:13480:0704/154209.252690:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
Running Firefox as root in a regular user's session is not supported.  ($HOME is /home/jhlee which is owned by jhlee.)
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: iceweasel: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: seamonkey: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: mozilla: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: epiphany: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: konqueror: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: chromium-browser: not found
[13508:13508:0704/154209.297859:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: www-browser: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: links2: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: elinks: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: links: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: lynx: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: w3m: not found
xdg-open: no method available for opening 'https://developer.nvidia.com/nsight-graphics'


현재 원인으로는 저장시  /home/jhlee/문서/NVIDIA Nsight Graphics 로 저장되어 한글때문에 문제가 발생하는 것으로 추측


  • 해결방법
help->Reset Application Data 로 완전 초기화 


4.5  NVIDIA SITE의 사용예제 

  • Range-Based GPU Profiling ( NVIDIA 사이트의 예제 가져옴  )
아래의 NVIDIA SIte에서 이용되어지는 화면을 가져옴


Tegra Graphics Debugger
  https://developer.nvidia.com/tegra-graphics-debugger
  https://docs.nvidia.com/tegra-graphics-debugger/2.4/index.html#developertools/mobile/tegra_graphics_debugger/tgd_setup_linux.htm%3FTocPath%3D_____4

Nsight Graphics Manual
  https://developer.nvidia.com/nsight-graphics

Nsight Graphics Manual
  https://docs.nvidia.com/nsight-graphics/UserGuide/index.html

5/27/2019

JetPack 4.2 설치

1. JetPack 4.2 설치 

기존에 사용하던 JetPack3.3 에서 JetPack 4.2으로 변경을 하기위해서 아래와 같이 Download한 후 설치를 진행한다.

JetPack 4.2 Download
  https://developer.nvidia.com/embedded/jetpack

JetPack 설치방법
  https://docs.nvidia.com/sdk-manager/download-run-sdkm/index.html
  https://docs.nvidia.com/jetson/jetpack/install-jetpack/index.html#how-to-install-jetpack


설치방법은 이전보다 더 간단하며, 설치하기도 너무 쉽다.
우선 Host PC에서 SDKManager 를 설치하고 실행하자

  • SDKManager 설치 
$ cd ~/Downloads   // 설치장소는 맘대로 
$ sudo dpck -i sdkmanager_0.9.11-3405_amd64.deb 
or 
$ sudo apt install ./sdkmanager-[version].[build#].deb  

$ sudo dpkg -l | grep sdkmanager   // 설치확인 
ii  sdkmanager                                      0.9.12-4180                                  amd64        NVIDIA SDK Manager


1.1  SDK Manager  실행 

처음 한번 실행된 장소 기준으로 Pakcage를 Download를 하며, 이 정보를 매번 기억을 하고 있다.
그러므로, 설치 중에 Package 설치 장소 및 NVIDIA SDK 장소는 확인하자.
SDKManager도 JetPack 3.3 처럼 Jetson TX2의 microUSB 와 HostPC와 연결된 상태에서 진행해야한다.

  • SDKManager 실행 

$ sdkmanager  // GUI 설치 진행 

  1. Developer Zone — developer.nvidia.com (site에서 가입)
  2. NVOnline — partners.nvidia.com (3rt Party를 위함)
  3. Offline — to install SDKs that were previously downloaded, .. see Offline Install

  • Offiline 진행시 Manual
  https://docs.nvidia.com/sdk-manager/offline-install/index.html


Developer Zone 설치를 진행하면, 아래와 같이 시작을 하며, 데이타 정보를 Google Analictics 로 수집을 하고 이를 다 동의하고 설치를 진행한다.
상위사이트에서 먼저 가입을 하고 진행을 해야한다.


본인의 Target Hardware 에 맞게 설정하고 설치 진행
  1. P2888 ( Jetson AGX Xavier)
  2. P3310 ( Jetson TX2)
  3. P3489 ( Jetson TX2i)
  4. P3448 ( Jetson Nano)


JETPACK 4.2의 Host에 설치되는 항목들을 살펴보면,
  1. NVIDIA Nsight Graphics:  아직 사용을 못해봄 
  2. NVIDIA Nsight Systems:  이전에는 C++만 지원을해서 빌드만 하고 Target 후 Debug까지 했으나, 현재 거의 사용 안함.   
일단 상위 Host Developer Tools이 Upgrade가 많이 되었으며, Graphics 의 기능도 궁금하다.



  • SDK Manager 설치환경
참고로 STEP2에서 라이센스 동의부분에
Download & INSTALL OPTIONS 부분으로 설치위치 변경가능


Target 인 Jetson에 설치될 항목들을 살펴보자.
Jetson OS 와 각 Jetson SDK 항목들이 존재한다.


Target은 우선 CuDA Upgrade 되었으며, TensorRT는 5.0 부터 Python이 지원가능하다고 한다.
나머지는 눈으로 직접 다 확인을 자세히 하자.


  • STEP 3

Jetson TX2 선택 후 Flash할 방법 선택
  1. AutoSetup : USB CDC 통신기반으로 Upgrade진행  ( 처음실패함)
  2. ManualSetup: Force Recovery Mode 로 진입하여 진행 

  • Force Revoery Mode 진입방법  
  1. Disconnect/Connect AC Power 
  2. Press Power Button 
  3. Press Revoery Button and Reset Button
  4. Release Reset Button  after 2 secs 
  5. Release Recovery Button 

RECOVERY과 REST BUTTON을 2초 간 누르고, RESET을 먼저 버튼에서 손을 놓는다.

  • AutoSetup
USB CDC로 SSH로 접속하여 자동으로 잡아서 진행을 하며,자동으로 Recovery Mode로 가면서  Writing을 하는 것 같다.
나의 경우는 처음에 실패를 해서, Manual Setup으로 진행


  • Manual Setup 
Force Revoery Mode 진입 Host에서 lsusb를 하면 Nvidia가 나오며 진행




둘다 진행을 하면 아래와 같이 진행됨
OS가 Flash가 되고, USB Mass Storage가 자동 Mount되고 나서 OS는 완전히 Flash 되고 Reboot


상위를 진행을 했다면, Jetson OS 부분은 진행이 되고, Ubuntu는 동작이 된다.
하지만, Jetson SDK Component를 추가로 더 설치를 진행해야한다.

1.2 Jetson SDK Component 설치 

Jetson에서 Ubuntu가 동작이 되면서 초기화를 진행을 해야 아래의 메세지를 진행이 가능하다.

  • Jetson SDK Component 를 설치 Message ( USB 문제사항)
아래의 "Install SDK components on your Jetson TX2"  메세지를 확인
아래의 메세지가 나오면 USB의 SSH가 동작되지 않으며, USB CDC가 잡히질 않고 진행이 되지 않는다. 이유는 Ubuntu의 기본 시스템을 설정하지 않아, 이를 설정해야 한다.

  • Jetson TX2의 Ubuntu 설정 
  1. Jetson TX2를 HDMI로 연결 (만약 화면이 잡힐지 않는다면, 재연결 및 마우스움직임) 
  2. 라이센스를 동의
  3. 언어/키보드/지역설정
  4. System Configuration 설정 ( Username 과 Password 설정 및 Jetson Name )
  5. USB 동작가능 ( Host에서 Mass Stroage 잡히는 것을 확인 )

  • HOST에서 USB CDC 확인 (옵션)
$ lsusb -t  // 상위 설정 후 확인 
.......
   |__ Port 6: Dev 40, If 4, Class=Mass Storage, Driver=usb-storage, 480M
    |__ Port 6: Dev 40, If 2, Class=Communications, Driver=cdc_acm, 480M
    |__ Port 6: Dev 40, If 0, Class=Communications, Driver=rndis_host, 480M
    |__ Port 6: Dev 40, If 5, Class=Communications, Driver=cdc_ether, 480M
    |__ Port 6: Dev 40, If 3, Class=CDC Data, Driver=cdc_acm, 480M
    |__ Port 6: Dev 40, If 1, Class=CDC Data, Driver=rndis_host, 480M
    |__ Port 6: Dev 40, If 6, Class=CDC Data, Driver=cdc_ether, 480M
    |__ Port 9: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 2: Dev 26, If 0, Class=Vendor Specific Class, Driver=usbfs, 12M
        |__ Port 3: Dev 32, If 0, Class=Mass Storage, Driver=usb-storage, 480M
.....
$ ifconfig

enp0s20f0u6 Link encap:Ethernet  HWaddr ce:a6:cc:57:fb:cf  
          inet addr:192.168.55.100  Bcast:192.168.55.255  Mask:255.255.255.0
          inet6 addr: fe80::2082:92ec:3a25:daf2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:294 errors:0 dropped:0 overruns:0 frame:0
          TX packets:233 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:48429 (48.4 KB)  TX bytes:54113 (54.1 KB)
..............






  • Target에 Jetson SDK Components 설치진행 

상위에서 Jetson의 설정이 끝났다면, 상위에서 SSH  ID/PW로 입력후  설치진행  
나의 경우는 ID/PW (jetsontx2/nvidia) 설정했지만, 다시 설치해서  nvidia/nvidia로 다 변경을 했다. (다른 소스와 호환성을 위해서 ) 


  • Jetson SDK Components 설치사항들 
  1. CUDA (CUDA Toolkit 10.0)
  2. AI  (cuDNN, TensorRT)
  3. Computer Vision (OpenCV , VisionWorks)
  4. Multimedia (Multimedia API)

이 부분이 설치가 되어야 실제 Jetson SDK Components가 설치가 되며,  추후 Jetson에서 Sample 예제도 확인가능하다.


상당한 시간이 걸리며, 설치후 아래의 Completed Successfully 확인



2. SDK Manager 로 설치후 확인 

상위 SDK Manager 설치환경을 확인하고, 각각의 디렉토리를 확인하자.

  • NVIDIA SDK 설치된 위치 

$ tree -L 2 ~/nvidia/nvidia_sdk/

/home/jhlee/nvidia/nvidia_sdk/     //Jetson TX2 OS 관련 BSP 
├── JetPack_4.2_Linux
│   └── documentations                 // Jetpack 4.2 문서 확인하자 
└── JetPack_4.2_Linux_P3310
    └── Linux_for_Tegra         // flash command 


  • SDKManger가 Download 한 Package들 
 $ tree -L 2 ~/Downloads/
/home/jhlee/Downloads/         // sdkmanager 설치 진행 한 곳  
├── nvidia
│   └── sdkm_downloads
└── sdkmanager_0.9.11-3405_amd64.deb

$ ls ~/Downloads/nvidia/sdkm_downloads/            // 설치된 Package 사항확인, Jetson SDK component 
Jetson_Linux_R32.1.0_aarch64.tbz2
NVIDIA_Nsight_Graphics_2018.7.L4T.25921359.deb
NsightSystems-linux-public-2019.3.2.12-510a942.deb
Tegra_Linux_Sample-Root-Filesystem_R32.1.0_aarch64.tbz2
Tegra_Multimedia_API_R32.1.0_aarch64.tbz2
cuda-repo-cross-aarch64-10-0-local-10.0.166_1.0-1_all.deb
cuda-repo-l4t-10-0-local-10.0.166_1.0-1_arm64.deb
cuda-repo-ubuntu1604-10-0-local-10.0.166-410.62_1.0-1_amd64.deb
devtools_docs.zip
graphsurgeon-tf_5.0.6-1+cuda10.0_arm64.deb
libcudnn7-dev_7.3.1.28-1+cuda10.0_arm64.deb
libcudnn7-doc_7.3.1.28-1+cuda10.0_arm64.deb
libcudnn7_7.3.1.28-1+cuda10.0_arm64.deb
libnvinfer-dev_5.0.6-1+cuda10.0_arm64.deb
libnvinfer-samples_5.0.6-1+cuda10.0_all.deb
libnvinfer5_5.0.6-1+cuda10.0_arm64.deb
libopencv-dev_3.3.1-2-g31ccdfe11_arm64.deb
libopencv-python_3.3.1-2-g31ccdfe11_arm64.deb
libopencv-samples_3.3.1-2-g31ccdfe11_arm64.deb
libopencv_3.3.1-2-g31ccdfe11_arm64.deb
libvisionworks-repo_1.6.0.500n_arm64.deb
libvisionworks-sfm-repo_0.90.4_arm64.deb
libvisionworks-tracking-repo_0.88.2_arm64.deb
python-libnvinfer-dev_5.0.6-1+cuda10.0_arm64.deb
python-libnvinfer_5.0.6-1+cuda10.0_arm64.deb
python3-libnvinfer-dev_5.0.6-1+cuda10.0_arm64.deb
python3-libnvinfer_5.0.6-1+cuda10.0_arm64.deb
sdkmanager_0.9.12-4180_amd64.deb
sdkml3_jetpack_l4t_42.json
tensorrt_5.0.6.3-1+cuda10.0_arm64.deb
uff-converter-tf_5.0.6-1+cuda10.0_arm64.deb

상위에서 arm64기반의 package를 중심으로 확인
  https://developer.nvidia.com/embedded/downloads

2.1  Host 와 Jetson TX2 의 설정 및 설치 

  • Host에서 Jetson TX2로 SSH 연결 
$ ssh -X jetsontx2@192.168.55.1  // SSH로 편하게 접속 

아래 에러 발생시, 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

$ ssh-keygen -R 192.168.55.1  // Key 재발행 후 재접속 


Ubuntu Package 설치전에, LAN을 연결한 후 Internet 연결 확인

  • Ubuntu 기본 Package Update & Upgrade 
jetsontx2@jetsontx2-desktop:~$ sudo apt update
jetsontx2@jetsontx2-desktop:~$ sudo apt upgrade 

시간이 무지 많이 오래 걸리므로, 다음에는 반드시 Backup Image을 만들고 작업을 해야겠다.

3. 다른 방법으로 Jetson TX2 Flash 방법 

Jetpack3.3 처럼 flash.sh command가 존재하며, 사실 sdkmanager도 내부적으로 동일하게 사용을 한다.

3.1 SDKManager Command  사용 

sdkmanager 사용법
  https://docs.nvidia.com/sdk-manager/sdkm-command-line-install/index.html

Jetson TX2 
$ ./sdkmanager --cli install --user john.doe@example.com --logintype devzone
--product Jetson --version 4.2 --targetos Linux --host 
--target P2888 --flash all  

상위방법은 별도로 시도를 해보지를 않았고,  무슨 장점이 있는 지 모르겠다.
일단 만약 시도를 한다면, 상위  target은 p3310으로 변경하고, 본인의 email을 넣어야 할 것 같다.
세부내용은 sdkmanager --help를 보자.

3.2  Flash Command 사용 

이전 Jetpack 3.3 과 동일하게 지원이 가능하며, 현재 OS와 기본 Package 설치되는 것으로 알고 있다. (Jetson SDK Components는 별도로 설치해야함)



  • Force Recovery Mode



  • Host PC에서 USB 연결확인 
$ lsusb  // Host 에서 USB 로 Jetson TX2 연결 후 Connection 확인
.....
Bus 001 Device 036: ID 0955:7020 NVidia Corp. 

만약 상위와 같이 잡히지 않는다면,  Force Recovery Mode로 진입 후 다시 확인

  • Flash 방법 ( Host 와 Jetson 과 USB 연결)
$ cd ~/nvidia/nvidia_sdk/JetPack_4.2_Linux_P3310/Linux_for_Tegra   // for Jetson TX2 
$ sudo ./flash.sh jetson-tx2 mmcblk0p1 // For Jetson TX2

상위대로 한다면, 기본설치만되고, NVIDIA에서 제공해주는 Jetson SDK components는 설치가 되지 않으므로 주의하자.

Jetson SDK components는 상위 nvidia/sdkm_downloads/  에 별도로 package로 존재

  • 기타 다른 보드 
- sudo ./flash.sh jetson-tx2i mmcblk0p1 // For Jetson TX2i
- sudo ./flash.sh jetson-xavier mmcblk0p1 // For Jetson Xavier
- sudo ./flash.sh jetson-nano-qspi-sd mmcblk0p1 // For Jetson Nano

상위로 진행 한 후 Jetson과 HDMI로 모니터로 연결하고, 관련 기본 설정을 해주자.


  • APP Partition Backup 후 이를 적용
 $ ls bootloader/system.img*   // 존재하는 system.img 확인 
bootloader/system.img  bootloader/system.img.raw      //  ( system.img 4G, system.img.raw 28G)

$ lsusb // 반드시 Jetson 연결 확인 후, Recovery Mode 변경 
Bus 001 Device 040: ID 0955:7020 NVidia Corp.

$ sudo ./flash.sh -r -k APP -G clone.img jetson-tx2 mmcblk0p1    // Jetson TX2의 APP Partition Image를 Backup  (clone.img) ( Filesystem)  

//다음 에러가 발생하면, Recovery Mode 변경 
[sudo] password for jhlee: 
###############################################################################
# L4T BSP Information:
# R32 (release), REVISION: 1.0, GCID: 14531094, BOARD: t186ref, EABI: aarch64, 
# DATE: Wed Mar 13 07:41:08 UTC 2019
###############################################################################
Error: probing the target board failed.
       Make sure the target board is connected through 
       USB port and is in recovery mode.

//제대로 실행된 경우 시간이 많이 걸림
###############################################################################
# L4T BSP Information:
# R32 (release), REVISION: 1.0, GCID: 14531094, BOARD: t186ref, EABI: aarch64, 
# DATE: Wed Mar 13 07:41:08 UTC 2019
###############################################################################
# Target Board Information:
# Name: jetson-tx2, Board Family: t186ref, SoC: Tegra 186, 
# OpMode: production, Boot Authentication: NS, 
###############################################################################
./tegraflash.py --chip 0x18 --applet "/home/jhlee/nvidia/nvidia_sdk/JetPack_4.2_Linux_P3310/Linux_for_Tegra/bootloader/mb1_recovery_prod.bin" --skipuid --cmd "dump eeprom boardinfo cvm.bin" 
Welcome to Tegra Flash
version 1.0.0
Type ? or help for help and q or quit to exit
Use ! to execute system commands
............. 

$ ls  // 새로 생성된 clone.img 확인 
clone.img  clone.img.raw

$ mkdir jhleeback

$ cp bootloader/system.img* jhleeback/                                      // 반드시 bootloader/system.img bakcup  

$ sudo cp clone.img.raw bootloader/system.img             //  bootloader/system.img 교체 

$ sudo ./flash.sh -r -k APP jetson-tx2 mmcblk0p1             // 적용된 이미지로 Flash



  • Target Filesystem 정보 확인
이전과 동일하게, Host PC에서 mount하여, Target의 Filesystem 정보확인이 가능하다.

$ cd jhleeback

$ mkdir test  //mount 디렉토리 

$ ls
system.img  system.img.raw  test

$ sudo mount -t ext4 -o loop ./system.img.raw ./test 

$ ls test/    // Target Filesystem 확인 
README.txt  bin  boot  dev  etc  home  lib  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var

$ ls ./test/usr/local/       // CUDA 설치확인, 미설치 
bin  etc  games  include  lib  man  sbin  share  src

$ ls ./test/usr/src/         // tensorrt 설치확인 , 미설치 (/usr/src/tensorrt/bin/   , /usr/src/tensorrt/samples/)
linux-headers-4.9.140-tegra-linux_x86_64  linux-headers-4.9.140-tegra-ubuntu18.04_aarch64  nvidia

$ sudo umount test   // 정보확인 후 반드시 unmount 

  • Jetson TX2에서 Partition 확인 
$ sudo gdisk -l /dev/mmcblk0
[sudo] password for nvidia: 
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/mmcblk0: 61071360 sectors, 29.1 GiB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 00000000-0000-0000-0000-000000000000
Partition table holds up to 31 entries
Main partition table begins at sector 2 and ends at sector 9
First usable sector is 4104, last usable sector is 61071327
Partitions will be aligned on 8-sector boundaries
Total free space is 1 sectors (512 bytes)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            4104        58724359   28.0 GiB    0700  APP              // UBUNTU FileSYSTEM 
   2        58724360        58732551   4.0 MiB     0700  mts-bootpack
   3        58732552        58740743   4.0 MiB     0700  mts-bootpack_b
   4        58740744        58741767   512.0 KiB   0700  cpu-bootloader
   5        58741768        58742791   512.0 KiB   0700  cpu-bootloader_b
   6        58742792        58743815   512.0 KiB   0700  bootloader-dtb
   7        58743816        58744839   512.0 KiB   0700  bootloader-dtb_b
   8        58744840        58750983   3.0 MiB     0700  secure-os
   9        58750984        58757127   3.0 MiB     0700  secure-os_b
  10        58757128        58761223   2.0 MiB     0700  eks
  11        58761224        58769415   4.0 MiB     0700  adsp-fw
  12        58769416        58777607   4.0 MiB     0700  adsp-fw_b
  13        58777608        58778815   604.0 KiB   0700  bpmp-fw
  14        58778816        58780023   604.0 KiB   0700  bpmp-fw_b
  15        58780024        58781023   500.0 KiB   0700  bpmp-fw-dtb
  16        58781024        58782023   500.0 KiB   0700  bpmp-fw-dtb_b
  17        58782024        58786119   2.0 MiB     0700  sce-fw
  18        58786120        58790215   2.0 MiB     0700  sce-fw_b
  19        58790216        58802503   6.0 MiB     0700  sc7
  20        58802504        58814791   6.0 MiB     0700  sc7_b
  21        58814792        58818887   2.0 MiB     0700  FBNAME
  22        58818888        59081031   128.0 MiB   0700  BMP
  23        59081032        59343175   128.0 MiB   0700  BMP_b
  24        59343176        59408711   32.0 MiB    0700  SOS
  25        59408712        59474247   32.0 MiB    0700  SOS_b
  26        59474248        59605319   64.0 MiB    0700  kernel
  27        59605320        59736391   64.0 MiB    0700  kernel_b
  28        59736392        59737415   512.0 KiB   0700  kernel-dtb
  29        59737416        59738439   512.0 KiB   0700  kernel-dtb_b
  30        59738440        60262727   256.0 MiB   0700  CAC
  31        60262728        61071326   394.8 MiB   0700  UDA


최근에 위키에 생김
  https://elinux.org/Jetson/TX2_Cloning

  • 세부사항 아래참고 및 Jetpack 3.3 부분참고
  https://devtalk.nvidia.com/default/topic/1050477/jetson-tx2/jetpack4-2-flashing-issues-and-how-to-resolve/
  https://ahyuo79.blogspot.com/2019/01/jetson-tx2.html