CPU のみでの学習には時間がかかるので、グラフィックボードを購入して Tensorflow GPU版を試してみました。
NVIDIA社 の CUDA と cuDNN は、グラフィックボードの GPU(Graphics Processing Unit)を利用して深層学習の処理を高速化します。
グラフィックカードの GPU は画像処理の高速化のために並列処理を行っていますが、深層学習でこの機能を利用するのが cuDNN です。
CUDA(Compute Unified Device Archtecture)は、GPUを利用するための統合開発環境です

 

<<< ハードウェア >>>

ハード:NEC Express5800 110Ge (CPU交換、メモリ増)
CPU: Intel Core2Duo 2.8 GHz
メモリ: 6 GByte
本体電源: 380W
(ご注意:グラフィックボードの消費電力が大きいので電源の供給能力が低いと危険です)
その他: マザーボードの PCI Express x1 をPCI Express x16 に変換するキット(本体には、PCI Express x8 しかないので)

グラフィックボード:
GPU は下記の2種類を試してみました
① NVIDIA GEFORCE GTX960 メモリ 4GB
② NVIDIA GEFORCE GT1030 メモリ 2GB
(おそらく最低限のスペックであまりお勧めではありません。詳細は下記の通りです)

 

<< インストール >>>

(1) ドライバインストール
Ubuntu の 画面から、[システム設定]->[ソフトウェアとアップデート]->[追加のドライバー]を選択してインストール。

NVIDIA binary driver version 390.30 を選択してインストール。
(2) CUDA + cuDNN のインストール
Ubuntu 16.04 (Anaconda Pythonインストール済み)に CUDA と cuDNN をインストール。
CUDA version 9.1 のインストールでエラーとなってしまったので、CUDA 8.0とcuDNN 6.0をインストールしました。
① CUDA インストール
ダウンロードURL(アーカイブ)
https://developer.nvidia.com/cuda-toolkit-archive
https://developer.nvidia.com/cuda-80-ga2-download-archive

cuda-repo-ubuntu1604_8.0.61-1_amd64.deb

インストール
> sudo dpkg -i cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
> sudo apt-get update
> sudo apt-get install cuda-8-0
② cuDNN インストール
cuDNN ダウンロード
https://developer.nvidia.com/rdp/cudnn-download
(登録が必要です)

cuDNN v6.0 Runtime Library for Ubuntu16.04 (Deb)
cuDNN v6.0 Developer Library for Ubuntu16.04 (Deb)
cuDNN v6.0 Code Samples and User Guide for Ubuntu16.04 (Deb)

インストール
> sudo dpkg -i libcudnn6_6.0.21-1+cuda8.0_amd64.deb
> sudo dpkg -i libcudnn6-dev_6.0.21-1+cuda8.0_amd64.deb
> sudo dpkg -i libcudnn6-doc_6.0.21-1+cuda8.0_amd64.deb

パス設定
export PATH=”/usr/local/cuda/bin:$PATH”
export LD_LIBRARY_PATH=”/usr/local/cuda/lib64:$LD_LIBRARY_PATH”
(3)TensorFlow, TfLearn をインストール
TensorFlowは、GPU版 version 1.3.0 をインストール

> pip install tensorflow-gpu==1.3.0
> pip install tflearn

—- インストールは以上です。

 

<<< 学習とテスト >>>

(1) NVIDIA GEFORCE GTX960 メモリ 4GB
① MNIST CNN2層 でテスト
「深層学習 TensorFlow を MNIST で試す(2)」の CNN 中間層2層でテストした結果です。

学習時間————————————————-
start:2018-04-30 20:59:00.928822
end:2018-04-30 21:05:15.549459
テスト実行時間
start2018-04-30 21:05:15.667921
end2018-04-30 21:05:17.031135
精度
0.9927
——————————

学習時間が、2時間以上から6分程度に大幅改善しました。

「AI課題1:DNA相同性検索とAI(2) 16SrDNA塩基配列で細菌分類」 の「全結合型1層、ノード数は、1024塩基×16(4塩基×4塩基)=16834」でテストした結果です。

学習時間————————————————-
start:2018-04-30 21:11:07.972981
end:2018-04-30 21:17:16.844291
学習済みモデルテスト結果——————————
start:2018-04-30 21:26:32.257176
end:2018-04-30 21:26:45.378530
[  0   1   2 … 114  44  31]
[  0   1   2 … 114  68  31]
精度
0.9249
——————————

学習時間は、2時間半程度から6分程度に大幅改善しました。
(2) NVIDIA GEFORCE GT1030 メモリ 2GB

「深層学習 TensorFlow を MNIST で試す(2)」の中間層2層でテスト。

学習結果のテストのときに、資源不足のエラーがでました。おそらく GPU メモリ 2G では不足のようです。

エラー 一部抜粋 ————————————-
ResourceExhaustedError                    Traceback (most recent call last)
<ipython-input-21-4f8e54c2bd97> in <module>()
50 ## テスト
51 time3 = dt.datetime.now();
—> 52 result = model.predict(testX)
53 time4 = dt.datetime.now();
54
—————————————————

テスト関数( predict )でのエラーだったので、とりあえずテストデータ数を減らしてみました。

—————————————————
## とりあえず一部を抽出
testX2 = cp.deepcopy(testX[0:4000])
testY2 = cp.deepcopy(testY[0:4000])

## テスト
time3 = dt.datetime.now();
result = model.predict(testX2)
time4 = dt.datetime.now();
—————————————————

テスト結果は以下のとおり、2時間以上の処理が7分程度に改善されました。

学習時間——————–
start:2018-04-25 21:56:22.291248
end:2018-04-25 22:03:54.374067
—————————————————

この場合は、テスト時点での資源不足エラーなので、分割して呼び出して後からまとめて集計すれば良いと思います。
今回は、2GB でメモリ不足が出ましたが、今後、複雑なネット構成で大量のデータを送った場合は、4GB の GPU でも出るかもしれません。
Web検索すると ResourceExhaustedError についての回避方法が出てきますので、今後の参考にしたいと思います。
「AI課題1:DNA相同性検索とAI(2) 16SrDNA塩基配列で細菌分類」 の「全結合型1層、ノード数は、1024塩基×16(4塩基×4塩基)=16834」でテスト

学習時間—————————–
start:2018-04-25 21:11:09.902056
end:2018-04-25 21:18:14.969081
saving:./data/dna/model_full.ckpt
INFO:tensorflow:/home/on/anaconda3/envs/tensorflow/data/dna/model_full.ckpt is not in all_model_checkpoint_paths. Manually adding it.
finished.
テスト実行時間———————-
start:2018-04-25 21:22:19.040007
end:2018-04-25 21:22:20.201880
[  0   1   2 … 114  68  31]
[  0   1   2 … 114  68  31]
精度
0.9372
————————————

こちらでは、資源不足のエラーは出てません。
2時間半程度->7分程度に改善されました。

—- テスト結果は以上です。

今回は、「お試し」で低価格のグラフィックボードを選びましたが、
本格的に Tensorflow で開発するなら、学習環境についてはよりスペックの高いのもが必要となると思います。
また、グラフィックボードは消費電力が大きいので、電源の供給能力に注意が必要です。

(S.Onda 2018/5/1)