Jetson NX Xavier NGC 개발환경
엔비디아는 Jetson 의 SDK 개발환경을 NGC 를 통해 docker container 형태로 배포하고 있다. 배포되고 있는 container 에는 Linux for Tegra, CUDA, TensorRT, deepstream 등 엔비디아에서 제공하는 SDK 을 포함하고 있다. 이 포스팅은 Jetson NX Xavier 에서 NGC 를 통해 docker container 를 받고 실행하는 기본적인 예제를 다른다.
Jetson NX Xavier (또는 Nano) production module 의 경우, 내부 eMMC 공간 (16G) 가 부족하기 때문에, 외부 SDCARD 를 이용해서, docker container 개발환경을 만들어보자.
STEP1. Xavier NX 에서 sdcard 초기화하기
테스트 환경
- NVIDIA Xavier NX devkit (16G emmc module) + 64G SDcard
- Jetpack 4.6 (L4T R32.6.1)
우선, L4T R32.6.1 가 설치된 환경에서 부터 시작한다. 내부 eMMC 공간 (16G) 가 부족하기 때문에, 외부 SDCARD 를 이용해서, docker container 개발환경을 만들어보자.
SDCard 초기화 및 마운트
NVIDIA Xavier NX devkit 에서는 SDCard 는 /dev/mmcblk1 에 할당된다. 터미널에서 fdisk 로 기존 파티션을 모두 지우고, 새로운 Linux filesystem 을 위한 파티션을 생성한다.
nvidia@linux:~$ sudo fdisk /dev/mmcblk1
Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): d
Selected partition 1
Partition 1 has been deleted.
Command (m for help): n
Partition number (1-128, default 1):
First sector (34-125173726, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-125173726, default 125173726):
Created a new partition 1 of type 'Linux filesystem' and of size 59.7 GiB.
Command (m for help): w
The partition table has been altered.
Syncing disks.
터미널에서 mkfs 명령어로 새로운 파티션을 ext4 로 초기화한다.
$ sudo umount /dev/mmcblk1p1
$ sudo mkfs.ext4 /dev/mmcblk1p1
터미널에서 blkid 명령어로 파티션의 UUID 를 확인한다.
$ sudo blkid /dev/mmcblk1p1
$ /dev/mmcblk1p1: UUID="b1233e55-5dca-4c34-ac3f-b10df9549904" TYPE="ext4" PARTUUID="8b8a6de6-b40d-0647-8579-7c63c81e909a"
터미널에서 mkdir 명령어로 SDCard 를 mount 시킬 디렉토리를 생성한다.
$ sudo mkdir /mnt/sdcard
터미널에서 blkid 명령어로 확인한 UUID 을 /etc/fstab 에 추가한다.
$ cat /etc/fstab
# /etc/fstab: static file system information.
#
# These are the filesystems that are always mounted on boot, you can
# override any of these by copying the appropriate line from this file into
# /etc/fstab and tweaking it as you see fit. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/root / ext4 defaults 0 1
UUID="b1233e55-5dca-4c34-ac3f-b10df9549904" /mnt/sdcard ext4 defaults 0 0
UUID 을 /etc/fstab 에 추가하고 Jetson 을 재부팅한다. 부팅 후에 df 명령어로 sdcard 가 정상적으로 /mnt/sdcard 에 mount 되었는지 확인한다.
nvidia@linux:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mmcblk0p1 14384136 6341840 7291912 47% /
none 3591152 0 3591152 0% /dev
tmpfs 3975840 40 3975800 1% /dev/shm
tmpfs 3975840 21280 3954560 1% /run
tmpfs 5120 4 5116 1% /run/lock
tmpfs 3975840 0 3975840 0% /sys/fs/cgroup
/dev/mmcblk1p1 61340456 53272 58141512 1% /mnt/sdcard
tmpfs 795168 128 795040 1% /run/user/1000
STEP2. Xavier NX 에 nvidia-container 설치하기
NVIDIA Xavier NX 에서 Docker 로 개발환경을 구성하기 때문에, Host 에 Jetpack 을 모두 설치할 필요는 없다. 터미널에서 agt-get 명령어로 NGC docker 실행을 위한 nvidia-container 만 설치한다.
$ sudo apt-get install nvidia-container
Docker 파일들은 내부 eMMC 가 아닌 외부 sdcard 에 저장되기 위해서, 다음과 같이 daemon.json 에 graph 를 추가한다.
$ sudo vim /etc/docker/daemon.json
{
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
},
"graph": "/mnt/sdcard"
}
daemon.json 를 수정했기 때문에, docker service 를 재시작하거나 Jetson NX 를 재부팅 한다.
$ sudo systemctl restart docker.service
$ sudo systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2022-08-25 01:46:47 UTC; 34s ago
Docs: https://docs.docker.com
Main PID: 13276 (dockerd)
Tasks: 13
STEP3. NGC 컨테이너 예제 실행
NGC 컨테이너 중에 deepstream-l4t 를 다운받고 실행해본다. 터미널에서 docker 명령어로 deepstream-l4t:6.0-samples 를 다운로드 한다.
$ sudo docker pull nvcr.io/nvidia/deepstream-l4t:6.0-samples
다운로드한 deepstream-l4t 컨테이너는 아래와 같이 실행할 수 있다.
$ xhost +
$ sudo docker run -it --rm --net=host --runtime nvidia -e DISPLAY=$DISPLAY -w /opt/nvidia/deepstream/deepstream-6.0 -v /tmp/.X11-unix/:/tmp/.X11-unix nvcr.io/nvidia/deepstream-l4t:6.0-samples
참고자료
NVIDIA NGC 공식 카탈로그를 참고한다.
https://catalog.ngc.nvidia.com/orgs/nvidia/containers/deepstream-l4t
'NVIDIA Jeston > Jetson BSP' 카테고리의 다른 글
메시지브로커를 통한 jetson-stats 퍼블리싱 (0) | 2022.12.03 |
---|---|
Jetson Reverse SSH 터널링 (0) | 2022.12.03 |
젯슨 부팅 과정에서 Power Model 고정하기 (1) | 2022.09.11 |
Jetson 로깅 시스템, Rsyslogd (0) | 2022.08.17 |
Jetson Nano 이미지 백업과 재사용 (0) | 2022.07.22 |
[Jetson] nvme ssd 를 루트파일시스템으로 사용하기 (0) | 2022.07.09 |
[Jetson] JTOP 시스템 프로파일러 도구 (0) | 2022.07.03 |
[Jetson] Xavier NX 방열팬 제어 (0) | 2022.06.30 |