はじめに

Docker 19.03 以降から Docker のコンテナから Nvidia GPU を使いやすくなりました。 tensorflow-gpu を Docker で使う場合は、公式のtensorflow/tensorflow:latest-gpu-py3があります。

エラーの内容

このコンテナを Sandy Bridge 以前の CPU で使うと

Illegal instruction (core dumped)

というエラーが出ます。 これは AVX という命令が古すぎる CPU にはないために起こるエラーです。

解決方法

解決方法は

  1. tensorflow をコンテナ内でビルドする
  2. 古い CPU でも動く tensorflow をどっかから取ってくる。

の二種類があります。

この記事では 2.を使い、Anaconda のリポジトリから取ってきた tensorflow-gpu を用いたDockerfileを書いたので紹介します。

使い方

Dockerfileを使ってください。

動作環境

  • Ubuntu 18.04
  • docker 19.03 以降
  • nvidia-driver-435

遊び方

環境がきちんと整っていれば次で動作すると思います。

$ git clone https://github.com/derbuihan/docker-tensorflow-gpu
$ cd docker-tensorflow-gpu
$ docker build -t mnist_sample .
$ docker run --gpus device=0 -it --rm mnist_sample /bin/bash
(base)$ conda activate tf-gpu
(tf-gpu)$ wget https://raw.githubusercontent.com/keras-team/keras/master/examples/mnist_cnn.py
(tf-gpu)$ python mnist_cnn.py