気の向くままに辿るIT/ICT
ソフトウェア

DockerでPyTorch開発環境を作る

ホーム前へ次へ
フリーソフト・オープンソースを活用しよう。

DockerでPyTorch開発環境を作る

DockerでPyTorch開発環境を作る

2020/08/25

 ちょっと目をそらしている間にChainer開発会社自身の深層学習フレームワークを自社製Chainerから、順次、Facebookが開発、オープンソースとなったPyTorchに移行するとのこと。

 自身の環境では、最新版が使えなかったTensorFlow/kerasから最新版が使えたChainerを使うべく、開発環境を作ってみたのですが、この流れに乗るのは、必然かということで、とりあえず、PyTorchの開発環境だけでも作ってみようかなと。

torch 1.6.0

 ついては、コンテナ型仮想化Dockerを使ってFacebook発で今やオープンソースの機械学習、ニューラルネットワーク、ディープラーニング(深層学習)などのフレームワークPyTorchの開発環境をpipで作ってみました。

 と言っても、とりあえず、パッケージとしては、torchをインストールするだけですが。

 pipには、pytorch (1.0.2)もあるようですが、簡易説明もなく、インストールできないようなのでtorchを使うことに。

Python 3.8.2

 Sunsetting Python 2にあるようにPython 2系は、2020/01/01を以てサポート終了しているので当然、Python 3系を使います。

[ホスト環境]
P C:TOSHIBA dynabook B45/B
CPU:Intel Cerelon 3855U 1.60GHz Core x2
GPU:Intel HD Graphics 510 (オンボード)
RAM:4GB
O S:Debian 9.5/Stretch x86-64

 ちなみに今回、検証に使っているパソコンのGPUは、Intel HD Graphics 510というオンボードのもので主流らしきNVIDIA製ではないのでCPUで動かしてみます。

Docker

Docker version 19.03.12, build 48a66213fe

 少なくとも現時点では、UbuntuやCentOSならEE/Enterprise版も使える模様、DebianはやFedoraはCE版のみ、自身はDebianをメインとしており、今のところOSを乗り換える気もないのでCE版をインストールしました。

 OS、プラットフォームごとに詳述されているCE版のインストールは、スムースに完了しました。

$ sudo usermod -aG docker USER

 ホスト側の一般ユーザーでsudoなしでdockerコマンドを実行したい場合には、Dockerインストール時に作成されるdockerグループにユーザーを追加しておきます。

Dockerfile

# Dockerfile
 
FROM ubuntu
 
RUN apt update && apt install -y \
        python3 \
        python3-pip \
        git \
        less \
        curl \
        wget \
        vim \
        tzdata \
        firefox \
  && apt clean \
  && rm -rf /var/lib/apt/lists/*
 

 NVDIA GPUのないマシンでCPUで動かしたいと思っている自身は、とりあえず、こんな感じにしてみました。

 なぜか、pip installを書くとうまくいかなかったのでコンテナを作ってからtorchとnotebookをpip install、コンテナをcommitしてそこまでの環境を保存することにしました。

 ちなみにDockerイメージには、公式としてマーキングされてはいないようですが、ここら辺からするとpytorch/pytorchが、公式っぽい?

 自身は、勉強がてら、最小構成から順次進めてみたいタイプなのでいちから作ってみています。

Dockerコンテナの実行

$ xhost local:
non-network local connections being added to access control list
$ ls
Dockerfile
$ docker build -t webzoit:pytorch .
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
webzoit       pytorch              3dd2c78b72ba        1 minutes ago        933MB
$ docker run -v /tmp/.X11-unix/:/tmp/.X11-unix/ -it --rm webzoit:pytorch /bin/bash
root@a32d97dfc115:/# which less
...
root@a32d97dfc115:/# pip3 list
...
root@a32d97dfc115:/#

 コンテナ内でGUIアプリを起動するための準備xhostコマンドについては、後述しますが、端末上で先のDockerfileのあるディレクトリにいることを確認し、docker buildでコンテナからイメージを作成します。

 docker imagesなどでイメージwebzoit:pytorchが作成されていることを確認、docker runでGUI絡みでホストとコンテナ側の/tmp/.X11-unix/をマウントしつつ、作成されたイメージを使ってコンテナを起動します。

 whichコマンドやpip3 listコマンドなどでDockerfileに書いたパッケージが入っていることを確認できます。

インストール済みPyTorch環境の確認

root@a32d97dfc115:/# python3
Python 3.8.2 (default, Jul 16 2020, 14:00:26)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from __future__ import print_function
>>> import torch
>>> x = torch.rand(5, 3)
>>> print(x)
tensor([[0.5311, 0.6756, 0.5973],
[0.0020, 0.9508, 0.4745],
[0.6839, 0.7270, 0.0293],
[0.2600, 0.6059, 0.4487],
[0.2560, 0.1988, 0.8232]])
>>>
([Ctrl]+[d])
root@a32d97dfc115:/#

 公式ガイドにあるようにやってみるとエラーはありません。

 というわけでtorchをインストールしただけでpytorchを使える基本的な環境ができました。

GUIアプリの起動

root@a32d97dfc115:/# firefox
...

 今回もChainerで開発環境を整えた時と同様にCLIベースのディストリビューションイメージ(今回はubuntu)でホスト環境のモニタを使ってコンテナ内のGUIアプリを起動させることにしました。

  1. ホスト側でxhost local:(コロンの後にコンテナ側ホスト名を指定すればベター)
  2. ホスト側でdocker runする際に-v /tmp/.X11-unix/:/tmp/.X11-unix/としてホストとコンテナのディスプレイを共有すべくマウント
  3. Dockerfileにコンテナ側の環境変数DISPLAYにホスト側と同じ:0を指定してある

 よって、前述のようにコンテナを起動していれば、この場合、コンテナ内のFirefoxがホスト(今回は、dynabook)のディスプレイを使って起動します。

ホーム前へ次へ