前提・実現したいこと
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"]()]]
該当のソースコード
python
1 2# coding: utf-8 3# パッケージをインポート 4import keras 5import keras.backend as K 6import pandas as pd 7import numpy as np 8import sklearn 9import tensorflow as tf 10from sklearn import preprocessing 11from keras.models import Sequential 12from keras.layers.core import Dense, Dropout, Activation 13from keras.optimizers import RMSprop 14from keras.callbacks import EarlyStopping, CSVLogger 15%matplotlib inline 16import matplotlib.pyplot as plt 17 18~(略)~ 19 20# モデルのコンパイル 21model.compile(loss='sparse_categorical_crossentropy', 22 optimizer=RMSprop(), 23 metrics=['accuracy']) 24 25es = EarlyStopping(monitor='val_loss', patience=2) 26csv_logger = CSVLogger('training.log') 27hist = model.fit(x_train, y_train, 28 batch_size=batch_size, 29 epochs=epochs, 30 verbose=1, 31 validation_split=0.1, 32 callbacks=[es, csv_logger]) #ここでエラー発生? 33
試したこと
もともと、tensorflow-gpuを入れたのにCPUしか認識していなかったことが発端で、構築し直してからおかしくなりました。
その原因は特定でき、「conda install -n (任意の環境名) (パッケージ名)」としてインストールするところ「pip install ~」としていたためだとわかりました。
最新のCUDAのインストール及びcuDNNを適切に配置し、Anaconda上にTensorFlow-gpuをインストールしました。
念のためGPUの認識を確認しました。
python
1from tensorflow.python.client import device_lib 2device_lib.list_local_devices() 3 4>>> 5from tensorflow.python.client import device_lib 6device_lib.list_local_devices() 7 8>>> 9 [name: "/device:CPU:0" 10 device_type: "CPU" 11 memory_limit: 268435456 12 locality { 13 } 14 incarnation: 17828608210128374212, name: "/device:GPU:0" 15 device_type: "GPU" 16 memory_limit: 9213191127 17 locality { 18 bus_id: 1 19 links { 20 } 21 } 22 incarnation: 14191326970748114540 23 physical_device_desc: "device: 0, name: GeForce GTX 1080 Ti, pci bus id: 0000:01:00.0, compute capability: 6.1"] 24
この後、肝心のプログラムの「コンパイル」ではまってしまいました。
参考にしたのはこちらのサイトです。
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
あなたの回答
tips
プレビュー