2016-05-20 4 views
47

Wenn ich sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys}) ausführen, bekomme ich InternalError: Blas SGEMM launch failed. Hier ist der vollständige Fehler und Stack-Trace:TensorFlow: InternalError: Blas SGEMM-Start fehlgeschlagen

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

+0

Ich habe das gleiche Problem mit dem TensorFlow Beispiel für Logistische Regression. [Link] (https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/2%20-%20Basic%20Classifiers/logistic_regression.ipynb) – Yanagiba

+0

Ich vermute, es ist ein GPU-Speicherproblem. Ich habe 'mnist_softmax.py' (aus der Tensorflow-Seite) ausgeführt. Auf meinem PC mit GTX950 (2GB vram) bekomme ich diesen Fehler. Auf meinem Laptop mit Quadro M2000M (4Gb vram) läuft Geldstrafe. Beide Systeme verwenden Anakonda mit Python 3.5 und Tensorflow 1.0 –

Antwort

68

Alte Frage, kann aber anderen helfen.
Versuchen Sie interaktive Sitzungen zu schließen, die in anderen Prozessen aktiv sind (wenn IPython Notebook - Kernel einfach neu starten). Das hat mir geholfen!

Außerdem verwende ich diesen Code lokale Sitzungen in diesem Kernel während der Experimente zu schließen:

if 'session' in locals() and session is not None: 
    print('Close interactive session') 
    session.close() 
+2

Danke! Ich benutzte eine interaktive Sitzung, um mein Jupyter-Notizbuch zu überprüfen. –

4

ich diesen Fehler bekam, als Tensorflow Distributed läuft. Haben Sie überprüft, ob einer der Mitarbeiter CUDA_OUT_OF_MEMORY Fehler gemeldet hat? Wenn dies der Fall ist, kann es damit zu tun haben, 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])    
3

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 habe den gleichen Fehler InternalError: Blas SGEMM launch failed beim Training in der GPU gefunden.

Ich konnte den Grund nicht finden, warum dieser Fehler geschieht, aber ich schaffte, meinen Code in der GPU zu laufen, indem er die tensorflow Funktion tensorflow.contrib.slim.one_hot_encoding() vermeidet. Stattdessen mache ich die Ein-Hot-Encoding-Operation in numpy (Eingabe- und Ausgabevariablen).

Der folgende Code gibt den Fehler und die Fehlerbehebung wieder. Es ist ein minimales Setup, um die y = x ** 2 Funktion mit Gradientenabstieg 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) 
2

I angetroffen dieses Problem gelöst und es von allow_soft_placement=Truegpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.3) und Einstellung, die speziell den Anteil des Speichers von GPU verwendet definieren. Ich denke, das 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)) 
1

vielleicht nicht rigthly kostenlos Ihre gpu Sie, wenn Sie Linux verwenden, versuchen Sie "ps -ef | grep Python" zu sehen, welche Aufträge GPU verwenden. dann töte sie

+0

Dies liefert keine Antwort auf die Frage. Sobald Sie genug [Reputation] (https://stackoverflow.com/help/whats-reputation) haben, können Sie [jeden Beitrag kommentieren] (https://stackoverflow.com/help/privileges/comment); Stattdessen [geben Sie Antworten, die keine Klärung durch den Fragesteller erfordern] (https://meta.stackexchange.com/questions/214173/why-doe-i-need-50-reputation-to-comment-what-can- i-do-stattdessen). - [Aus Bewertung] (/ review/low-quality-posts/17003389) – rafalmp

-1

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

+2

Das ist ein wenig unklar - können Sie versuchen, es umzuformulieren, so dass es Sinn macht –

1

In meinem Fall hatte ich 2 Python-Konsolen geöffnet, beide mit Keras/Tensorflow. Als ich die alte Konsole geschlossen (vergessen vom vorherigen Tag), begann alles richtig zu funktionieren.

Es ist also gut zu überprüfen, wenn Sie nicht mehrere Konsolen/Prozesse haben, die GPU beschäftigen.

0

Ich habe alle anderen Jupyter Sessions geschlossen und das hat das Problem gelöst. Ich denke, es war GPU Speicherproblem.

0

Ich habe diesen Fehler beim parallelen Ausführen von Keras CuDNN Tests mit pytest-xdist festgestellt. Die Lösung bestand darin, sie seriell auszuführen.

0

Für mich hatte ich diesen Fehler bei der Verwendung von Keras, und Tensorflow war das Backend.Das lag daran, dass die Tiefenlernumgebung in Anaconda nicht richtig aktiviert wurde und Tensorflow daher auch nicht richtig funktionierte. Ich bemerkte dies seit dem letzten Mal, wenn ich meine tiefe Lernumgebung aktiviert (die dl genannt wird), die Aufforderung in meinem Anaconda Prompt dazu geändert:

(dl) C:\Users\georg\Anaconda3\envs\dl\etc\conda\activate.d>set "KERAS_BACKEND=tensorflow"

Während es nur die dl vorher hatte. Deshalb, was ich tat, um den oben genannten Fehler loszuwerden, war, mein jupyter Notizbuch und Anaconda Prompt zu schließen, dann wieder zu starten, für mehrere Male.

0

traf ich diesen Fehler nach OS Windows-10 kürzlich verändert sich, und ich dies nie begegnet vor, wenn die Fenster mit 7.

Der Fehler tritt auf, wenn ich meine GPU Tensorflow Modell laden, wenn eine andere GPU Programm läuft ; Es ist mein JCuda-Modell, das als Socket-Server geladen wird, der nicht groß ist. Wenn ich meine anderen GPU-Programme schließe, kann dieses Tensorflow-Modell sehr erfolgreich geladen werden.

Dieses JCuda-Programm ist nicht groß, nur etwa 70M, und im Vergleich dazu ist dieses Tensorflow-Modell mehr als 500M und viel größer. Aber ich benutze 1080 Ti, die viel Speicher hat. Es wäre also wahrscheinlich kein Problem mit einem zu geringen Speicherbedarf, und es wäre vielleicht ein schwieriges internes Problem von Tensorflow in Bezug auf OS oder Cuda. (PS: Ich benutze Cuda Version 8.0.44 und habe keine neuere Version heruntergeladen.)