はじめに
株式会社クリエイスCTOの志村です。
何回かに渡り、PyTorch(ディープラーニング)で画像解析をする実践で使えそうなコードを掲載していきたいと思います。
せっかくなのでDockerで環境構築をしていきます。
最終的にはキャプチャー認証を突破できるレベルまで持ってけたらと思っています。(できなかったらごめんなさい)
大前提として自分、AI絡みの裏の仕組みは全くと言っていいほど理解していませんから。
今となっては微分積分すら怪しいです。はい。
そんな感じですが、その辺の意味不明な計算式を勝手にやってくれるフレームワークがせっかくあるのですからあやかれば良いんです。
経緯
上田「PyTorchが正式リリースされたから他のフレームワークと何が違うのか触ってみよう」
志村「来たAI!!クリエイスもとうとうこの分野に手を出しちゃいますか!」
曽宮・モトキ「AI?それっておいしいんですか?」(誇張してます)
志村「・・・。全く知らなくても案外出来ちゃうってのを見せたれ!」
ということで勉強兼ねて、知見が多少ある志村・上田は画像解析を、知見ゼロの曽宮・モトキは株価予想をそれぞれ記事を書くことになりました。
この記事でやること
Mac上にPyTorchの環境をDockerで構築し、CIFAR10のデータセットを利用しサンプルコードを動かすところまで
登場人物
画像解析班(この記事の筆者)
株価予想班
前提条件
- 実験場を作成する目的
- 今回は最終にImageをビルドする訳ではない
- というわけで、かな〜り緩めにvolumesで実験ソースをマウントして行きます
- ホストでIDEをつかってガンガン修正しつつ、コンテナ上でガンガンテストできる環境を目指します
この記事でやらないこと
- Dockerfileを使って公式Imageを元にカスタムImageを作りません
- AWSのECS, EKSには対応いたしません
- コピペしやすい様にコードブロックの頭のユーザーマーク($, %, #)は記述いたしません
環境構築手順
ざっくりとこんな感じで進めて行きます
- Docker環境を作成する。(local環境を汚さないように...)
- Examples系を利用できるようにディレクトリを整備する。
- docker-compose.ymlを作成する。
- テストコードを作成する
- 公式Imageからコンテナを起動してアクセスする
- 公式Imageに足りないライブラリを入れる
- テストする
- dockerの後片付け
Localに次の様なディレクトリ構造で構築して行きます
# ディレクトリ構成
~
└── git
├── deep-learning
│ └── pytorch (★current workspace)
│ ├── src
│ │ └── ...
│ └── docker-compose.yml
└── education
└── pytorch-examples
└── ...
全部educationだろっ!って声が聞こえなくもないですが、そんな方は後述する
2. Examples系を利用できるようにディレクトリを整備
と
4. テストコードを作成する
のパスを変更して使ってください。
1. Docker環境を作成します
vagrantとvirtual boxは使わずに、brewでdockerを入れます
あとはLaunchpadからDockerを起動して数秒待つだけ
brew update
brew cask install docker
2. Examples系を利用できるようにディレクトリを整備
## ディレクトリを作成
mkdir -p ~/git/deep-learning/pytorch/src
mkdir -p ~/git/deep-learning/pytorch/tmp
mkdir -p ~/git/education && cd $_
## examplesをクローン
git clone https://github.com/pytorch/examples pytorch-examples
cd ~/git/deep-learning/pytorch
## docker-composeからファイルを作成
touch docker-compose.yml
3. docker-compose.ymlを作成する
2の最後で作成したdocker-compose.yml
を記述して行きます。
version: '3.3'
services:
pytorch:
container_name: pytorch
image: pytorch/pytorch
tty: true
# runtime: nvidia
stdin_open: true
ipc: host
volumes:
- ~/git/education/pytorch-examples:/workspace/examples
- ./tmp:/workspace/tmp
- ./src:/workspace/src
- ./data:/workspace/data
working_dir: /workspace/examples
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "10"
4. テストコードを作成する
# viで開いてペーストする
vi ~/git/deep-learning/pytorch/src/cifar10_tutorial.py
または、Macの人は以下でもOKです
pbpaste > ~/git/deep-learning/pytorch/src/cifar10_tutorial.py
甘んじてbeginner_sourceを使わせていただきます。
これもvolumeで入れろよ!って声が聞こえなくもないですが
ゆくゆくはこれをバラして行く予定なので我慢です
5. 公式Imageからコンテナを起動してアクセスする
アクセス方法は3通り
## 1. compose run (おすすめ)
docker-compose run --name pytorch --entrypoint=/bin/bash pytorch
## 2. compose up & exec
docker-compose up -d pytorch
docker exec -it pytorch bash
## 3. run
docker run --name pytorch -it --ipc=host -v ~/git/education/pytorch-examples:/workspace/examples
6. 公式Imageに足りないライブラリを入れる
pip install -r /workspace/examples/mnist/requirements.txt
pip install cython
pip install --upgrade pip
pip install matplotlib
apt-get update
apt-get install -y xvfb
これを入れずに進めると、pythonに「ねーよ」と怒られたやつを入れている感じです。
本来はこれらを含めたDockerfileを作成してカスタムImageを作成すべきでしょう。
ま~今回は割愛です、ごめんなさい。
7. テストする
cd /workspace/src
python cifar10_tutorial.py
すると結果が出ました
Accuracy of plane : 71 %
Accuracy of car : 67 %
Accuracy of bird : 29 %
Accuracy of cat : 55 %
Accuracy of deer : 37 %
Accuracy of dog : 15 %
Accuracy of frog : 67 %
Accuracy of horse : 71 %
Accuracy of ship : 71 %
Accuracy of truck : 47 %
飛行機だったようですね、って何がやねん.....まーサンプルコードは動いたので今回はOKです。
8. dockerの後片付け
dockerはimageが結構かさむので、こまめに掃除しましょう。
docker rm -f $(docker ps -qa)
docker volume prune
docker rmi `docker images -aq`
次回
サンプルコードを改変して、モデルの訓練と保存をしていきます。