Подтвердить что ты не робот

TensorFlow: InternalError: запуск запуска Blas SGEMM

Когда я запускаю sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys}), я получаю InternalError: Blas SGEMM launch failed. Вот полная ошибка и трассировка стека:

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

Стек: EC2 g2.8xбольшая машина, Ubuntu 14.04

4b9b3361

Ответ 1

Старый вопрос, но может помочь другим.
Попытайтесь закрыть интерактивные сеансы, активные в других процессах (если IPython Notebook - просто перезапустите ядра). Это помогло мне!

Кроме того, я использую этот код для закрытия локальных сеансов в этом ядре во время экспериментов:

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

Ответ 2

Я столкнулся с этой проблемой и решил ее, установив allow_soft_placement=True и gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.3), которые специально определяют долю памяти GPU. Я думаю, это помогло избежать двух процессов тензорного потока, конкурирующих за память 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))

Ответ 3

Я получил эту ошибку при запуске Tensorflow Distributed. Проверяли ли кто-нибудь из рабочих сообщение об ошибках CUDA_OUT_OF_MEMORY? Если это так, это может иметь отношение к тому, где вы размещаете переменные веса и смещения. Например.

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

Ответ 4

Моя среда - Python 3.5, Tensorflow 0.12 и Windows 10 (без докеров). Я тренирую нейронные сети как в CPU, так и в GPU. Я столкнулся с той же ошибкой InternalError: Blas SGEMM launch failed, когда тренировался в GPU.

Я не мог найти причину возникновения этой ошибки, но мне удалось запустить мой код в графическом процессоре, избегая функции tenorflow tensorflow.contrib.slim.one_hot_encoding(). Вместо этого я выполняю операцию с одним горячим кодированием в numpy (входные и выходные переменные).

Следующий код воспроизводит ошибку и исправление. Это минимальная настройка для изучения функции y = x ** 2 с использованием градиентного спуска.

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)

Ответ 5

Возможно, вы не освободите свой gpu, если используете linux, попробуйте "ps -ef | grep python", чтобы узнать, какие задания используют графический процессор. затем убить их

Ответ 6

В моем случае у меня было 2 пульта для python, оба с использованием keras/tensorflow. Когда я закрыл старую консоль (забытую с предыдущего дня) все начало работать правильно.

Так что хорошо проверить, если у вас нет нескольких консолей/процессов, занимающих GPU.

Ответ 7

Я закрыл все остальные сеансы Jupyter, и это решило проблему. Я думаю, что это проблема с памятью GPU.

Ответ 8

Для меня эта проблема возникла, когда я пытался запустить несколько процессов тензорного потока (например, 2), и оба они требуют доступа к ресурсам графического процессора.

Простое решение состоит в том, чтобы убедиться, что в каждый момент времени должен быть запущен только один тензорный процесс.

Для более подробной информации, вы можете увидеть здесь.

Чтобы было ясно, тензор потока будет пытаться (по умолчанию) использовать все доступные графические процессоры. Он не может быть запущен с другими активными программами. Закрытие. Не стесняйтесь открыть, если это на самом деле другая проблема.

Ответ 9

Я столкнулся с этой ошибкой при запуске тестов Keras CuDNN параллельно с pytest-xdist. Решением было запустить их серийно.

Ответ 10

Для меня я получил эту ошибку при использовании Keras, а Tensorflow был бэкэндом. Это произошло из-за того, что среда глубокого обучения в Anaconda не была активирована должным образом, в результате Tensorflow также не включился должным образом. Я заметил это, так как в последний раз, когда я активировал свою среду глубокого обучения (которая называется dl), приглашение в моей подсказке Anaconda изменилось на следующее:

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

Пока до этого было только dl. Поэтому, чтобы избавиться от вышеуказанной ошибки, я несколько раз закрывал блокнот Jupyter и приглашение Anaconda, а затем перезапускался.

Ответ 11

Я недавно столкнулся с этой ошибкой после изменения ОС на Windows 10, и я никогда не сталкивался с этим раньше при использовании Windows 7.

Ошибка возникает, если я загружаю свою модель Tensorflow с графическим процессором, когда выполняется другая программа с графическим процессором; Это моя модель JCuda, загруженная как сокет-сервер, которая невелика. Если я закрою свою другую программу GPU, эта модель Tensorflow может быть загружена очень успешно.

Эта программа JCuda совсем небольшая, всего около 70 млн., И по сравнению с ней модель Tensorflow имеет размер более 500 млн. И намного больше. Но я использую 1080 ti, у которого много памяти. Так что это, вероятно, не будет проблемой нехватки памяти, и, возможно, это будет сложная внутренняя проблема Tensorflow, касающаяся ОС или Cuda. (PS: я использую Cuda версии 8.0.44 и не загрузил более новую версию.)

Ответ 12

Перезапуска процессов Jupyter было недостаточно; Я должен был перезагрузить компьютер.

Ответ 13

В моем случае,

Во-первых, я бегу

Конда чистый --all

очистить тарболы и неиспользованные пакеты.

Затем я перезагружаю IDE (в данном случае Pycharm), и она работает хорошо. Окружение: анаконда питон 3,6, windows 10 64bit. Я устанавливаю tenorflow-gpu с помощью команды, представленной на сайте anaconda.

Ответ 14

В моем случае достаточно открыть блокноты Jupyter на отдельных серверах.

Эта ошибка возникает только у меня, если я пытаюсь использовать более одной модели tennflow/keras на одном сервере. Неважно, если открыть одну записную книжку, выполнить ее, чем закрыть и попытаться открыть другую. Если они загружаются на тот же сервер Jupyter, ошибка всегда происходит.

Ответ 15

В моем случае сетевая файловая система, под которой находился libcublas.so, просто умерла. node был перезагружен, и все было в порядке. Просто добавьте еще один пункт в набор данных.