tensorflow blas

TensorFlow: InternalError: error en el lanzamiento de Blas SGEMM



(15)

Cuando ejecuto sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys}) obtengo InternalError: Blas SGEMM launch failed . Aquí está el error completo y el seguimiento de la pila:

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

Pila: máquina EC2 g2.8xlarge, Ubuntu 14.04


Antigua pregunta, pero puede ayudar a otros.
Intente cerrar las sesiones interactivas activas en otros procesos (si es IPython Notebook, simplemente reinicie los núcleos). Esto me ayudó!

Además, uso este código para cerrar sesiones locales en este núcleo durante los experimentos:

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


Cerré todas las demás sesiones de Jupyter en ejecución y esto resolvió el problema. Creo que fue un problema de memoria de la GPU.


En mi caso,

Primero corro

conda clean --todos

para limpiar tarballs y paquetes no utilizados.

Luego, reinicio IDE (Pycharm en este caso) y funciona bien. Entorno: anaconda python 3.6, windows 10 64bit. Instalo tensorflow-gpu mediante un comando proporcionado en el sitio web de anaconda.


En mi caso, el sistema de archivos de red en el que se encontraba libcublas.so simplemente murió. El nodo se reinició y todo estuvo bien. Solo para agregar otro punto al conjunto de datos.


En mi caso, es suficiente abrir los Cuadernos Jupyter en servidores separados.

Este error solo ocurre conmigo si intento usar más de un modelo de tensorflow / keras en el mismo servidor. No importa si abre un cuaderno, lo ejecuta, que cierre e intente abrir otro. Si se están cargando en el mismo servidor Jupyter, siempre se produce el error.


En mi caso, tenía 2 consolas python abiertas, ambas usando keras / tensorflow. Cuando cerré la vieja consola (olvidada del día anterior), todo comenzó a funcionar correctamente.

Por lo tanto, es bueno verificar si no tiene varias consolas / procesos que ocupan la GPU.


Encontré este error al ejecutar pruebas de Keras CuDNN en paralelo con pytest-xdist. La solución fue ejecutarlos en serie.


Encontré este error después de cambiar el sistema operativo a Windows 10 recientemente, y nunca antes lo encontré al usar Windows 7.

El error ocurre si cargo mi modelo de GPU Tensorflow cuando se está ejecutando otro programa de GPU; Es mi modelo JCuda cargado como servidor de socket, que no es grande. Si cierro mis otros programas de GPU, este modelo de Tensorflow se puede cargar con mucho éxito.

Este programa JCuda no es grande en absoluto, solo alrededor de 70M, y en comparación, este modelo de Tensorflow es más de 500M y mucho más grande. Pero estoy usando 1080 ti, que tiene mucha memoria. Por lo tanto, probablemente no sea un problema de falta de memoria, y tal vez sea un problema interno complicado de Tensorflow con respecto al sistema operativo o Cuda. (PD: estoy usando Cuda versión 8.0.44 y no he descargado una versión más nueva).


Encontré este problema y lo resolví estableciendo allow_soft_placement=True y gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.3) , que define específicamente la fracción de memoria de GPU utilizada. Supongo que esto ha ayudado a evitar dos procesos de tensorflow que compiten por la memoria de la GPU.

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


Mi entorno es Python 3.5, Tensorflow 0.12 y Windows 10 (sin Docker). Estoy entrenando redes neuronales tanto en CPU como en GPU. Me encontré con el mismo error InternalError: Blas SGEMM launch failed cada vez que entrenaba en la GPU.

No pude encontrar la razón por la que ocurre este error, pero logré ejecutar mi código en la GPU evitando la función tensorflow.contrib.slim.one_hot_encoding() . En cambio, hago la operación de codificación en caliente en numpy (variables de entrada y salida).

El siguiente código reproduce el error y la solución. Es una configuración mínima para aprender la función y = x ** 2 usando el descenso de gradiente.

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)


Para mí, recibí este error al usar Keras, y Tensorflow fue el back-end. Fue porque el entorno de aprendizaje profundo en Anaconda no se activó correctamente, como resultado, Tensorflow tampoco se activó correctamente. Me di cuenta de esto desde la última vez que activé mi entorno de aprendizaje profundo (que se llama dl ), el aviso cambió en mi mensaje de Anaconda a esto:

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

Si bien solo tenía el dl antes de eso. Por lo tanto, lo que hice para deshacerme del error anterior fue cerrar mi notebook jupyter y el aviso de Anaconda, luego reiniciar, varias veces.


Para mí, tuve este problema cuando intenté ejecutar múltiples procesos de tensorflow (por ejemplo, 2) y ambos requieren acceder a los recursos de la GPU.

Una solución simple es asegurarse de que solo haya un proceso de flujo de tensor ejecutándose al mismo tiempo.

Para más detalles, puedes ver here .

Para que quede claro, tensorflow intentará (por defecto) consumir todas las GPU disponibles. No se puede ejecutar con otros programas también activos. Clausura. Siéntase libre de volver a abrir si este es realmente otro problema.


Recibí este error al ejecutar Tensorflow Distributed. ¿Verificó si alguno de los trabajadores informaba errores CUDA_OUT_OF_MEMORY? Si este es el caso, puede tener que ver con dónde coloca sus variables de peso y sesgo. P.ej

with tf.device("/job:paramserver/task:0/cpu:0"): W = weight_variable([input_units, num_hidden_units]) b = bias_variable([num_hidden_units])


Reiniciar mis procesos de Jupyter no fue suficiente; Tuve que reiniciar mi computadora.


tal vez no liberes tu gpu con rigidez, si estás usando Linux, prueba "ps -ef | grep python" para ver qué trabajos están usando GPU. entonces mátalos