Wenn ich renne sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
bekomme ich InternalError: Blas SGEMM launch failed
. Hier ist die vollständige Fehler- und Stapelverfolgung:
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()
Stack: EC2 g2.8xlarge Maschine, Ubuntu 14.04
tensorflow
blas
Rafaelcosman
quelle
quelle
mnist_softmax.py
(von der Tensorflow-Seite genommen). Auf meinem PC mit GTX950 (2 GB vram) wird dieser Fehler angezeigt. Auf meinem Laptop mit Quadro M2000M (4 GB VAMR) laufen Bußgelder. Beide Systeme verwenden Anaconda mit Python 3.5 und Tensorflow 1.0Antworten:
Alte Frage, kann aber anderen helfen.
Versuchen Sie, interaktive Sitzungen zu schließen, die in anderen Prozessen aktiv sind (wenn IPython Notebook - starten Sie einfach die Kernel neu). Das hat mir geholfen!
Zusätzlich verwende ich diesen Code, um lokale Sitzungen in diesem Kernel während Experimenten zu schließen:
if 'session' in locals() and session is not None: print('Close interactive session') session.close()
quelle
Ich habe dieses Problem gelöst und es durch Einstellen
allow_soft_placement=True
und schließtgpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.3)
die Fraktion des Speichers von GPU verwendet definieren. Ich denke, dies hat dazu beigetragen, zwei Tensorflow-Prozesse zu vermeiden, die um den GPU-Speicher konkurrieren.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))
quelle
Ich habe diesen Fehler beim Ausführen von Tensorflow Distributed erhalten. Haben Sie überprüft, ob einer der Mitarbeiter CUDA_OUT_OF_MEMORY-Fehler gemeldet hat? Wenn dies der Fall ist, hat dies möglicherweise damit zu tun, wo Sie Ihre Gewichts- und Bias-Variablen platzieren. Z.B
with tf.device("/job:paramserver/task:0/cpu:0"): W = weight_variable([input_units, num_hidden_units]) b = bias_variable([num_hidden_units])
quelle
Meine Umgebung ist Python 3.5, Tensorflow 0.12 und Windows 10 (kein Docker). Ich trainiere neuronale Netze sowohl in der CPU als auch in der GPU. Ich bin beim
InternalError: Blas SGEMM launch failed
Training in der GPU auf den gleichen Fehler gestoßen.Ich konnte den Grund für diesen Fehler nicht finden, aber ich habe es geschafft, meinen Code in der GPU auszuführen, indem ich die Tensorflow-Funktion vermieden habe
tensorflow.contrib.slim.one_hot_encoding()
. Stattdessen mache ich die One-Hot-Codierung in numpy (Eingabe- und Ausgabevariablen).Der folgende Code gibt den Fehler und die Korrektur wieder. Es ist ein minimaler Aufbau, um die
y = x ** 2
Funktion mithilfe des Gradientenabfalls zu erlernen .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)
quelle
Wenn Sie Linux verwenden, versuchen Sie möglicherweise "ps -ef | grep python", um zu sehen, welche Jobs die GPU verwenden. dann töte sie
quelle
In meinem Fall hatte ich 2 Python-Konsolen geöffnet, beide mit Keras / Tensorflow. Als ich die alte Konsole schloss (vom Vortag vergessen), fing alles an, richtig zu funktionieren.
Es ist daher gut zu überprüfen, ob nicht mehrere Konsolen / Prozesse die GPU belegen.
quelle
Ich habe alle anderen laufenden Jupyter-Sitzungen geschlossen und das Problem dadurch behoben. Ich denke, es war ein GPU-Speicherproblem.
quelle
In meinem Fall,
Zuerst renne ich
um Tarballs und unbenutzte Pakete aufzuräumen.
Dann starte ich IDE neu (in diesem Fall Pycharm) und es funktioniert gut. Umgebung: Anaconda Python 3.6, Windows 10 64bit. Ich installiere tensorflow-gpu mit einem Befehl auf der anaconda-Website.
quelle
Bei mir trat dieses Problem auf, als ich versuchte, mehrere Tensorflow-Prozesse (z. B. 2) auszuführen, und beide erfordern den Zugriff auf GPU-Ressourcen.
Eine einfache Lösung besteht darin, sicherzustellen, dass immer nur ein Tensorflow-Prozess gleichzeitig ausgeführt wird.
Weitere Details finden Sie hier .
quelle
2.0-kompatible Antwort : Bereitstellung eines 2.0-Codes für die Antwort von erko zum Nutzen der Gemeinschaft.
session = tf.compat.v1.Session() if 'session' in locals() and session is not None: print('Close interactive session') session.close()
quelle
Ich habe diesen Fehler festgestellt, als ich Keras CuDNN-Tests parallel zu pytest-xdist ausgeführt habe. Die Lösung bestand darin, sie seriell auszuführen.
quelle
Bei der Verwendung von Keras trat dieser Fehler auf, und Tensorflow war das Backend. Dies lag daran, dass die Deep-Learning-Umgebung in Anaconda nicht richtig aktiviert wurde, sodass Tensorflow auch nicht richtig aktiv wurde. Ich habe dies bemerkt, seit ich meine Deep-Learning-Umgebung (die aufgerufen wird
dl
) das letzte Mal aktiviert habe. Die Eingabeaufforderung in meiner Anaconda-Eingabeaufforderung hat sich wie folgt geändert:(dl) C:\Users\georg\Anaconda3\envs\dl\etc\conda\activate.d>set "KERAS_BACKEND=tensorflow"
Während es nur das
dl
vorher hatte. Um den oben genannten Fehler zu beheben, habe ich daher mein Jupyter-Notizbuch und die Anaconda-Eingabeaufforderung mehrmals geschlossen und dann neu gestartet.quelle
Ich habe diesen Fehler festgestellt, nachdem ich das Betriebssystem auf Windows 10 geändert habe ich kürzlich das geändert habe, und ich habe ihn noch nie zuvor bei der Verwendung von Windows 7 festgestellt.
Der Fehler tritt auf, wenn ich mein GPU-Tensorflow-Modell lade, während ein anderes GPU-Programm ausgeführt wird. Es ist mein JCuda-Modell, das als Socket-Server geladen ist und nicht groß ist. Wenn ich meine anderen GPU-Programme schließe, kann dieses Tensorflow-Modell sehr erfolgreich geladen werden.
Dieses JCuda-Programm ist überhaupt nicht groß, nur etwa 70 Millionen, und im Vergleich dazu ist dieses Tensorflow-Modell mehr als 500 Millionen und viel größer. Aber ich benutze 1080 ti, das viel Speicher hat. Es wäre also wahrscheinlich kein Problem mit zu wenig Speicher, und es wäre möglicherweise ein heikles internes Problem von Tensorflow in Bezug auf Betriebssystem oder Cuda. (PS: Ich verwende Cuda Version 8.0.44 und habe keine neuere Version heruntergeladen.)
quelle
Ein Neustart meiner Jupyter-Prozesse war nicht genug. Ich musste meinen Computer neu starten.
quelle
In meinem Fall reicht es aus, die Jupyter-Notebooks auf separaten Servern zu öffnen.
Dieser Fehler tritt bei mir nur auf, wenn ich versuche, mehr als ein Tensorflow / Keras-Modell auf demselben Server zu verwenden. Es spielt keine Rolle, ob Sie ein Notizbuch öffnen, ausführen, schließen und versuchen, ein anderes zu öffnen. Wenn sie auf denselben Jupyter-Server geladen werden, tritt der Fehler immer auf.
quelle
In meinem Fall ist das Netzwerk-Dateisystem, unter dem
libcublas.so
es sich befand, einfach gestorben. Der Knoten wurde neu gestartet und alles war in Ordnung. Nur um dem Datensatz einen weiteren Punkt hinzuzufügen.quelle