「喰う・書く・逃げる」に棲む処

 動物に関するデータ分析者のブログです

DeepLabCutのインストールについての備忘録

BioRixvの論文GitHubのマニュアルだけでパソコンへのインストールを試みたが、これらに記載されているコードの中には私の環境では実行できないものが含まれていたり、関連するパッケージのインストール方法が省略されているなど、うまくインストールができませんでした。そのため、様々な書籍やWebページの情報などをかき集めてインストールを試みました。DeepLabCutって何?という方はこちらをご覧ください。

krhb.hatenablog.com

実行環境

ハイスペックなパソコンを用意できないという方には以下のような方法があるようです。 qiita.com

この記事は自前のパソコンにインストールする前提で書いています。2019年3月に私の実行環境でうまくいった方法です。他のパソコンでもうまくいくかどうかは保証できません。

Step1. anacondaのインストール

Anacondaの公式サイトからLinux + Python 3.7用のインストーラをダウンロードします。以下のコマンドでもダウンロードできます。

$ wget https://repo.anaconda.com/archive/Anaconda3-2018.12-Linux-x86_64.sh

続いてインストールします。まずはダウンロードされたフォルダ(ディレクトリー)を特定します。webブラウザでダウンロードした場合は/home/user/Downloads/の中にあることが多いです。コマンドでダウンロードした場合はhomeの中に保存されています。home以外のディレクトリーにある場合は以下のコマンドを実行します。

$ cd ディレクトリー # 実行ディレクトリの変更

ディレクトリを変更したら以下のコマンドでインストールします。最新版になっている場合はバージョンに注意してください

$ sudo bash Anaconda3-2018.12-Linux-x86_64.sh

次に

Welcome to Anaconda3 2018.12

In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
>>> 

と表示されるので[ENTER]を押してライセンス関係の文章を一番下までスクロールします。そして

Do you accept the license terms? [yes|no]
[no] >>> 
Please answer 'yes' or 'no':'
>>>

と表示されたらyesと打ちます。次に

Anaconda3 will now be installed into this location:
/home/user/anaconda3

  - Press ENTER to confirm the location
  - Press CTRL-C to abort the installation
  - Or specify a different location below

[/home/user/anaconda3] >>> 

と表示されたら[ENTER]を押します。続いて

Do you wish the installer to initialize Anaconda3
in your /home/user/.bashrc ? [yes|no]
[no] >>> 

と表示されるのでyesと打ちます。すると色々表示されるが最後の行に

Do you wish to proceed with the installation of Microsoft VSCode? [yes|no]
>>> 

と表示されるますが、Visual Studio Code (テキストエディタ)をインストールしたい場合はyesをしない場合はnoを打ちます。作業ディレクトリを変更している場合はcdと打ち込みhomeに戻します。

以下のコマンドでAnacondaのパスを通します。

$ export PATH=/home/user/anaconda3/bin:$PATH

最後に

$ conda -V

を実行して

$ conda 4.5.12

と表示されればインストール完了です

Step2. 仮想環境の作成とDeepLabCutのインストール

まずはPython3.6の仮想環境を作成します。仮想環境名と書いているところは好きに変更してください。

$ conda create -n 仮想環境名 python=3.6

これを実行すると

Proceed ([y]/n)? 

と表示されるのでyを打ち込みます。そして作成した仮想環境を起動します。

$ source activate 仮想環境名

そして

(仮想環境名)ユーザー名@パソコン名$

と表示されれば起動完了です。

Step3. DeepLabCut本体のインストール

次にDeeplabcutをインストールします。

$ pip install deeplabcut

インストールが終わったら一旦仮想環境を終了します。

$ source deactivate



※補足※
DeepLabCutをCPUのみで動作させる場合は仮想環境を終了せずに続けてpip install tensorflow==1.10もしくはpip install --ignore-installed tensorflow==1.10を実行します。これでDeepLabCutの実行環境の構築は完了です。


Step4. TensorFlowとDockerのインストール(GPU動作環境の構築)の前準備


【追記】TensorFlow関連の項目はこちらにまとめ直しました。こちらの記事の方法でTensorFlowをインストールしてからStep.6に進むとうまく行くと思います。

krhb.hatenablog.com


まず準備としてCUDA toolkitをインストールします。以下のコマンドを順次実行してください。

# ダウンロード
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
# インストール
$ sudo dpkg -i cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
$ sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
$ sudo apt-get update
$ sudo apt-get install cuda
# ダウンロードしたファイルの削除
$ sudo rm cuda-repo-ubuntu1804_10.0.130-1_amd64.deb

