Lorsque je lance sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
, je reçois InternalError: Blas SGEMM launch failed
. Voici la trace complète de l'erreur et de la pile:
InternalErrorTraceback (most recent call last)
<ipython-input-9-a3261a02bdce> in <module>()
1 batch_xs, batch_ys = mnist.train.next_batch(100)
----> 2 sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.pyc in run(self, fetches, feed_dict, options, run_metadata)
338 try:
339 result = self._run(None, fetches, feed_dict, options_ptr,
--> 340 run_metadata_ptr)
341 if run_metadata:
342 proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)
/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.pyc in _run(self, handle, fetches, feed_dict, options, run_metadata)
562 try:
563 results = self._do_run(handle, target_list, unique_fetches,
--> 564 feed_dict_string, options, run_metadata)
565 finally:
566 # The movers are no longer used. Delete them.
/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.pyc in _do_run(self, handle, target_list, fetch_list, feed_dict, options, run_metadata)
635 if handle is None:
636 return self._do_call(_run_fn, self._session, feed_dict, fetch_list,
--> 637 target_list, options, run_metadata)
638 else:
639 return self._do_call(_prun_fn, self._session, handle, feed_dict,
/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.pyc in _do_call(self, fn, *args)
657 # pylint: disable=protected-access
658 raise errors._make_specific_exception(node_def, op, error_message,
--> 659 e.code)
660 # pylint: enable=protected-access
661
InternalError: Blas SGEMM launch failed : a.shape=(100, 784), b.shape=(784, 10), m=100, n=10, k=784
[[Node: MatMul = MatMul[T=DT_FLOAT, transpose_a=false, transpose_b=false, _device="/job:localhost/replica:0/task:0/gpu:0"](_recv_Placeholder_0/_4, Variable/read)]]
Caused by op u'MatMul', defined at:
File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/usr/local/lib/python2.7/dist-packages/ipykernel/__main__.py", line 3, in <module>
app.launch_new_instance()
File "/usr/local/lib/python2.7/dist-packages/traitlets/config/application.py", line 596, in launch_instance
app.start()
File "/usr/local/lib/python2.7/dist-packages/ipykernel/kernelapp.py", line 442, in start
ioloop.IOLoop.instance().start()
File "/usr/local/lib/python2.7/dist-packages/zmq/eventloop/ioloop.py", line 162, in start
super(ZMQIOLoop, self).start()
File "/usr/local/lib/python2.7/dist-packages/tornado/ioloop.py", line 883, in start
handler_func(fd_obj, events)
File "/usr/local/lib/python2.7/dist-packages/tornado/stack_context.py", line 275, in null_wrapper
return fn(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/zmq/eventloop/zmqstream.py", line 440, in _handle_events
self._handle_recv()
File "/usr/local/lib/python2.7/dist-packages/zmq/eventloop/zmqstream.py", line 472, in _handle_recv
self._run_callback(callback, msg)
File "/usr/local/lib/python2.7/dist-packages/zmq/eventloop/zmqstream.py", line 414, in _run_callback
callback(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/tornado/stack_context.py", line 275, in null_wrapper
return fn(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/ipykernel/kernelbase.py", line 276, in dispatcher
return self.dispatch_Shell(stream, msg)
File "/usr/local/lib/python2.7/dist-packages/ipykernel/kernelbase.py", line 228, in dispatch_Shell
handler(stream, idents, msg)
File "/usr/local/lib/python2.7/dist-packages/ipykernel/kernelbase.py", line 391, in execute_request
user_expressions, allow_stdin)
File "/usr/local/lib/python2.7/dist-packages/ipykernel/ipkernel.py", line 199, in do_execute
Shell.run_cell(code, store_history=store_history, silent=silent)
File "/usr/local/lib/python2.7/dist-packages/IPython/core/interactiveshell.py", line 2723, in run_cell
interactivity=interactivity, compiler=compiler, result=result)
File "/usr/local/lib/python2.7/dist-packages/IPython/core/interactiveshell.py", line 2825, in run_ast_nodes
if self.run_code(code, result):
File "/usr/local/lib/python2.7/dist-packages/IPython/core/interactiveshell.py", line 2885, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-4-d7414c4b6213>", line 4, in <module>
y = tf.nn.softmax(tf.matmul(x, W) + b)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/math_ops.py", line 1036, in matmul
name=name)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_math_ops.py", line 911, in _mat_mul
transpose_b=transpose_b, name=name)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/op_def_library.py", line 655, in apply_op
op_def=op_def)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2154, in create_op
original_op=self._default_original_op, op_def=op_def)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1154, in __init__
self._traceback = _extract_stack()
Pile: EC2 g2.8xlarge machine, Ubuntu 14.04
Vieille question, mais peut aider les autres.
Essayez de fermer les sessions interactives actives dans d'autres processus (si IPython Notebook - redémarrez simplement les noyaux). Cela m'a aidé!
De plus, j'utilise ce code pour fermer les sessions locales de ce noyau pendant les expériences:
if 'session' in locals() and session is not None:
print('Close interactive session')
session.close()
J'ai rencontré ce problème et l'ai résolu en définissant allow_soft_placement=True
et gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.3)
, qui définissent spécifiquement la fraction de mémoire du processeur graphique utilisée. Je suppose que cela a permis d’éviter la mise en concurrence de deux processus tensorflow pour la mémoire du processeur graphique.
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.3)
sess = tf.Session(config=tf.ConfigProto(
allow_soft_placement=True, log_device_placement=True))
Mon environnement est Python 3.5, Tensorflow 0.12 et Windows 10 (pas de menu fixe). Je suis en train de former des réseaux de neurones à la fois en CPU et en GPU. Je suis tombé sur la même erreur InternalError: Blas SGEMM launch failed
à chaque formation dans le GPU.
Je ne trouvais pas la raison de cette erreur, mais j’ai réussi à exécuter mon code dans le GPU en évitant la fonction tensorflow tensorflow.contrib.slim.one_hot_encoding()
. Au lieu de cela, je fais l'opération one-hot-encoding dans numpy (variables d'entrée et de sortie).
Le code suivant reproduit l'erreur et le correctif. C'est une configuration minimale pour apprendre la fonction y = x ** 2
en utilisant la descente de gradient.
import numpy as np
import tensorflow as tf
import tensorflow.contrib.slim as slim
def test_one_hot_encoding_using_tf():
# This function raises the "InternalError: Blas SGEMM launch failed" when run in the GPU
# Initialize
tf.reset_default_graph()
input_size = 10
output_size = 100
input_holder = tf.placeholder(shape=[1], dtype=tf.int32, name='input')
output_holder = tf.placeholder(shape=[1], dtype=tf.int32, name='output')
# Define network
input_oh = slim.one_hot_encoding(input_holder, input_size)
output_oh = slim.one_hot_encoding(output_holder, output_size)
W1 = tf.Variable(tf.random_uniform([input_size, output_size], 0, 0.01))
output_v = tf.matmul(input_oh, W1)
output_v = tf.reshape(output_v, [-1])
# Define updates
loss = tf.reduce_sum(tf.square(output_oh - output_v))
trainer = tf.train.GradientDescentOptimizer(learning_rate=0.1)
update_model = trainer.minimize(loss)
# Optimize
init = tf.initialize_all_variables()
steps = 1000
# Force CPU/GPU
config = tf.ConfigProto(
# device_count={'GPU': 0} # uncomment this line to force CPU
)
# Launch the tensorflow graph
with tf.Session(config=config) as sess:
sess.run(init)
for step_i in range(steps):
# Get sample
x = np.random.randint(0, 10)
y = np.power(x, 2).astype('int32')
# Update
_, l = sess.run([update_model, loss], feed_dict={input_holder: [x], output_holder: [y]})
# Check model
print('Final loss: %f' % l)
def test_one_hot_encoding_no_tf():
# This function does not raise the "InternalError: Blas SGEMM launch failed" when run in the GPU
def oh_encoding(label, num_classes):
return np.identity(num_classes)[label:label + 1].astype('int32')
# Initialize
tf.reset_default_graph()
input_size = 10
output_size = 100
input_holder = tf.placeholder(shape=[1, input_size], dtype=tf.float32, name='input')
output_holder = tf.placeholder(shape=[1, output_size], dtype=tf.float32, name='output')
# Define network
W1 = tf.Variable(tf.random_uniform([input_size, output_size], 0, 0.01))
output_v = tf.matmul(input_holder, W1)
output_v = tf.reshape(output_v, [-1])
# Define updates
loss = tf.reduce_sum(tf.square(output_holder - output_v))
trainer = tf.train.GradientDescentOptimizer(learning_rate=0.1)
update_model = trainer.minimize(loss)
# Optimize
init = tf.initialize_all_variables()
steps = 1000
# Force CPU/GPU
config = tf.ConfigProto(
# device_count={'GPU': 0} # uncomment this line to force CPU
)
# Launch the tensorflow graph
with tf.Session(config=config) as sess:
sess.run(init)
for step_i in range(steps):
# Get sample
x = np.random.randint(0, 10)
y = np.power(x, 2).astype('int32')
# One hot encoding
x = oh_encoding(x, 10)
y = oh_encoding(y, 100)
# Update
_, l = sess.run([update_model, loss], feed_dict={input_holder: x, output_holder: y})
# Check model
print('Final loss: %f' % l)
J'ai eu cette erreur lors de l'exécution de Tensorflow Distributed. Avez-vous vérifié si l'un des travailleurs signalait des erreurs CUDA_OUT_OF_MEMORY? Si tel est le cas, cela peut avoir à voir avec l'endroit où vous placez vos variables de poids et de biais. Par exemple.
with tf.device("/job:paramserver/task:0/cpu:0"):
W = weight_variable([input_units, num_hidden_units])
b = bias_variable([num_hidden_units])
peut-être que vous n'avez pas libéré votre gpu correctement, si vous utilisez linux, essayez "ps -ef | grep python" pour voir quels travaux utilisent GPU. puis tuez-les
Dans mon cas, j'avais 2 consoles python ouvertes, toutes deux utilisant keras/tensorflow . En fermant l'ancienne console (oubliée du jour précédent), Tout a commencé à fonctionner correctement.
Il est donc bon de vérifier si vous n’avez pas plusieurs consoles/processus occupant le processeur graphique.
J'ai fermé toutes les autres sessions Jupyter en cours d'exécution, ce qui a résolu le problème. Je pense que c'était un problème de mémoire GPU.
Pour moi, j'ai eu ce problème lorsque j'ai essayé d'exécuter plusieurs processus tensorflow (par exemple 2) et que les deux nécessitaient un accès aux ressources du processeur graphique.
Une solution simple consiste à s’assurer qu’un seul processus tensorflow est exécuté à la fois.
Pour plus de détails, vous pouvez voir ici .
Pour être clair, tensorflow essaiera (par défaut) de consommer tout ce qui est disponible GPU. Il ne peut pas être exécuté avec d'autres programmes également actifs. Fermeture. Ressentir libre de rouvrir s'il s'agit en fait d'un autre problème.
Pour moi, j'ai eu cette erreur en utilisant Keras, et Tensorflow était le backend. C’est parce que l’environnement d’apprentissage approfondi d’Anaconda n’était pas activé correctement. Tensorflow n’a donc pas non plus démarré correctement. J'ai remarqué cela depuis la dernière fois que j'ai activé mon environnement d'apprentissage profond (appelé dl
), l'invite a changé dans mon invite Anaconda à ceci:
(dl) C:\Users\georg\Anaconda3\envs\dl\etc\conda\activate.d>set "KERAS_BACKEND=tensorflow"
Bien qu'il n'ait eu que la dl
avant cette date. Par conséquent, ce que j’ai fait pour éliminer l’erreur ci-dessus a été de fermer mon carnet de notes jupyter et Anaconda Prompt, puis de le relancer plusieurs fois.
Redémarrer mes processus Jupyter ne suffisait pas; Je devais redémarrer mon ordinateur.
J'ai rencontré cette erreur lors de l'exécution des tests Keras CuDNN en parallèle avec pytest-xdist. La solution consistait à les exécuter en série.
Dans mon cas,
D'abord, je cours
conda propre - tout
nettoyer les archives et les paquets inutilisés.
Ensuite, je redémarre IDE (Pycharm dans ce cas) et cela fonctionne bien. Environnement: anaconda python 3.6, windows 10 64bit. J'installe tensorflow-gpu à l'aide d'une commande fournie sur le site Web anaconda.
Dans mon cas, il suffit d'ouvrir les ordinateurs portables Jupyter Notebooks sur des serveurs distincts.
Cette erreur ne survient que si j'essaie d'utiliser plusieurs modèles tensorflow/keras sur le même serveur. Peu importe si vous ouvrez un bloc-notes, exécutez-le, fermez-le et essayez-en un autre. S'ils sont en cours de chargement sur le même serveur Jupyter, l'erreur se produit toujours.
J'ai rencontré cette erreur après avoir changé le système d'exploitation en Windows 10 récemment, et je ne l'avais jamais rencontré auparavant avec Windows 7.
L'erreur se produit si je charge mon modèle GPU Tensorflow lorsqu'un autre programme GPU est en cours d'exécution. c'est mon modèle JCuda chargé en serveur de socket, qui n'est pas volumineux. Si je ferme mon ou mes autres programmes GPU, ce modèle Tensorflow peut être chargé avec beaucoup de succès.
Ce programme JCuda n’est pas grand du tout, il ne s’élève qu’à environ 70 millions d’euros et, en comparaison, ce modèle Tensorflow dépasse les 500 millions d’euros et est bien plus vaste. Mais j'utilise 1080 ti, qui a beaucoup de mémoire. Ce ne serait donc probablement pas un problème de mémoire insuffisante, ni un problème interne délicat de Tensorflow concernant l'OS ou le Cuda. (PS: J'utilise la version 8.0.44 de Cuda et n'ai pas téléchargé de version plus récente.)