仮想通貨マイニング/機械学習用のPCを自作してみた(Deep Learning環境構築編)

今回は、GPUを活用したTensorFlow学習環境の構築方法について書いていきたいと思います。

<スポンサーリンク>

構築方針

まず、前回までの記事で構築してきた環境にTensorFlowを導入するための、ざっくりした流れは以下の通りです。

  • Python開発環境の構築(pyenv, Miniconda)
  • TensorFlow前提ソフトウェアの導入(CUDA(8.0)、cuDNN)
  • TensorFlow導入とテスト実行

基本的には各種公式サイト等を参照しながら導入を進めて行けばよいのですが、前回ccminerをコンパイルするために導入したCUDAのバージョン(9.0)では、TensorFlowの最新バージョンである1.4が動きません。

TensorFlowのソースからビルドすれば、動くことは動くのですが、私の環境ではCPU上では動くもののGPU上で動かすことができませんでした。

そこで、本記事では、CUDA9.0に加え、TensorFlow用にCUDA8.0も導入することで、TensorFlow1.4が動く環境を作っていきます。

それでは、順に導入を進めて行きたいと思います。

Python開発環境の構築

Pythonによる開発環境を構築する際、AnacondaやMinicondaといったパッケージを利用すると、Python単体を入れる場合と比較して、必要となる細かいパッケージを1つ1つ導入する手間が省けて楽です。

が、Ubuntuには、あらかじめPython本体とそれに関連するパッケージがある程度含まれている一方、ダイレクトにAnaconda等を導入するとそれらが上書きされてしまいます。そしてそれが、既存Pythonを使用しているシステムプログラムの動作に影響を及ぼす可能性があります。

そこで、既存Python環境とは分けて、Deep Learning用に別のPython環境を構築する必要があります。それを実現するのが、pyenvというソフトウェアです。

pyenvの導入

ということで、pyenvの導入ですが、まずは公式Wikiを参照して、前提となるパッケージを導入しておきます。

$ sudo apt-get update
$ sudo apt-get install make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev

次に、githubからpyenvを取得します。

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv

最後に、pyenvを使うための設定を.bashrcに書き込んだ上で、その設定を有効化します。

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ source ~/.bashrc

pyenvの導入は以上です。

Minicondaの導入

続いて、Minicondaをpyenvを使って導入します。なお、Anacondaを導入しても全く問題ないですが、個人的に、無駄なパッケージが多くシステムに存在するのが嫌なので、私はMinicondaを選択しました。

まずは、pyenvで導入できるMinicondaのバージョンを調べます。

$ pyenv install -l | grep miniconda3

ちなみに、コマンドの中のminicondaの後に「3」をつけていますが、これはPython3系に対応したMinicondaを意味しています。

さて、このコマンドを実行すると、導入し得るMinicondaのバージョンが一覧表示されます。私がコマンドを叩いた時点で、Minicondaの最新バージョンは3-4.3.30でしたので、これをインストールすることにします。

$ pyenv install miniconda3-4.3.30
$ pyenv rehash

1行目でMinicondaを導入していますが、pyenvをかませることで、pyenvをインストールした、ホームディレクトリ下の.pyenvディレクトリ内に関連するファイルが導入されることになります。これで既存のPython環境とは別のPython環境が構築できることになります。

また、2行目でpyenv内の構成情報を最新化しています。

次に、pyenv内のデフォルトのPython環境として、今導入したminicondaを指定します。

$ pyenv global miniconda3-4.3.30

最後に、Minicondaへパスを通せば、導入は完了です。

$ echo 'export PATH="$PYENV_ROOT/versions/miniconda3-4.3.30/bin:$PATH"' >> ~/.bashrc
$ source ~/.bashrc

TensorFlow前提ソフトウェアの導入

続いて、TensorFlow導入の前提となるプログラムである、CUDA8.0とcuDNN6.0を導入します。

CUDA(8.0)の導入

前述の通り、CUDA9.0ではTensorFlow1.4がうまく動かないため、CUDA8.0を共存させます。

といっても難しいことは何もなく、CUDA9.0と同様の方法でインストールし、環境変数を少し修正するだけです。

まずはCUDA8.0をインストールするために、以下のコマンドを実行します。新たにファイルを落としなおす必要はありません。

$ sudo apt-get update
$ sudo apt-get install cuda=8.0.61-1

続いて、.bashrcを更新します。

前回、.bashrc上に