次にcuDNN SDKをインストールします。ダウンロードページからcuDNN Runtime Library for Ubuntu18.04 (Deb)ブラウザーを使ってダウンロードします。尚、ダウンロードにはNVIDIAのアカウントを作成する必要があります。ダウンロード後、ファイルが保存されたディレクトリを確認してから以下のコマンドを実行してください。なお、sudo apt install nvidia-cuda-devを使えば事前にダウンロードすることなしにcuDNNがインストールされるようです。(動作の確認は行っていない)

# 作業ディレクトリの変更
$ cd ファイルのディレクトリ
# インストール
$ sudo dpkg -i libcudnn7_7.4.2.24-1+cuda10.0_amd64.deb
# 作業ディレクトリを戻す
$ cd

次にCUDAをインストールします。一旦再起動してから以下のコマンドを逐次実行します。詳細は以下のページを参照。

www.tensorflow.org

※多くの場合、GPUドライバーのインストール時点でCUDAのインストールが完了しています。インストールされているか確認するにはnvidia-smiを実行します。CUDAが表示される場合はインストール済です。その場合、以下のコマンドを実行しないことをおすすめします。私の場合、CUDAのインストールが完了している状態で下のコマンドを実行したら、パソコン全体がバグりました(無論、OSをクリーンインストールするハメに...)。

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/extras/CUPTI/lib64

# Add NVIDIA package repository
$ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
$ wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
$ sudo apt install ./cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
$ wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb
$ sudo apt install ./nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb
$ sudo apt update

# Install CUDA and tools. Include optional NCCL 2.x
$ sudo apt install cuda9.0 cuda-cublas-9-0 cuda-cufft-9-0 cuda-curand-9-0 \
       cuda-cusolver-9-0 cuda-cusparse-9-0 libcudnn7=7.2.1.38-1+cuda9.0 \
       libnccl2=2.2.13-1+cuda9.0 cuda-command-line-tools-9-0

# Optional: Install the TensorRT runtime (must be after CUDA install)
$ sudo apt update
$ sudo apt install libnvinfer4=4.1.2-1+cuda9.0

追記(2019年5月)

上記のコマンドは新しいバージョンが入っているところに無理やり古いバージョンのものを入れようとしているのでバグって当然でした。下のコマンド(上記のTensorFlowのページから引用)ならうまく行くかもしれません(Ubuntu 18.04の人のみ)。CUDAがインストール済みなら実行しないほうが良いかもしれません。

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/extras/CUPTI/lib64

# Add NVIDIA package repositories
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
sudo apt-get update
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
sudo apt install ./nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
sudo apt-get update

# Install NVIDIA driver
sudo apt-get install --no-install-recommends nvidia-driver-410
# Reboot. Check that GPUs are visible using the command: nvidia-smi

# Install development and runtime libraries (~4GB)
sudo apt-get install --no-install-recommends \
    cuda-10-0 \
    libcudnn7=7.4.1.5-1+cuda10.0  \
    libcudnn7-dev=7.4.1.5-1+cuda10.0


# Install TensorRT. Requires that libcudnn7 is installed above.
sudo apt-get update && \
        sudo apt-get install nvinfer-runtime-trt-repo-ubuntu1804-5.0.2-ga-cuda10.0 \
        && sudo apt-get update \
        && sudo apt-get install -y --no-install-recommends libnvinfer-dev=5.0.2-1+cuda10.0

ココまでで前準備は終わりです。

Step5. TensorFlowのインストール

TensorFlowのインストールをします。はじめに下記のコードでpythonとpipがインストールされているか確認してください。

$ python3 --version
$ pip3 --version

実行の結果、

Command 'プログラム名(python3またはpip3)' not found, but can be installed with:

sudo apt install プログラム名

と表示されたら、表示されたプログラム名(ここではpython3はすでにインストールされているの仮定してpip3についてのみ記載)について下記のコードを実行してインストールします。(pythonはここまででインストールされているはずなので省略)

$ sudo apt update
$ sudo apt install python3-dev python3-pip

インストールが終わったら作成してある仮想環境を起動します。

$ source activate (仮想環境名)

次にpipをアップデートします。

$ pip install --upgrade pip

最後にTensorflow本体をインストールします。

$ pip install --upgrade tensorflow-gpu

実行の結果、`Successfully installed (以下省略)`と表示されればOK。次に正常にインストールされたか以下のコマンドで確認します。

$ python -c "import tensorflow as tf; tf.enable_eager_execution(); print(tf.reduce_sum(tf.random_normal([1000, 1000])))"

