Jetpack 3.3->4.2로 Upgrade되면서 추가된 Nvidia의 개발툴들을 알아보고자 아래와 같이 간단히 정리를 한다.
Jetpack 4.2를 설치 후 Ubuntu에서 자동으로 찾거나 잡히면 다행이지만, 못찾는다면, 아래에서 설치되었는지 확인하고,이를 직접실행을 해주자.
(나의 경우는 거의 자동을 찾지를 못했기 때문에, NVIDIA의 Manual을 보고 다 찾아 실행을 함)
- JetPack 3.3 Nsight Tools 확인
https://ahyuo79.blogspot.com/2019/01/nsight-nvidia.html
나의 경우는 Nsight System은 쉽게 잡히는데, Nisght Graphic는 안잡혀서 아래와 같이 직접 찾아서 실행을 했다.
1.1 JetPack 4.2 Highlights 변경사항
변경사항들을 간단히 정리를 했으며, 읽기쉬운 영어라서 별도로 번역은 하지 않았다.
- Nsight Eclipse Edition
Offers an all-in-one integrated environment to edit, build, and debug CUDA applications
- NVIDIA Nsight Systems
Improved performance and responsiveness of the timeline
Added support for launching profiler as superuser (root)
- NVIDIA Nsight Graphics
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
만약 별도로 실행하고자 하면 , 아래 내용 참고하고 사용방법 역시 동일하니 관련부분은 참조
$ 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 (추후에 다 통합 될것 같다)
- Proejct 생성
- Android에서 Linux 변경
- Select Device for Profiling->Config Devices 선택
SSH 설정
- Sample Target Process 설정
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로 연결 ( 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개의 기능만 지원)
- Frame Debugger
- Frame Profiler
- Generate C++ Capture
- Additional options 확인
4.2 Activity->Frame Debugger Mode
실시간으로 동영상 Frame을 분석하는 기능으로 Breaking Point와 함께 영상의 Frame을 Debuging이 가능
Frame Debugger 선택 후 Launch 시작
- Frame Debugger->Caputre for Live Analysis 선택
(HDMI로 보면 동일한 화면으로 정지)
- Capture for Live Analysis->Profile Frame->Range Profiler View 제공
기능 좀 불안정하며, 완벽하게 작동은 되지 않는 것 같으며, 아래의 NVIDIA Site에서 사용법을 제대로 익히자.
4.3 Activity->Frame profiler Mode
실시간으로 그래프를 확인가능
- Capture for Live Analysis 선택
Range Profiler VIew-> Metrics 및 선택을 해서 각 값들을 확인 가능한데, 솔직히 무슨의미 인지 잘모르기에, 이부분은 추측으로만 파악하고 기능을 확인해야겠다.
4.4 Activity->Generate C++ Capture Mode
쉽게 Reverse Engineering 기능을 제공해주는 것 같은데, 에러 없이 동작은 되지만, 완벽히는 동작되는 것 같지 않다.
- 상위 Tap Generate C++ 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 실행
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 후 실행
아래의 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 로 저장되어 한글때문에 문제가 발생하는 것으로 추측
- 해결방법
4.5 NVIDIA SITE의 사용예제
- Range-Based GPU Profiling ( NVIDIA 사이트의 예제 가져옴 )
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