export PATH=/usr/local/cuda:${PATH}
export LD_LIBRARY_PATH=/usr/local/cuda:${LD_LIBRARY_PATH}

と追記しましたが、以下のように、CUDA9.0と8.0両方にパスを通します。

export PATH=/usr/local/cuda-9.0/bin:/usr/local/cuda-8.0/bin:${PATH}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:/usr/local/cuda-8.0/lib64:${LD_LIBRARY_PATH}

最後に、今更新した.bashrcを再読み込みしておきます。

$ source ~/.bashrc

これでCUDA8.0の導入は完了です。

cuDNNの導入

cuDNNとは、Nvidia社が公開している、Deep Learning用のライブラリです。

これを取得するためには、まず、公式サイトでユーザ登録(無料)をする必要があります。

上のリンク先で「Download」ボタンを押すと、Membership Requiredと表示されますので、同画面の「Join Now」ボタンを押して、ユーザ登録を進めて行きます。

数画面に渡りますので多少手間ですが、入力を行っていきます。入力が完了するとメールが送られてきますが、このメール中のリンクをクリックするとユーザ登録は完了です。

次に公式サイトに戻ると、ダウンロードできるファイルの一覧が見られるようになっています。本記事執筆時点で、CUDA8.0に対応した最新バージョンは7.0.5ですが、TensorFlowに対応しているバージョンは6.0です。これを選択します。

すると、さらに具体的なパッケージファイルを選択できるようになりますので、以下画像中の2つのファイルをダウンロードします。

あとは、以下のようにダウンロードしたパッケージをインストールします。

$ sudo dpkg -i libcudnn6_6.0.21-1+cuda8.0_amd64.deb libcudnn6-dev_6.0.21-1+cuda8.0_amd64.deb 

TensorFlow導入とテスト実行

ここまでくると、いよいよTensorFlowのインストールに移ることができます。

が、

Numpyの導入(Minicondaを使っている場合)

AnacondaではなくMinicondaを導入した場合、TensorFlow導入の前提となるNumpy(数値計算ライブラリ)がMinicondaに含まれていないため、まずはこの導入から行う必要があります。

折角ですから、Minicondaに含まれているcondaを使って、TensorFlow実行用の仮想環境を構築し、その中にインストールします。

$ conda create -n tensorflow
$ source activate tensorflow
(tensorflow) $ pip install numpy

1行目で「tensorflow」という名称の仮想環境を作り、2行目でその環境に移り、3行目でその環境内にNumpyをインストールしています。

TensorFlowの導入

これでようやくTensorFlowの導入に移ることができます。

TensorFlow公式サイトの手順に従い、パッケージを導入します。

(tensorflow) $ pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.4.0-cp36-cp36m-linux_x86_64.whl

導入作業はこれだけです。

テスト実行

念のために、TensorFlowがきちんと動くか、これまた上記のTensorFlow公式サイトの記載に基づいて簡単なプログラムを実行してみることにより確認します。

テスト実行は、pythonの対話モードで行います。

(tensorflow) $python
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
b'Hello, TensorFlow!'

「b’Hello, TensorFlow!’」という文字列が表示されることが確認できれば、TensorFlowの導入も完了です。

最後にPython対話モードを抜け、tensorflow仮想環境からも抜けておきます。

>>>quit()
(tensorflow) $ source deactivate

終わりに

長い道のりでしたが、これで環境の構築は一通り完了です。

自作したPCにピタッとはまる手順がまとまっているサイトをなかなか見つけることができず、かなり苦戦しました。

特に、CUDAについては、お試しでインストールした時点での最新バージョンは9.0だったにも関わらず、その数時間後に、いざブログ記事を書こうと思ったら、公式サイト上のバージョンが9.1に上がっており、9.1ではccminerをコンパイルできないし、かといって9.0のダウンロードリンクも見当たらないしで、睡眠時間ががっつり削られました。。。

と、それはさておき、ここまで来るのに10数万円 + 20~30時間の投資を行っているので、

  • CPUではなくGPUを使った場合、機械学習はどの程度スピーディーに行えるか?
  • 投資に見合うほど、仮想通貨はマイニングはできるか?
  • 電気代を考慮した場合にペイするか?
  • エアコン代をPC代に充ててしまったが、PCから放出される熱で部屋は十分暖かくなるか?

といったところが、非常に気になっています。

ということで、次回はこの辺りのパフォーマンス評価を行いたいと思います。

<スポンサーリンク>

シェアする

フォローする