または

$ import tensorflow as tf
$ sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

を実行しても良いです。これらを実行した結果、

Traceback (most recent call last):
(省略)

Failed to load the native TensorFlow runtime.

See https://www.tensorflow.org/install/errors

for some common reasons and solutions.  Include the entire stack trace
above this error message when asking for help.

と表示される場合、もしくは似たようなエラーが表示される場合はCUDAをCUDA9にダウングレードする必要があります。

エラー対策:CUDAのダウングレード(CUDA10→CUDA9)

まずはCUDA10の削除します。

$ sudo apt-get --purge remove cuda
$ sudo apt autoremove

次にCUDA9をインストールします。

$ wget https://developer.nvidia.com/compute/cuda/9.0/Prod/local_installers/cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64-deb

$ sudo dpkg -i cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64-deb
$ sudo apt-get update
$ sudo apt-get install cuda-9-0

インストールが終わったら再起動してnvidia-smiのコマンドでCUDAのバージョンを確認する。CUDAのバージョンが下がっていなくても気にせずに仮想環境を起動してから上記の正常にインストールされたか確認するコマンドを実行してみる。その結果、エラーのような表示がなければTensorFlowが正常に機能していると考えて大丈夫です。なお、結果の中に

(前略)
2019-02-18 15:05:07.422131: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1432] Found device 0 with properties: 
name: GeForce RTX 2080 Ti major: 7 minor: 5 memoryClockRate(GHz): 1.545
pciBusID: 0000:01:00.0
totalMemory: 10.73GiB freeMemory: 10.18GiB
(以下省略)

のようにGPUの名前が表示されているのが理想的です。エラーが続く場合はexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64/を実行してみたりすると解決するかもません。詳しくは以下のサイトを参照してください。

teratail.com

Step6. Docker環境の構築

次にDockerの環境を構築します。まずDocker本体をインストールします。ココでは以下のページを参考にしました。

docs.docker.com

まずは以下のコマンドを順番に実行します。

$ sudo apt-get update

$ sudo apt-get install \
      apt-transport-https \
      ca-certificates \
      curl \
      gnupg-agent \
      software-properties-common

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

$ sudo apt-key fingerprint 0EBFCD88

$ sudo add-apt-repository \
     "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
     $(lsb_release -cs) \
     stable"

$ sudo add-apt-repository \
     "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
     $(lsb_release -cs) \
     stable nightly"

$ sudo add-apt-repository \
     "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
     $(lsb_release -cs) \
     stable test"

$ sudo add-apt-repository \
     "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
     $(lsb_release -cs) \
     stable nightly test"

$ sudo apt-get update

$ sudo apt-get install docker-ce docker-ce-cli containerd.io

次に

$ apt-cache madison docker-ce

を実行すると

docker-ce | 5:18.09.2~3-0~ubuntu-bionic | https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
docker-ce | 5:18.09.2~3-0~ubuntu-bionic | https://download.docker.com/linux/ubuntu bionic/test amd64 Packages
docker-ce | 5:18.09.1~3-0~ubuntu-bionic | https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
(以下省略)

のように利用可能なバージョンが一覧で表示されます。今回は一番上にあるバージョン5:18.09.2~3-0~ubuntu-bionicをインストールします。他のバージョンをインストールする場合は下記のコードの2箇所のバージョンの部分を適当に書き換えれば良いです。

$ sudo apt-get install docker-ce=5:18.09.2~3-0~ubuntu-bionic docker-ce-cli=5:18.09.2~3-0~ubuntu-bionic containerd.io

最後に

$ sudo docker run hello-world

を実行して

Hello from Docker!
This message shows that your installation appears to be working correctly.
(以下省略)

と表示されればインストール成功です。

Step7. Nvidia-dockerのインストール

次にnvidia-dockerをインストールします。本来はversion1)をインストールするべきなのですが、version1はDockerのバージョンのためかインストールできませんでした。一方でversion2との互換性があるとのことなので以下のページを参考にversion2をインストールします。

qiita.com

今回はnvidia-dockerがインストールされていない前提ですすめます。まずはレポジトリを追加します。

$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
    sudo apt-key add -
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
    sudo tee /etc/apt/sources.list.d/nvidia-docker.list
$ sudo apt-get update

次にDockerのバージョンを確認します。

$ docker --version

を実行すると

Docker version 18.09.2, build 6247962

のようにDockerのバージョンがわかります。次に対応しているnvidia-docker2のバージョンを確認します。

$ sudo apt-cache madison nvidia-docker2 nvidia-container-runtime

