Edited at

UbuntuでChainer用のGPU環境を分ける方法

Ubuntuにおいて、nvidia-docker2を用いて、Chainer用のGPU環境を分ける方法についてまとめます。


前提


  • Compute Capability 3.0以上のNvidia製GPU (CUDA GPUs | NVIDIA Developer参照) が搭載されている

  • OSはUbuntuである

  • プログラムはPythonによって記述されている

  • プログラム内ではChainerを用いている

  • プログラムによって、必要とされるCUDAやcuDNN、Chainerのバージョンが異なる


必要なソフトウェアのインストール方法



  1. sudo apt updateコマンドを実行します。


  2. sudo apt install ubuntu-drivers-commonコマンドを実行し、ubuntu-driversをインストールします。


  3. sudo apt install `ubuntu-drivers devices | grep driver | grep recommended | awk '{print $3}'`コマンドを実行し、GPUドライバをインストールします。


  4. Get Docker CE for Ubuntu | Docker Documentationに従って、Docker CEをインストールします。


  5. Install Docker Compose | Docker Documentationに従って、docker-composeをインストールします。


  6. Installation (version 2.0) · NVIDIA/nvidia-docker Wikiに従って、nvidia-docker2をインストールします。


環境作成方法


  1. ディレクトリを作成します。

  2. 作成したディレクトリに移動します。

  3. 動かしたいプログラムのrequrements.txt (Python Tips:ライブラリをまとめてインストールしたい - Life with Python参照) を配置します。


  4. TODO部のコメントに従って編集したDockerfileを作成します。

    #TODO: 以下の{}部を記述し、コメントアウトを解除 (タグ ({CUDAのバージョン}-cudnn{cuDNNのバージョン}-devel-ubuntu{Ubuntuのバージョン}) については、 https://hub.docker.com/r/nvidia/cuda/tags/ に該当するタグが存在するかを確認すると良い)
    
    #FROM nvidia/cuda:{CUDAのバージョン}-cudnn{cuDNNのバージョン}-devel-ubuntu{Ubuntuのバージョン}
    #MAINTAINER {作成者氏名} <{作成者メールアドレス}>

    #APTのリポジトリ情報を更新
    RUN apt update

    #APTで必要なパッケージをインストール
    #TODO: APTでインストールするパッケージがある場合、以下に追加
    RUN apt install -y --no-install-recommends unattended-upgrades \
    # TODO: Pythonで日本語を処理する場合、以下のコメントアウトを解除
    # language-pack-ja \
    # TODO: Python2を使用する場合、以下のコメントアウトを解除
    # python-setuptools \
    # python-dev \
    # python-pip
    # TODO: Python3を使用する場合、以下のコメントアウトを解除
    # python3-setuptools \
    # python3-dev \
    # python3-pip

    #セキュリティアップデートを適用
    RUN unattended-upgrades

    #APTで不必要なパッケージをアンインストール
    RUN apt purge -y unattended-upgrades
    RUN apt autoremove -y

    #APTのキャッシュをクリア
    RUN apt clean

    #pythonコマンドとpipコマンドのシンボリックリンクを作成
    #TODO: Python3を使用する場合、以下のコメントアウトを解除
    #RUN echo "python" "pip" | xargs -n 1 sh -c 'ln -s /usr/bin/${0}3 /usr/bin/${0}'

    #必要なパッケージをpipでインストール
    COPY requirements.txt /
    RUN pip install -r requirements.txt

    #ホストでログインしているユーザーと同じユーザーを作成
    #TODO: 以下の{}部を記述し、コメントアウトを解除
    #RUN useradd -u {現在ホストでログインしているユーザーのユーザーID (『id -u ${USER}』コマンドで取得)} -o -m {現在ホストでログインしているユーザーのユーザー名}
    #RUN groupmod -g {現在ホストでログインしているユーザーのグループID (『id -g ${USER}』コマンドで取得)} {現在ホストでログインしているユーザーのユーザー名}

    #Python実行時にWarningが表示されるように設定
    #TODO: 以下の{}部を記述し、コメントアウトを解除
    #RUN echo "export PYTHONWARNINGS=default" >> ~{現在ホストでログインしているユーザーのユーザー名}/.bashrc

    #使用言語を日本語に設定
    #TODO: Pythonで日本語を処理する場合、以下のコメントアウトを解除
    #ENV LANG ja_JP.UTF-8

    #TODO: その他必要な処理を以下に記述

    #キャッシュや不必要なファイルを削除
    #TODO: 不必要なファイルがある場合、以下に追加
    RUN rm -rf /var/lib/apt/lists/* \
    /var/cache/apt/archives/* \
    .cache/pip/* \
    requirements.txt




  5. TODO部のコメントに従って編集したdocker-compose.ymlを作成します。


    docker-compose.yml

    version: '2.3'

    services:
    main:
    build: .
    runtime: nvidia
    # TODO: 以下の{}部を記述し、コメントアウトを解除
    # command: {実行コマンド}
    # container_name: {コンテナ名 (自由に指定可能)}
    # user: {現在ホストでログインしているユーザーのユーザー名}
    # environment:
    # - NVIDIA_VISIBLE_DEVICES={使用するGPUのID}




  6. docker-compose buildコマンドを実行します。



実行方法


  1. 作成したディレクトリに移動します。


  2. docker-compose up -dコマンドを実行します。


実行ログ閲覧方法


  1. 作成したディレクトリに移動します。


  2. docker-compose logs -fコマンドを実行します。


終了方法


  1. 作成したディレクトリに移動します。


  2. docker-compose stopコマンドを実行します。


  3. docker-compose rmコマンドを実行します。


補足


  • Python3を用いる場合、コンテナ内ではpythonでもpython3でも動作するようになっています。


関連記事


参考文献