空飛ぶロボットのつくりかた

ロボットをつくるために必要な技術をまとめます。ロボットの未来についても考えたりします。

Dockerのお勉強2(+α:for DeepLearning)

やりたいこと

Dockerfileを使ってPC環境を汚さずに、いろいろなDeep Learningフレームワークを使いたい

公式ドキュメント(日本語)

Docker ドキュメント日本語化プロジェクト — Docker-docs-ja 17.06.Beta ドキュメント

Dockerfileの書き方

例: keras

FROM nvidia/cuda:8.0-cudnn6-runtime

RUN apt update && apt install -y python3-pip
RUN pip3 install tensorflow-gpu keras

Dockerfileのビルド

  • nvidia-docker build -t docker-gpu-keras-workspace ./

コンテナの作成とログイン

  • nvidia-docker run -it docker-gpu-keras-workspace

サンプルの実行

(container)# apt install wget
(container)# wget https://raw.githubusercontent.com/fchollet/keras/master/examples/mnist_cnn.py
(container)# python3 mnist_cnn.py

sudo権限をつける

sudo usermod -aG docker $USER

起動中のコンテナに入る

  • sudo nvidia-docker start [コンテナID]

  • sudo nvidia-docker exec -it [コンテナID] /bin/bash

コンテナからイメージの作成

  • sudo nvidia-docker stop [コンテナID]

  • sudo nvidia-docker commit [コンテナID] custom-docker-gpu-keras-workspace

コンテナとイメージの削除方法

コンテナ

  • docker ps -a

  • docker rm [コンテナID]

コンテナの一括削除

  • sudo docker rm `sudo docker ps -a -q`

イメージ

  • docker images

  • docker rmi -f [イメージ名]

コンテナ名の変更

docker rename old_contena_name new_contena_name

ホスト<->コンテナ間のやりとり

sudo docker cp my.cnf <コンテナID>:/etc/my.cnf

参考: Dockerでホストとコンテナ間でのファイルコピー

Docker imageのtagを取得する方法

以下をbashrcに記載

function docker-taglist {
    curl -s https://registry.hub.docker.com/v1/repositories/$1/tags | sed "s/,/\n/g" | grep name | cut -d '"' -f 4
}

使い方

$ docker-taglist ubuntu

参考: DockerHubのイメージのタグ一覧をコマンドで取得する | Mazn.net

Dockerイメージのコピーと読み込み

コピー

docker save sample-image > sample-image.tar

読み込み

docker load < sample-image.tar

参考:Dockerでイメージをインポート・エクスポートする | UX MILK

Dockerからデバイスを読み込む方法

# docker run -it --device=/dev/video0:/dev/video0 --name test01 [image name] /bin/bash

自分のPCの場合はインカメがvideo0 , usbにさしたwebカメラがvideo1になっている。

第17回 Dockerで植物が育つ様子を自動録画してみよう――その1 (2/2) - ITmedia エンタープライズ

DockerからGUIを表示する方法

1.$ xhost +

  1. $ docker run -it -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix [image name] /bin/bash

Start a GUI-Application as root in a Ubuntu Container - General Discussions - Docker Forums

docker/Tutorials/GUI - ROS Wiki

Docker コンテナ上で Matplotlib を動かす

DockerでGUIのアプリ動かすためのメモ

Dockerを用いたGUIアプリケーションの実行 | POSTD

Docker上でwebカメラを読み込みOpenCVのimshowなどをGUIで表示する方法

  1. $ xhost +

  2. $ nvidia-docker run -it -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix --device=/dev/video1:/dev/video1 --name test1 output_disp

参考:docker run | Docker Documentation

おまけ1: pytorchでも動かしてみる

NVIDIA GPU CLOUDからイメージをダウンロード

  1. アカウントの登録: ディープ ラーニングと HPC のための GPU 対応クラウド (NGC) - NVIDIA

  2. API Keyの登録

  3. docker pull nvcr.io/nvidia/pytorch:17.12

exampleの実行

  1. sudo nvidia-docker run -it nvcr.io/nvidia/pytorch:17.12

  2. cd examples/mnist

  3. pip install -r requirements.txt

  4. export CUDA_VISIBLE_DEVICES=1

  5. python main.py

動けばOK!

結果

Test set: Average loss: 0.1240, Accuracy: 9620/10000 (96%)

pytorchで線形回帰をかいてみる

参考: ChainerとPyTorchのコードを比較する - 線形回帰編

プログラミング練習: PyTorch練習 02日目 2

PyTorchでニューラルネットワーク、RNN、CNNを実装してみた – データ分析エンジニアが気まぐれに更新するブログ

matplotlibが表示されない時

[短文メモ]matplotlibで、showしても何も表示されない→backend設定を確認

おまけ2: chainerでも動かしてみる

  1. docker pull chainer/chainer

  2. pip install mock

  3. TODO

参考

Dockerイメージの理解とコンテナのライフサイクル

Dockerの作業済みコンテナからイメージを作って移植を楽にする

Docker ノウハウ集