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