やりたいこと
- AWSの仮想マシンでJETSON nanoと同じ環境を作る
- Dockerを仮想マシンでBuildする
- 仮想マシンからコンテナをローカルマシンにコピーする
- Jetson nano 実機でコンテナを動かす
より快適な方法
前の記事よりも快適な方法をQiitaで発見しました。
これは自分用のメモです。
こちらが詳しいので、私は補足事項だけ。
64bit ARM チップを積んだ Edge device 用に Docker image をビルドする
仮想マシンを起動
AWSでa1.4xlargeのマシン(課金されます)を選択して起動。
Ubuntu16.04とします。
DockerCEをインストール
こんな感じで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を用意する。
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は従来通り。
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の公開鍵
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 のビルドはミスしているようだ。