さあ今回はJetsonで環境構築に苦しんでいる皆さんに救いの手を差し伸べるべく
JetsonをDockerで環境構築していきたいと思います!!
皆さんが苦しんでるとこ、分かりますよ
こんな感じですよね(笑) 僕はこれで一週間悩んだりしました。
『俺はこんなくだらないことを悩まないぜ』という方は、そっとこの投稿ページを閉じてください。
筆者と一緒で『こんなことで苦しみたくない。。』と思っている方にとっては
大きなヒントが得られるように書いていきたいと思いますので、一緒にやっていきましょう!
では、早速やっていこう!
Contents
dockerのインストール(Ubuntu用)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<Command> # aptを更新 $ sudo apt update $ sudo apt upgrade # dockerをインストール $ sudo apt-get install docker.io #Dockerグループにユーザー権限付与(sudoなしでdockerコマンド有効) $ sudo systemctl restart docker $ sudo gpasswd -a $USER docker # dockerデーモンを再起動 $ sudo service docker restart # docker engineのアクティブ状況を確認 $ sudo systemctl status docker # exitしターミナルを再起動すると反映される(反映されない場合はPC再起動$ reboot) $ exit $ sudo reboot #インストールしたdockerのバージョンを確認(docker version19.03以降であることを確認) $ docker --version #sudo権限なしでエラーが出ないか確認 $ docker images |
※ ” $ docker images ” でWARNINGが出る場合
WARNING: Error loading config file: /home/user/.docker/config.json: stat/home/user/.docker/config.json: permission denied
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/json: dial unix /var/run/docker.sock: connect: permission denied
👇下記のコードを打ってみる(<username>:自分のユーザーネームを代入)
1 2 |
<Command> $ sudo chown -R <username> ~/.docker |
docker-composeのインストール(Ubuntu用)
👇docker-composeの最新のバージョンを確認(メモしてください)
https://github.com/docker/compose/releases
下記のコマンドの 1.29.2 の部分は先程確認したバージョンに書き換えてください
1 2 3 4 5 6 |
<Command> [~] $ sudo apt install curl [~] $ sudo curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose [~] $ sudo chmod +x /usr/local/bin/docker-compose [~] $ docker-compose --version docker-compose version 1.29.2, build c7bdf9e |
⚠上記のやり方でうまく行かない方はpipを使って入れます。下記を実行してください。
1 2 3 4 5 6 |
[~] $ sudo apt install python3-pip -y [~] $ sudo apt install -y build-essential libssl-dev libffi-dev python3-dev [~] $ sudo pip3 install pip --upgrade [~] $ sudo pip3 install docker-compose [~] $ docker-compose --version docker-compose version 1.29.2, build unknown |
Nvidia NGCからDocker imageをPull🐳
NVIDIA NGC|CATALOGへ行き、自身の環境に合うパッケージを探してDocker Imageをpullしよう。
Nvidia NGC:Nvidiaが提供しているDocker imageのオープンソースソフトライブラリ
今回はJetpack4.4.1をインストールしたJetsonに、機械学習ライブラリであるtensorflowを実行できる環境を想定してチョイスしました。
この一通りのやり方を覚えてしまえば、Pytorchなどの別のオープンソースも豊富に提供されているので、簡単に環境構築することができます。
👇検索欄に”tensorflow“と入力し、”NVIDIA L4T TensorFlow “(L4T: Jetsonに対応)を選択
👇tensorflowは今回は2系を使いたいので、”r32.4.4-tf2.3-py3“をPull Tagでコピー
👇コマンドで実行し、Docker imageをpullします
1 2 |
<Command> $ docker pull nvcr.io/nvidia/l4t-tensorflow:r32.4.4-tf2.3-py3 |
✔️Dockerfileの作成
先ほどpullしてきたコンテナパッケージをベースにDockerfileを作成していきます🐳
追加でインストールしているライブラリはあくまで例になります、皆さん自分がやりたいことに合わせて必要なライブラリ、パッケージを入れて下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<Dockerfile> # JetPack4.4.1に対応したDocker imageをNVIDIA NGCからPull FROM nvcr.io/nvidia/l4t-tensorflow:r32.4.4-tf2.3-py3 ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get -y upgrade && \ apt-get install -y --no-install-recommends RUN apt-get install -y cheese v4l-utils pkg-config && \ apt-get install -y libgtk2.0-dev libsm6 libxext6 libxrender1 libglib2.0-0 RUN apt-get install -y python3-opencv # machine learning & Django library install RUN python3 -m pip install --upgrade pip RUN pip3 install sklearn pandas pillow matplotlib && \ pip3 install django django-bootstrap4 django-mathfilters # Docker環境内でモニター表示させるのに必要なXserverをinstall RUN apt-get install -y xserver-xephyr \ iputils-ping # USB camera の接続 RUN echo 'export QT_X11_NO_MITSHM=1' >> ~/.bashrc # source ~/.bashrc # マウント先のdir WORKDIR /work/ CMD ["/bin/bash"] |
実際にビルドしていきます。
1 |
[~] $ docker build Dockerfile . |
✔️l4t Containerを起動
👇先程作成したDockerfileを起動
1 |
$ docker run -it --privileged --rm --gpus all --net host -e DISPLAY=$DISPLAY --device /dev/video0:/dev/video0:rwm -v <host dir>:<docker dir> <dockerimage name> /bin/bash |
コマンドの意味
—privileged : コンテナ以外のホスト上のプロセスとほぼ同レベルでホストへのアクセスを許可するように、ホストへの全てのデバイスアクセスを可能にする
– —rm : コンテナを抜けたら削除する
– –gpus all : nvidiaのデフォルトコマンド(GPUを使うのに必要)
– –net : ネットワークに接続
-e : 環境変数を設定
–device : デバイスの接続
-v : ファイル、フォルダのマウント
※それ以外のコマンドに関しては本ブログのこちらを参照
カンの良い方は思いましたよね、docker起動させる度に”docker run ~~~~”っめんどくさくね?って….
そうですこんなこと起動する度にコマンド叩いてられませんよね。
そこで長ったらしいコマンドを打たなくても済むようにしたのがdocker-composeと言われているものです。(他にも沢山の恩恵があります)
下記のブログにはdokcer-composeの使い方、書き方をまとめましたので、確認してみてください👇
【Docker17】docker-composeの使い方をマスターしよう
【Docker24】DockerでDjangoを使ったWebアプリ開発環境を構築してみよう
いかがだったでしょうか?Docker使ったことないよ…て方には少し難しかったかもしれません。しかし、これからはDockerは必須のスキルになることは間違いありません。(いちいち機械学習の動作環境を構築するのは効率悪いですからね)
これはAIエンジニアに限らずWeb系エンジニア、アプリ開発エンジニアなど、どの分野でも呼吸するように使われます。またほとんどの企業で採用されているので思い立ったが吉日、今すぐ勉強して身につけてしまいましょう!
『Docker勉強していこうかな』『使いこなせるようになりたい』と思っている人はこちらの記事も参考になると思うので、ぜひみてみてくださいね🙆♂️
今回はこの辺で、ばいばい👋
・Cudaとtensorflowのバージョンが合わねええええ
・⬆︎そのせいで色んなライブラリ(Keras, numpy, etc)がうまく入らねええええ
・ついでにOpenCVも入らねえええええ
・とりあえず何もライブラリが入らねえええええ
・え。待って、Jetson買うたびにこの苦しさを味わうの?死にてええええええ