aws g2インスタンスでtensorflowをGPUサポートで動作させる

概要

機械学習をやる機会があり、巡り巡って こちら の word-rnn を tensorflow 上で動作させるものにめぐりあいました。

学習をするにあたって入力データがそれなりの量になってくると学習に時間がかかり、現実的な時間では終了しません。
そこで色々調べてみると tensorflow には GPUをサポートする機能があり、それによって処理の高速化が図れるようです。
GPUは通常名前のごとくグラフィック処理用の演算装置ですが、その演算処理が機械学習にも応用できるということですね。

今回はそれをaws環境で実行するべく、グラフィックボードを持つg2タイプのインスタンスで動かすことを目標としました。

先人たちの遺産について

一年くらい前から同じようなことをやろうとしていた人たちの記事が結構色々出てきます。
日本でのドキュメントもそこそこ出てきます、が初めから断言しておきますと、かなりの記事がもはや古くなりすぎていて参考になりません

このあたりの流れが非常に早く、現在では随分具合が異なるようです。

またこの記事も将来的に現実と乖離してくると思いますので、その点は十分注意してください。

インストールしてみる

色々参考にしたところ皆さん Ubuntu14.04 のAMIでやられていたので、自分もそれに倣うことにしました。
インスタンス起動後、まずは様々な記事でも導入されているように、必要なモジュールをインストールします。

$ sudo apt-get update
$ sudo apt-get upgrade -y
$ sudo apt-get install -y build-essential python-pip python-dev git python-numpy swig python-dev default-jdk zip zlib1g-dev ipython

二つ目のコマンドを実行するとGRUBローダーの設定を迫られたりしますが、自分の場合は何も選択せずに次に進み
次の選択肢では install package maintainers version を選択しました。

また参考記事の通りに実行していきます。

$ echo -e "blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
$ echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf
$ sudo update-initramfs -u
$ sudo reboot

ここで一旦再起動

$ sudo apt-get install -y linux-image-extra-virtual
$ sudo reboot
# Install latest Linux headers
$ sudo apt-get install -y linux-source linux-headers-`uname -r`

ここまで来たら tensorflowの公式ページ に従ってインストール作業を進めましょう。

以下は公式サイトの引用ですが、現在では Cubaのバージョンを8.0、cuDNNのバージョンを5をインストールすれば問題ないようです。

Download and install Cuda Toolkit
https://developer.nvidia.com/cuda-downloads
Install version 8.0 if using our binary releases.
Install the toolkit into e.g. /usr/local/cuda.
Download and install cuDNN
https://developer.nvidia.com/cudnn
Download cuDNN v5.

この2つのモジュールをインストールしたあとで 公式ページに則ってpip経由でインストール作業を行います。

自分の場合は python2系 を対象としたかったので下記のように実行しました。

$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-0.12.0rc0-cp27-none-linux_x86_64.whl
$ sudo pip install --upgrade $TF_BINARY_URL

アプリケーションコードを実行したところ下記のように正常にモジュールライブラリを実行できているようです。
(幾つか警告のようなものもありますが)
またGRID K520というg2インスタンスで搭載しているグラフィックボードの名前も確認できます。

I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcurand.so locally
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:936] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 0 with properties:
name: GRID K520

処理自体もCPUでの処理と比べて高速化できているようでしたので、これにてインストール作業を完了しました。

参考記事

http://qiita.com/h860a/items/294262d98e1223008252

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください