質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.20%

TensorFlowのプログラムが実行できないーGPUの環境設定でエラーが発生してしまった。

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 1,705

sadamtk

score 10

 前提・実現したいこと

Anaconda3上にtensolflow-gpuを使用できる環境を作り、KerasのNeuralNetworkのプログラムを実行させることができました。

と思いきや確認してみるとCPUしか認識されていなかったので、GPUを認識させるよう環境を構築しなおしました。

しかしうまくいっていたプログラムがエラーを出してハマってしまいました。

エラーの問題は「GPU指定」なんだと思いますが、解決策がどうしてもわからないので教えてください。

改めて、質問内容はこちらです。

・エラーの原因はGPUの設定が間違っているからですか?(どう間違っていますか?)
・エラーの対策方法を教えてください。

 発生している問題・エラーメッセージ

---------------------------------------------------------------------------
InternalError                             Traceback (most recent call last)
<ipython-input-5-5b0b57d8dfbf> in <module>
     14                  verbose=1,
     15                  validation_split=0.1,
---> 16                  callbacks=[es, csv_logger])
     17 

~\AppData\Local\conda\conda\envs\tfgpu\lib\site-packages\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, **kwargs)
   1037                                         initial_epoch=initial_epoch,
   1038                                         steps_per_epoch=steps_per_epoch,
-> 1039                                         validation_steps=validation_steps)
   1040 
   1041     def evaluate(self, x=None, y=None,

~\AppData\Local\conda\conda\envs\tfgpu\lib\site-packages\keras\engine\training_arrays.py in fit_loop(model, f, ins, out_labels, batch_size, epochs, verbose, callbacks, val_f, val_ins, shuffle, callback_metrics, initial_epoch, steps_per_epoch, validation_steps)
    197                     ins_batch[i] = ins_batch[i].toarray()
    198 
--> 199                 outs = f(ins_batch)
    200                 outs = to_list(outs)
    201                 for l, o in zip(out_labels, outs):

~\AppData\Local\conda\conda\envs\tfgpu\lib\site-packages\keras\backend\tensorflow_backend.py in __call__(self, inputs)
   2713                 return self._legacy_call(inputs)
   2714 
-> 2715             return self._call(inputs)
   2716         else:
   2717             if py_any(is_tensor(x) for x in inputs):

~\AppData\Local\conda\conda\envs\tfgpu\lib\site-packages\keras\backend\tensorflow_backend.py in _call(self, inputs)
   2673             fetched = self._callable_fn(*array_vals, run_metadata=self.run_metadata)
   2674         else:
-> 2675             fetched = self._callable_fn(*array_vals)
   2676         return fetched[:len(self.outputs)]
   2677 

~\AppData\Local\conda\conda\envs\tfgpu\lib\site-packages\tensorflow\python\client\session.py in __call__(self, *args, **kwargs)
   1397           ret = tf_session.TF_SessionRunCallable(
   1398               self._session._session, self._handle, args, status,
-> 1399               run_metadata_ptr)
   1400         if run_metadata:
   1401           proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

~\AppData\Local\conda\conda\envs\tfgpu\lib\site-packages\tensorflow\python\framework\errors_impl.py in __exit__(self, type_arg, value_arg, traceback_arg)
    524             None, None,
    525             compat.as_text(c_api.TF_Message(self.status.status)),
--> 526             c_api.TF_GetCode(self.status.status))
    527     # Delete the underlying status object from memory otherwise it stays alive
    528     # as there is a reference to status from this from the traceback due to

InternalError: Blas GEMM launch failed : a.shape=(1000, 7), b.shape=(7, 500), m=1000, n=500, k=7
     [[{{node dense_1/MatMul}} = MatMul[T=DT_FLOAT, _class=["loc:@training/RMSprop/gradients/dense_1/MatMul_grad/MatMul_1"], transpose_a=false, transpose_b=false, _device="/job:localhost/replica:0/task:0/device:GPU:0"](_arg_dense_1_input_0_0/_45, dense_1/kernel/read)]]
     [[{{node loss/mul/_61}} = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_621_loss/mul", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

 該当のソースコード

# coding: utf-8
# パッケージをインポート
import keras
import keras.backend as K
import pandas as pd
import numpy as np
import sklearn
import tensorflow as tf
from sklearn import preprocessing
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.optimizers import RMSprop
from keras.callbacks import EarlyStopping, CSVLogger
%matplotlib inline
import matplotlib.pyplot as plt

~(略)~

# モデルのコンパイル
model.compile(loss='sparse_categorical_crossentropy',
              optimizer=RMSprop(),
              metrics=['accuracy'])

es = EarlyStopping(monitor='val_loss', patience=2)
csv_logger = CSVLogger('training.log')
hist = model.fit(x_train, y_train,
                 batch_size=batch_size,
                 epochs=epochs,
                 verbose=1,
                 validation_split=0.1,
                 callbacks=[es, csv_logger]) #ここでエラー発生?

 試したこと

もともと、tensorflow-gpuを入れたのにCPUしか認識していなかったことが発端で、構築し直してからおかしくなりました。
その原因は特定でき、「conda install -n (任意の環境名) (パッケージ名)」としてインストールするところ「pip install ~」としていたためだとわかりました。

最新のCUDAのインストール及びcuDNNを適切に配置し、Anaconda上にTensorFlow-gpuをインストールしました。
念のためGPUの認識を確認しました。

from tensorflow.python.client import device_lib
device_lib.list_local_devices()

>>>
from tensorflow.python.client import device_lib
device_lib.list_local_devices()

>>>
    [name: "/device:CPU:0"
     device_type: "CPU"
     memory_limit: 268435456
     locality {
     }
     incarnation: 17828608210128374212, name: "/device:GPU:0"
     device_type: "GPU"
     memory_limit: 9213191127
     locality {
       bus_id: 1
       links {
       }
     }
     incarnation: 14191326970748114540
     physical_device_desc: "device: 0, name: GeForce GTX 1080 Ti, pci bus id: 0000:01:00.0, compute capability: 6.1"]

この後、肝心のプログラムの「コンパイル」ではまってしまいました。

参考にしたのはこちらのサイトです。
http://liaoyuan.hatenablog.jp/entry/2017/12/30/000155

 補足情報(FW/ツールのバージョンなど)

Anaconda3
pythonのバージョン:Python 3.6.6
tensorflow-gpuのバージョン:1.11.0
kerasのバージョン: 2.2.4

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • hayataka2049

    2018/10/18 18:01

    過去質問があったのでチェックしてみてください。https://teratail.com/questions/115994

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.20%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる