Edited at

(検証不足)AWSの仮想マシンでJETSON nanoのDockerコンテナを快適にBuildしたい(2回目)


やりたいこと


  • AWSの仮想マシンでJETSON nanoと同じ環境を作る

  • Dockerを仮想マシンでBuildする

  • 仮想マシンからコンテナをローカルマシンにコピーする

  • Jetson nano 実機でコンテナを動かす

ローカルとクラウドの繋がりはこのように

仮想マシンとJETSON連携.png


より快適な方法

前の記事よりも快適な方法をQiitaで発見しました。

これは自分用のメモです。

こちらが詳しいので、私は補足事項だけ。

64bit ARM チップを積んだ Edge device 用に Docker image をビルドする


仮想マシンを起動

AWSでa1.4xlargeのマシン(課金されます)を選択して起動。

Ubuntu16.04とします。


DockerCEをインストール

http://docs.docker.jp/engine/installation/linux/docker-ce/ubuntu.html

こんな感じでstableなDockerCEを入れる

sudo apt-get update

sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common

curl -sSL https://get.docker.com/ | sh

sudo usermod -aG docker ubuntu

sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

sudo apt update

sudo docker run hello-world

正常に動くことを確認しました。

以上で準備完了。

Dockerfileを用意する。


Dockerfile

FROM multiarch/ubuntu-core:arm64-xenial

RUN apt-get update && \
apt-get install -y vim


buildして実行する。

sudo docker build -t arm64-xenial-vim -f Dockerfile .

sudo docker run -it --rm arm64-xenial-vim:latest bash

dockerに入ったら、以下のコマンドで確認

uname -m

file /bin/bash


重量級のBuildを試してみる(本日2回目)

問題なさそうなので、2019/5にビルドで大変苦労した、産総研のOpenVSRAMをDockerでBuildします。

※無課金のマシンを使うと、CPUコアを複数使ったBuild(make -j4)で止まってしまったので、有償のxlargeマシンを使っています

※さらに、QEMUではなく仮想マシンそのものがARMなので、もう少し早いはず

git clone https://github.com/xdspacelab/openvslam

nano Dockerfile.desktop

同梱のDockerfile.desktopを編集して、仮想マシンを追加します。

追加したのは先頭のみで、ubuntu:18:04は従来通り。


Dockerfile.desktop

FROM multiarch/ubuntu-core:arm64-xenial

FROM ubuntu:18.04
ENV DEBIAN_FRONTEND noninteractive
<続く>

build実行します。

この時、make -j4でのbuildがあちらこちらに記載されていた為、Jetson nanoでは12%くらいまでの進捗で固まってしまい、マシンを落とすこととなりました。

十分な数のコアとメモリを用意します。(仮想マシンはa1.4xlarge)

sudo docker build -t openvslam-desktop -f Dockerfile.desktop . --build-arg NUM_THREADS=4

名前登録したはずなんだけど、sudoつけないとdocker動かないのが謎。

ビルドしてみると30分くらいで終わりました。

(単純に仮想マシンのスペックの差?前回はt2.xlargeを使用)

それでも圧倒的な速さと、全くトラブルを起こさずに実行できていました。

JETSON nanoに移動させて、動くかどうかの確認をしなければ。

Amazonからどんな額の請求書が送られてくるが、震えながら待ちます。


出来上がったファイルをsftpで取り出し

色々考えてあれこれやってたのですが、いつも使っているCyberduckに設定して動かしました。

超簡単でした。


sftpを選択

仮想マシンのsshアクセスのパス

ユーザー名

sshの公開鍵


設定はこれだけで、仮想マシンの中身が見れます。

スクリーンショット 2019-07-21 13.53.13.png


Dockerのコンテナ?イメージ?をファイルにして取り出す

docker save IMAGE_ID > IMAGE_ID.tar

で、イメージを保存。CyberDuckでローカルに保存。


JETSON nanoとローカル接続

いちいちIPを確認しながら繋ぐのが面倒になってきたので、mDNSとかで固定してアクセスしたい。


car /etc/hostname


でhostnameを確認。

これに接続。


ssh name@hostname.local

docker load < IMAGE_ID.tar


Dockerのsudoを打つのが面倒なので、設定を入れてみる

sudo groupadd docker

sudo gpasswd -a $USER docker

sudo systemctl restart docker

exit

再度ログインして実行する。

docker run -it IMAGE_ID

docker attach xxxxx

などして、コンテナを扱う。


できるようになったこと


  • クラウドでDockerイメージをビルドする

  • クラウドからDockerイメージをローカルにダウンロード

  • ローカルPCから基板にイメージを転送

  • 基板にログインしてDockerイメージを展開

  • 基板でDockerコンテナを実行する

まだ、実家の確認が不十分。

open cv のビルドはミスしているようだ。