Introduction
젯슨 나노가 출시된지 너무나 오랜 시간이 지났고, 이제는 단종에 이르러 Jetson Orin Nano를 사용해야 하는 상황이지만, 너무나 매력적인 가격에 이를 계속 사용하고자 하는 사람이 많습니다. 저도 그 중 하나로서, Jetson Nano를 23년 현재에도 유효하게 사용할 수 있도록 하기 위한 몇 가지 작업 내용을 공유하고자 합니다.
Deprecated Bionic Beaver.
Jetson Nano의 하드웨어를 활용하기 위한 드라이버 키트인 JetPack은 우분투 18.04를 기반으로 한 4.6.1 을 마지막으로 더이상 릴리즈되고 있지 않습니다. 따라서 우리는 yolov8 등의 딥러닝 패키지를 사용하기 위한 사전 작업을 몇 가지 해야 합니다. 조금 더 원활한 사용을 위해 젯슨 나노에 우분투 20.04를 설치하고 부족한 패키지를 끌어오거나, 별도로 컴파일해야 합니다. 여기에서는 이미 존재하는 프로젝트를 확인하고, 부족하거나 놓칠 수 있는 부분을 보완하는 식으로 포스팅 진행하도록 하겠습니다.
Prerequisites
- 64GB 이상의 microsd 카드(A1 규격을 충족해야 I/O 성능이 확보되어 os 사용에 문제가 없습니다.)
Installation
- https://github.com/Qengineering/Jetson-Nano-Ubuntu-20-image 으로 이동하셔서 분할압축된 ubuntu 20.04를 다운받아 Balena Etcher로 설치해줍니다.
GitHub - Qengineering/Jetson-Nano-Ubuntu-20-image: Jetson Nano with Ubuntu 20.04 image
Jetson Nano with Ubuntu 20.04 image. Contribute to Qengineering/Jetson-Nano-Ubuntu-20-image development by creating an account on GitHub.
github.com
2. 성공적으로 부팅이 완료되었다면, 터미널에서 다음의 명령어를 입력해 TensorRT를 설치합니다.
curl -O https://github.com/Qengineering/Jetson-Nano-Ubuntu-20-image/raw/main/tensorrt-8.0.1.6-cp38-none-linux_aarch64.whl
pip3 install tensorrt-8.0.1.6-cp38-none-linux_aarch64.whl
3. 기본 파티션은 약 30GB정도로 잡혀있습니다. GParted를 활용해 가용 공간을 늘려 줍니다.
4. python3 && import torch 명령 실행 시 LD_PRELOAD 관련 에러가 발생할 수 있습니다. 환경변수를 지정해주어 해당 문제를 해결합니다.
nano ~/.bashrc
export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libgomp.so.1 # 맨 아래줄에 붙여넣기
source ~/.bashrc
5. (CSI 카메라 사용하는 경우) 이상하게 다음의 gstreamer 명령어를 사용해서 터미널에서 CSI 카메라를 켜면 정상 동작하다가, 파이썬 OpenCV를 통해서 CSI 카메라를 쓰려면 작동하지 않고, C++ OpenCV를 쓰면 또 동작하는 희한한 상황을 목도하실 수 있습니다.
gst-launch-1.0 nvarguscamerasrc ! nvoverlaysink # 작동함
import cv2
cap = cv2.VideoCapture('nvarguscamerasrc ! nvoverlaysink') # 작동안함
이 경우, opencv-python 에 gstreamer가 컴파일 되지 않았을 것입니다. 다음의 명령어를 통해 gstreamer가 컴파일 되었는지 확인하세요.
import cv2
print(cv2.getBuildInformation())
이 때, 다음과 같이 뜬다면 OpenCV를 별도로 컴파일 하면서 gstreamer를 포함해야 합니다.
GStreamer: NO
libv4l/libv4l2: NO
v4l/v4l2: linux/videodev2.h
OpenCV에 gstreamer를 포함하여 빌드하는 방법에 대해서는 다음을 참조하시면 되며, 빌드 과정에서 사용할 쉘 스크립트 파일에 -WITH-GSTREAMER 옵션이 포함되어 있다면 정상적으로 활용할 수 있습니다.
GitHub - Qengineering/Install-OpenCV-Jetson-Nano: OpenCV installation script with CUDA and cuDNN support
OpenCV installation script with CUDA and cuDNN support - GitHub - Qengineering/Install-OpenCV-Jetson-Nano: OpenCV installation script with CUDA and cuDNN support
github.com
Done!
사실 이런 정보를 모르고서 yolov8을 돌리려 한다면 우선 파이썬 버전에서 막혀버리는 막막한 상황을 겪게 됩니다. 저는 이 글을 남기기 싫을 정도로 수 일 간의 삽질 끝에 tensorrt, pytorch, torchvision, opencv-python을 직접 빌드했으나, 이런 삽질을 하고 보니 누군가 멋지게 만들어뒀더군요. 너무나 허탈했습니다.. 그러나 누군가 만들었다 해도 이게 공식 릴리즈가 아니다 보니 아쉬운 점이 있습니다. 제 삽질의 경험 끝에 얻어낸 tensorrt, csi 카메라 부분의 정보가 작은 도움이 되었으면 좋겠습니다.
긴 글 읽어주셔서 감사합니다. ❤️와 광고 클릭으로 고마움을 간단히 표현할 수 있습니다.
개발 환경(Desktop) | Ryzen 5900X, RTX3080
개발 환경(Laptop) | M1 Macbook Air, M2 Macbook Pro
AI, IoT 제품 개발 및 기타 문의 | dokixote@wklabs.io