Jetson NanoでDockerを試してみる


Jetson の Jetpack(ver 4.4) でサポートされているDocker Container を使ってみます。

Jetpack のセットアップはこのページをご参照ください。4.2.1でやってますが手順は同じです。

で、Docker環境で何をためすかというと、NVIDIAが提供してくれているGPUベンチマーク用のN-body Simulation(N体シミュレーション)です。CUDAのサンプルフォルダーに入ってます。

 

Jetson NanoにVNCリモートデスクトップ環境で接続してDocker Containerを使ってみます。

ちなみに、Windowsのリモートデスクトップ環境では動作しませんでした。


以下はNVIDIA Container Runtime on Jetsonの抄訳です。

が、そのままでは実行できませんでしたので若干アレンジしています(多分Jetson固有のファイル構造の問題)。

 

NVIDIA Container Runtime with Docker integration (via the nvidia-docker2 packages) is included as part of NVIDIA JetPack.

(nvidia-docker2パッケージを介して)Docker統合を備えたNVIDIA Container Runtimeは、NVIDIAJetPackの一部として含まれています。

You can check that the NVIDIA Container Runtime is installed by running the following commands:

次のコマンドを実行して、NVIDIA ContainerRuntimeがインストールされていることを確認できます。

 

Users have access to an L4T base container image from NGC for Jetson available here.

ユーザーは、NGC forJetsonのL4T(Linux 4 Tegra)ベースコンテナイメージにアクセスできます。

Users can extend this base image to build their own containers for use on Jetson devices. In this example, we will run a simple N-body simulation using the CUDA nbody sample. Since this sample requires access to the X server, an additional step is required as shown below before running the container.

ユーザーは、このベースイメージを拡張して、Jetsonデバイスで使用するための独自のコンテナーを構築できます。 この例では、CUDAnbodyサンプルを使用して簡単なN体シミュレーションを実行します。 このサンプルではXサーバーにアクセスする必要があるため、コンテナーを実行する前に、以下に示す追加の手順が必要です。

Allow containers to communicate with Xorg

コンテナがXorg(X Window Server)と通信できるようにします

Containerを起動。

sudo docker run --runtime nvidia --network host -it -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix nvcr.io/nvidia/l4t-base:r32.2.1

コンパイラをインストールします。Container内で次のコマンドを実行。

hostにあるサンプルソースをContainerの/tmpにコピーします。

別のターミナルを開いて、ContainerのIDを調べておきます。

ContainerIDは大事なので、できれば控えておいたほうがいいです。

コピーします(CONTAINER_IDは実際のIDに置き換え)。

Containerのターミナルに戻ってコピー先のフォルダに移動します。

コンパイルして、
make
起動します。
./nbody

 

ちなみに、bodiesのデフォルトは1024、設定する場合はnbody -numbodies=N、Nは256の倍数、例えばnbody -numbodies=8192

シミュレーションの画像はよりにぎやかになります(目的はソコじゃないですが….)。

 

jtop(jetson-stats)でGPUの稼働をモニターしてみます(黒矢印のところ)。

 

 

Building CUDA in Containers on Jetson(JetsonのコンテナでCUDAを構築する)

Docker gives you the ability to build containers using the “docker build” command. Let’s start with an example of how to do that on your Jetson device:

Dockerを使用すると、「dockerbuild」コマンドを使用してコンテナーをビルドできます。 Jetsonデバイスでそれを行う方法の例から始めましょう:

以下略

 

 


Container終了

(Ctrl + C)

exit


再起動

Containerは削除しなければ再起動できます。

控えておいたContainerIDを使います。

上記の例にならえば、

cd /tmp/samples/5_Simulations/nbody

./nbody

でN-Body Simulation を再実行できます。


Docker イメージの作成

イメージ名は適当につけます。

保存場所は以下で確認

Ubuntuの場合は、たいがい/var/lib/docker

イメージ確認

イメージからDockerを起動

sudo docker run --runtime nvidia --network host -it -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix <イメージ名>:TAG

 


Containerの削除

イメージの削除

IMAGE_IDの確認

削除

 


Appendix

NVIDIA Docker って今どうなってるの? (19.11版)

NVIDIA Docker って今どうなってるの? (20.09 版)

 


Appendix2

Jetson NanoにDocker Compose をインストール

 


Next

せっかくのJetsonなので、NGC(NVIDIA  GPU  CLOUD)のDocker Image をあれこれ試してみます(NanoのGPUはMaxwellアーキテクチャなので試せる範囲は限られる?)。

 


 

Be the first to comment

Leave a Reply

Your email address will not be published.


*