キンサクプログラマー

お金儲けと技術のメモ

DCGANをtensorflow-gpu環境で試そうとしたらはまった

f:id:pikurusux:20180211125148p:plain
年末にマイニングとdeeplearningとゲーム用を兼ねてPCを購入したものの、deepleaningを試せていなかった。
せっかく良いGPU(GTX-1080ti)を積んでいるので、試してみることにした。

が、 くっそはまった話。

やろうとしたこと

qiita.com
このページにある顔の自動生成をtensorflow-gpuで試そうとした。

環境構築

スペック

素人(ゲーム、プログラマ、動画編集)が使う上では十二分なスペックのマシン。

windows+tensorflow-gpuの環境構築については、ブログやQiitaでいろんな情報が上がっているため、
そちらを参考に構築することにした。
qiita.com

ちなみに、最新のtensorflowではpython3.6も対応しているようなので、あえて3.5を入れる必要もなさそうだ。
cudaとanacondaの仮想環境を構築して、いざ

import tensorflow

でエラーの洗礼を受けることになる。

問題1 ImportError: cannot import name 'pywrap_tensorflow'

ぐぐってみるといくつかの解決手段がでてくる、

  • ライブラリのフォルダと、ワークフォルダの両方にtensorflowがあって、競合してるケース
  • cuda6じゃないとだめなケース

などが、あった。結局、ワークフォルダにはtensorflowはないし、cuda6を入れても動かなかった。

いろいろ見ていくと、cudaのバージョンが対応していなかった。
具体的にはhtensorflow 1.5とcuda9.0が対応しているようだが、cuda9.1をインストールしてしまったために、この現象が起きていたようだ。
cuda9.0を入れなおすことで解決。

公式で公開されている対応バージョンはしっかり確認しよう。

マイナーバージョンの違いで動かないこともあるので、ちゃんと合わせよう。
Installing TensorFlow from Sources  |  TensorFlow

問題2 AttributeError: module 'scipy.misc' has no attribute 'imread'

やっと問題を片づけて、またすぐ次のエラーが発生。
DCGANのサンプルを実行した際に遭遇。
こちらに関しては、対応策も下記のサイトに載っていた。
感謝します。
shinya131-note.hatenablog.jp

問題3  could not create cudnn handle:CUDNN_STATUS_NOT_INITIALIZED

GPUが動き出したと思った、矢先にこのエラー。
メモリ割り当てに失敗していそうだがよくわからない。
tensorflowのissuesにあったので確認してみた。
github.com

同様のエラーで困っている人が多数いるようだが、私の場合は下記のレスに助けられた。

However, I found that after I installed CUDA 9.0, my driver will not be the latest version.
SO, try to update your Nvdia driver to the latest version and restart your PC. It works for me!

Nvidiaのドライバを再インストールして再起動して試してみたところ、
うまく動いた。

実行途中画面

Epoch: [ 1] [1418/3165] time: 1060.2430, d_loss: 1.41907096, g_loss: 0.63643277
Epoch: [ 1] [1419/3165] time: 1060.4515, d_loss: 1.45640254, g_loss: 0.64500499
Epoch: [ 1] [1420/3165] time: 1060.6601, d_loss: 1.41062641, g_loss: 0.56015360
Epoch: [ 1] [1421/3165] time: 1060.8671, d_loss: 1.51710260, g_loss: 0.63383025
Epoch: [ 1] [1422/3165] time: 1061.0752, d_loss: 1.54579854, g_loss: 0.52151591
Epoch: [ 1] [1423/3165] time: 1061.2837, d_loss: 1.46147490, g_loss: 0.58812702
Epoch: [ 1] [1424/3165] time: 1061.4939, d_loss: 1.58462930, g_loss: 0.48759139
Epoch: [ 1] [1425/3165] time: 1061.7025, d_loss: 1.56832576, g_loss: 0.60934305
Epoch: [ 1] [1426/3165] time: 1061.9105, d_loss: 1.40342653, g_loss: 0.61351788
Epoch: [ 1] [1427/3165] time: 1062.1186, d_loss: 1.47152758, g_loss: 0.60068858
Epoch: [ 1] [1428/3165] time: 1062.3261, d_loss: 1.44360065, g_loss: 0.66278183
Epoch: [ 1] [1429/3165] time: 1062.5337, d_loss: 1.50858665, g_loss: 0.53968000
Epoch: [ 1] [1430/3165] time: 1062.7422, d_loss: 1.52123177, g_loss: 0.58573389
Epoch: [ 1] [1431/3165] time: 1062.9493, d_loss: 1.47332740, g_loss: 0.63264287
Epoch: [ 1] [1432/3165] time: 1063.1589, d_loss: 1.43613935, g_loss: 0.59885716
Epoch: [ 1] [1433/3165] time: 1063.3674, d_loss: 1.37127995, g_loss: 0.63091910
[Sample] d_loss: 1.34602058, g_loss: 0.70510840
Epoch: [ 1] [1434/3165] time: 1063.6607, d_loss: 1.44967675, g_loss: 0.62343627
Epoch: [ 1] [1435/3165] time: 1063.8687, d_loss: 1.41101193, g_loss: 0.66424716
Epoch: [ 1] [1436/3165] time: 1064.0768, d_loss: 1.43111825, g_loss: 0.53954196
Epoch: [ 1] [1437/3165] time: 1064.2849, d_loss: 1.49535596, g_loss: 0.66104704
Epoch: [ 1] [1438/3165] time: 1064.4945, d_loss: 1.45967066, g_loss: 0.63033247
Epoch: [ 1] [1439/3165] time: 1064.7025, d_loss: 1.43339145, g_loss: 0.53772628
Epoch: [ 1] [1440/3165] time: 1064.9105, d_loss: 1.45192957, g_loss: 0.69934833
Epoch: [ 1] [1441/3165] time: 1065.1205, d_loss: 1.46918988, g_loss: 0.54644096
Epoch: [ 1] [1442/3165] time: 1065.3313, d_loss: 1.37871087, g_loss: 0.75828224
Epoch: [ 1] [1443/3165] time: 1065.5414, d_loss: 1.43790650, g_loss: 0.50906980
Epoch: [ 1] [1444/3165] time: 1065.7509, d_loss: 1.55966878, g_loss: 0.60897464
Epoch: [ 1] [1445/3165] time: 1065.9610, d_loss: 1.49488461, g_loss: 0.56633693
Epoch: [ 1] [1446/3165] time: 1066.1710, d_loss: 1.50764132, g_loss: 0.59443462
Epoch: [ 1] [1447/3165] time: 1066.3811, d_loss: 1.48710704, g_loss: 0.60316432
Epoch: [ 1] [1448/3165] time: 1066.5881, d_loss: 1.40473163, g_loss: 0.62603921

GTX1080tiの私の環境でも1epoch10分くらいかかった。

初期

f:id:pikurusux:20180211125139p:plain

1epoch

f:id:pikurusux:20180211125148p:plain

2epoch

f:id:pikurusux:20180211125156p:plain

1epochで顔画像としてのクオリティ自体は停滞しているように見える。
おもしろい。