본문 바로가기
NVIDIA Jeston/Jetson BSP

젯슨 NX Xavier NGC 컨테이너 개발환경

by makepluscode 2022. 8. 24.
반응형

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

 

DeepStream-l4t | NVIDIA NGC

DeepStream SDK delivers a complete streaming analytics toolkit for real-time AI based video and image understanding and multi-sensor processing. This container is for NVIDIA Jetson platform.

catalog.ngc.nvidia.com

반응형