TensorFlow: InternalError: Blas SGEMM-Start fehlgeschlagen


71

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


Ich vermute, es ist ein GPU-Speicherproblem. Ich rannte 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.0
Mark Jay

Antworten:


104

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()

9

Ich habe dieses Problem gelöst und es durch Einstellen allow_soft_placement=Trueund schließt gpu_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))

4

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])             

4

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 failedTraining 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 ** 2Funktion 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)

3

Wenn Sie Linux verwenden, versuchen Sie möglicherweise "ps -ef | grep python", um zu sehen, welche Jobs die GPU verwenden. dann töte sie


2

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.


2

Ich habe alle anderen laufenden Jupyter-Sitzungen geschlossen und das Problem dadurch behoben. Ich denke, es war ein GPU-Speicherproblem.


1

In meinem Fall,

Zuerst renne ich

conda sauber - alle

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.


1

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 .

Um klar zu sein, versucht Tensorflow (standardmäßig), alle verfügbaren GPUs zu verbrauchen. Es kann nicht mit anderen Programmen ausgeführt werden, die ebenfalls aktiv sind. Schließen. Fühlen Sie sich frei, wieder zu öffnen, wenn dies tatsächlich ein anderes Problem ist.


1

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()

0

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.


0

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 dlvorher hatte. Um den oben genannten Fehler zu beheben, habe ich daher mein Jupyter-Notizbuch und die Anaconda-Eingabeaufforderung mehrmals geschlossen und dann neu gestartet.


0

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.)


0

Ein Neustart meiner Jupyter-Prozesse war nicht genug. Ich musste meinen Computer neu starten.


0

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.


-1

In meinem Fall ist das Netzwerk-Dateisystem, unter dem libcublas.soes sich befand, einfach gestorben. Der Knoten wurde neu gestartet und alles war in Ordnung. Nur um dem Datensatz einen weiteren Punkt hinzuzufügen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.