Jetson Nanoを購入したので、セットアップ方法をメモしておく。 購入から、Nvidia Docker上でCUDAを動かすところまで行う。 セットアップ後、ストレージは十数GB消費されていたので、SDカードは32GB以上のものを使用するといい。
セットアップ方法の種類
セットアップには以下の3種類がある。
WindowsPCを使用する場合は1番のみしかできないため、この方法で行った。
1. 配布しているイメージをSDカードにフラッシュする
書き込み方法
配布イメージ2:学習用のイメージ
2. NVIDIA SDK Managerを使用する
3. 独自にRootFSを用意してフラッシュする
初期セットアップ
イメージをSDカードにフラッシュし終わったら、Jetson Nanoに挿入し、モニター、キーボード、マウスを接続し、電源をつけて画面にしたがってユーザー名などの設定をおこなう。
完了したら、再起動を行う。
アップデート
Aptパッケージのアップデートを行う。 デスクトップ上でCtrl + Shift + T でターミナルを開き、以下を実行する。
$ sudo apt update $ sudo apt upgrade
Docker groupへの追加
sudo をつけなくてもdockerコマンドが使用できるよう、グループに追加する。
※ 該当ユーザーでログインしていること。
※ Dockerを事前にインストールしておくこと。(Jetpack SDKにはすでにインストールされているため必要なし。)
$ sudo gpasswd -a $USER docker
DockerイメージのPull
NvidiaはJetson用にDocker イメージを配布している。これを使用するとセットアップが楽。 以下にアクセスし、ユーザー登録し、欲しいコンテナを探す。TensorFlowインストール済のものなど様々ある。
今回はDeeplearning用に一通り揃っているイメージを使用する。 以下コマンドでイメージをPullする。また、イメージがPullできていることを確認する。
$ docker pull nvcr.io/nvidia/l4t-ml:r32.4.4-py3
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE nvcr.io/nvidia/l4t-ml r32.4.4-py3 7ef384cfc62b 2 months ago 4.41GB
Docker コンテナの起動&確認
コンテナを起動し、サンプルプログラムを実行しGPUを認識していることを確認する。NVIDIA Tegra X1が認識されていればOK。
$ docker run -it --rm --privileged --runtime nvidia --network host nvcr.io/nvidia/l4t-ml:r32.4.4-py3 bash
# cd /usr/local/cuda/samples/bin/aarch64/linux/release # ./deviceQuery ./deviceQuery Starting... CUDA Device Query (Runtime API) version (CUDART static linking) Detected 1 CUDA Capable device(s) Device 0: "NVIDIA Tegra X1" CUDA Driver Version / Runtime Version 10.2 / 10.2 CUDA Capability Major/Minor version number: 5.3 Total amount of global memory: 3964 MBytes (4156796928 bytes) ( 1) Multiprocessors, (128) CUDA Cores/MP: 128 CUDA Cores GPU Max Clock rate: 922 MHz (0.92 GHz) Memory Clock rate: 13 Mhz Memory Bus Width: 64-bit L2 Cache Size: 262144 bytes Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096) Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 49152 bytes Total number of registers available per block: 32768 Warp size: 32 Maximum number of threads per multiprocessor: 2048 Maximum number of threads per block: 1024 Max dimension size of a thread block (x,y,z): (1024, 1024, 64) Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535) Maximum memory pitch: 2147483647 bytes Texture alignment: 512 bytes Concurrent copy and kernel execution: Yes with 1 copy engine(s) Run time limit on kernels: Yes Integrated GPU sharing Host Memory: Yes Support host page-locked memory mapping: Yes Alignment requirement for Surfaces: Yes Device has ECC support: Disabled Device supports Unified Addressing (UVA): Yes Device supports Compute Preemption: No Supports Cooperative Kernel Launch: No Supports MultiDevice Co-op Kernel Launch: No Device PCI Domain ID / Bus ID / location ID: 0 / 0 / 0 Compute Mode: < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) > deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 10.2, CUDA Runtime Version = 10.2, NumDevs = 1 Result = PASS