LoginSignup
2
0

More than 5 years have passed since last update.

tensorflow の tf.Session() がやたら重いとき

Posted at

身近な環境で tf.Session() を実行するのがやたら時間がかかる事象があり、それに対応したメモです。

おそい

例えば ipython で以下のように Session を作ろうとすると

In [1]: import tensorflow as tf

In [2]: session = tf.Session()
2017-12-12 15:41:48.870629: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA

ここで異常に待たされます。1分くらい。

環境

GeForce GTX 1080 が刺さった Linux マシンです。
OS は Ubuntu 16 です。
以前適当に CUDA 等入れてしまい、 CUDA9, cuDNN7 がインストールされた状態で、更に tensorflow1.4 用に CUDA8, cuDNN6 を追加で入れた環境です。
(2017/12 現在最新の pip で入る tensorflow1.4 は CUDA9, cuDNN7 には対応していない)

% nvidia-smi
Tue Dec 12 17:51:05 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 387.26                 Driver Version: 387.26                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 1080    Off  | 00000000:01:00.0  On |                  N/A |
| 27%   27C    P8     6W / 180W |     61MiB /  8112MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0       992      G   /usr/lib/xorg/Xorg                            59MiB |
+-----------------------------------------------------------------------------+

対応

上の環境にある通り、 CUDA/cuDNN のバージョンが複数(しかも必要なバージョンより新しいものが入っている)状態なのが悪いんじゃないの?とあたりを付けて CUDA/cuDNN をそれぞれ CUDA8, cuDNN6 のみを入れ直したら治った次第です。

既存の CUDA/cuDNN の削除

CUDA の削除

# パッケージ一覧から cuda 系を取得
dpkg -l | grep cuda
# cuda-***-8 と cuda-***-9 が混在しているのを確認

# cuda を削除・再インストール
sudo apt-get remove cuda

# cuda 等を入れるために自動的に入った依存ライブラリ(もう使われてない)を削除
sudo apt-get autoremove

# 消えたか確認
dpkg -l

cuDNN の削除

ls /usr/local/ | grep cuda

# cuda-*** を削除
sudo rm -fr /usr/local/cuda-9.0/

再インストール

# cuda 関係のライブラリ一覧を探す
# 多分 cuda-8-0 とか cuda-9-0 とかがあるはず。
apt-cache search cuda

# お好みのバージョンを入れる
sudo apt-get install cuda-8-0

# cuDNN を入れなおす
# https://developer.nvidia.com/rdp/cudnn-download からダウンロードして cudnn.tgz で保存しておく
tar xvzf  cudnn.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

何が原因かというのははっきりわかりませんが、私の環境ではこれで tf.Session() が普通の速度で動くようになりました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0