を実行すると

nvidia-docker2 | 2.0.3+docker18.09.2-1 | https://nvidia.github.io/nvidia-docker/ubuntu18.04/amd64  Packages
nvidia-docker2 | 2.0.3+docker18.09.1-1 | https://nvidia.github.io/nvidia-docker/ubuntu18.04/amd64  Packages
(中略)
nvidia-container-runtime | 2.0.0+docker18.09.2-1 | https://nvidia.github.io/nvidia-container-runtime/ubuntu18.04/amd64  Packages
nvidia-container-runtime | 2.0.0+docker18.09.1-1 | https://nvidia.github.io/  Packages
(以下省略)

のように対応が表示されます。今回はdocker18.09.2に対応しているnvidia-docker2=2.0.3とnvidia-container-runtime=2.0.0をインストールします。

$ sudo apt-get install -y nvidia-docker2=2.0.3+docker18.09.2-1 nvidia-container-runtime=2.0.0+docker18.09.2-1
$ sudo pkill -SIGHUP dockerd

(注:2019/9/30)
上記のコマンドは以下のコマンドで実行しても問題ありません。以下のコマンドならバージョンを気にする必要がありません。

$ sudo apt install nvidia-docker2 vidia-container-runtime 
$ sudo pkill -SIGHUP dockerd

最後の仕上げに以下のコマンドを実行します。

$ sudo docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi

その結果、

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.79       Driver Version: 410.79       CUDA Version: 10.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce RTX 208...  Off  | 00000000:01:00.0  On |                  N/A |
| 27%   31C    P8    28W / 250W |    347MiB / 10986MiB |      4%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+

このようなNVIDIA-SMIの画面が表示されたらインストール成功です。忘れないうちに再起動してください。

Step8. Dockerの設定

次にユーザーをdockerグループに入れます。まず仮想環境に入って(source activate 仮想環境名)から、以下のコマンドを実行します。

$ sudo gpasswd -a ユーザー名 docker # 注:ユーザー名はこれ -> [ユーザー名]@パソコン名:~$

そして、

$ cat /etc/group | grep docker

を実行して

docker:x:999:ユーザー名

と表示されれば完了です。再起動してsudoなしでdockerコマンドが使えるか以下のコマンドから確認してください。

$ docker run hello-world

上記の場合と同じくHello from Docker!が表示されれば問題ありません。

続いてDocker4DeepLabCut2.0の実行環境を整えます。まずは以下のコマンドを実行してDocker4DeepLabCut2.0のダウンロードとそのフォルダへ作業ディレクトリを移動します。

$ git clone https://github.com/MMathisLab/Docker4DeepLabCut2.0
$ cd Docker4DeepLabCut2.0

続いてDockerのイメージを作成する。以下のコマンドを実行するとdlc_username/dlcdockerという名前のイメージが作成される。-t以下の部分が名前の指定になっている。また、最後に.というタグがついているので注意。これがないとエラーになります(私はココでハマりました)。

$ docker image build -t dlc_username/dlcdocker .

次に作成したイメージからDockerコンテナの生成と起動を行います。--nameの後ろにコンテナ名 イメージ名を書く。先頭のGPU=の後ろには使っているGPUの番号を書きます。この番号は必ず確認すること。GPUの番号はnvidia-smiで表示される表の1列目2段目の数字%の上に書いてある数字です。上に出ている表では27%の上に書いてある0が該当します。

$ GPU=0 bash ./dlc-docker run -d -p 2351:8888 --name containername dlc_username/dlcdocker

出力の結果、どこにもerrorの文字がなければ成功です。

おめでとうございます。以上でDeepLabCutをGPUで使うための設定が終了です。

使い始めのとき、ほぼ確実に現れるエラー対策

使い始めのときに

In []: import deeplabcut

を実行するとまず

ModuleNotFoundError: No module named 'wx'

というエラーが発生します。これを解決すると次に

ImportError: libpng12.so.0: cannot open shared object file: No such file or directory

というエラーが発生します。これらのエラーの解決方法は以下の記事に掲載していますのでご覧ください。

krhb.hatenablog.com

その他

後日、DeepLabCutの使い方を解説した記事を公開しようと考えています。この方法でインストールするとGPUを使うために本来はDockerを経由しなければならないはずなのに普通に使うだけでGPUがきちんと動いてしまうなど良い方面で謎の点も多いです(そもそもDockerが機能しない)。基本的にはこの論文を参考にしたら使えると思います。

この方法でインストールした場合の使い方を公開しました。

krhb.hatenablog.com

参考