LoginSignup
6
7

More than 5 years have passed since last update.

nvidia-dockerで機械学習環境を構築してPyCharmのインタープリタとして使う

Last updated at Posted at 2018-05-15

機械学習環境構築時の覚え書きです。
Dockerに慣れていないので、おかしいところがあればご指摘お願いします。

動機

UbuntuでGPUを使って機械学習をしたいが、ライブラリによって要求するCUDAとcuDNNのバージョンが違ってつらいのをDockerでどうにかしたい。
慣れたエディタ(PyCharm)からDockerの開発環境を使いたい。

やったこと

  • グラボのドライバを入れる
  • Dockerを入れる
  • nvidia-dockerを入れる
  • NVIDIAのDockerイメージをベースにDockerfileを書く
  • DockerfileからDockerイメージを作る
  • コンテナを立ち上げる
  • 作業ディレクトリをマウントしてみる
  • (おまけ) DockerコンテナをPyCharmのインタプリタにする

ホスト側の環境

  • GTX 1080
  • Ubuntu 16.04
  • NVIDIA-SMI: 384.111
  • Docker: 18.03
  • nvidia-docker: 2.0.3

Docker側の環境

  • CUDA 9.0
  • cuDNN 7
  • Python: 3.5.2
  • tensorflow-gpu: 1.8.0
  • keras: 2.1.6

グラボのドライバを入れる

下のNVIDIAのサイトでGPUに対応するドライバのバージョンを調べてインストールする。

Dockerを入れる

公式サイトを見ながらUbuntu用のDockerをインストールしました。

nvidia-dockerを入れる

DockerでGPUを扱うには、nvidia-dockerを使う必要があるらしいので、こちらもインストールします。

NVIDIAのDockerイメージをベースにDockerfileを書く

今回はCUDA9.0で構築したいので、下記のようなDockerfileになりました。
KerasとTensorflowとPythonをインストールしています。

Dockerfile
FROM nvidia/cuda:9.0-cudnn7-runtime

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

DockerfileからDockerイメージを作る

Dockerfileのあるディレクトリで以下を実行します。
mykerasimageは任意の名前です。

sudo nvidia-docker build -t mykerasimage .

しばらく時間がかかります。
終わったら以下のコマンドで確認します。

sudo docker images

コンテナを立ち上げる

nvidia-dockerを使ってコンテナを立ち上げます。
Docker上でGPUを正しく認識していることを確認します。

sudo nvidia-docker run mykerasimage nvidia-smi

作業ディレクトリをマウントしてみる

以下のコマンドでコンテナのbashに入ることができます。

nvidia-docker run -v ホスト側のマウントしたいディレクトリのパス:コンテナ内のマウントしたいディレクトリのパス -i -t mykerasimage  /bin/bash

DockerコンテナをPyCharmのインタプリタにする

こちらを実行してユーザをDockerグループに追加して再起動してからでないと権限周りでエラーになりました。

Screenshot from 2018-05-15 20-40-54.png

こちらの画面でUnix socketを選択して問題なければ、好きなイメージをPythonのインタプリタとして使用できます。

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7