Tensorflow не хочет использовать GPU

Я хочу обучить «стандартного чат-бота» отсюда https://github.com/chiphuyen/stanford-tensorflow-tutorials/tree/master/assignments/chatbot на GPU, но он не использует мой GPU, но всем нужны библиотеки (CuNN, CUDA, tensorflow-gpu и т. д.) установлены, я пробовал:

def train():
""" Train the bot """

test_buckets, data_buckets, train_buckets_scale = _get_buckets()
# in train mode, we need to create the backward path, so forwrad_only is False

model = ChatBotModel(False, config.BATCH_SIZE)
model.build_graph()

saver = tf.train.Saver(var_list=tf.trainable_variables())

with tf.Session(config=tf.ConfigProto(allow_soft_placement=True,log_device_placement=True)) as sess:
    print('Start training')

    sess.run(tf.global_variables_initializer())
    _check_restore_parameters(sess, saver)

    iteration = model.global_step.eval()
    total_loss = 0
    while True:

        skip_step = _get_skip_step(iteration)
        bucket_id = _get_random_bucket(train_buckets_scale)
        encoder_inputs, decoder_inputs, decoder_masks = data.get_batch(data_buckets[bucket_id], 
                                                                       bucket_id,
                                                                       batch_size=config.BATCH_SIZE)
        start = time.time()
        _, step_loss, _ = run_step(sess, model, encoder_inputs, decoder_inputs, decoder_masks, bucket_id, False)
        total_loss += step_loss
        iteration += 1

        if iteration % skip_step == 0:
            print('Итерация {}: потеря {}, время {}'.format(iteration, total_loss/skip_step, time.time() - start))
            start = time.time()
            total_loss = 0
            saver.save(sess, os.path.join(config.CPT_PATH, 'chatbot'), global_step=model.global_step)
            if iteration % (10 * skip_step) == 0:
                # Run evals on development set and print their loss
                _eval_test_set(sess, model, test_buckets)
                start = time.time()
            sys.stdout.flush()

Но это всегда показывает:

InvalidArgumentError (see above for traceback): Cannot assign a device to node 'save/Const': Could not satisfy explicit device specification '/device:GPU:0' because no supported kernel for GPU devices is available.

Colocation Debug Info: Colocation группа имела следующие типы и устройства: Const: CPU Identity: CPU [[Node: save/Const = Constdtype=DT_STRING, value=Tensor, _device="/device:GPU:0"]]

Есть ли файл конфигурации для тензорного потока, в котором я могу указать использовать только графический процессор или каким-либо другим способом (я пробовал "с tf.device("/gpu:0"):" и device_count={'GPU': 1})) )


person Никита Иванюшкин    schedule 09.10.2017    source источник


Ответы (1)


Из вашей ошибки:

Не удалось удовлетворить явную спецификацию устройства «/device:GPU:0», так как недоступно поддерживаемое ядро ​​для устройств GPU.

Это означает, что операция 'save/Const' не может быть принудительно назначена графическому процессору через with tf.device():, потому что для нее нет реализации графического процессора. Удалите часть with tf.device(): (или поместите эту операцию за ее пределы) и позвольте TF решить, куда поместить операции (в любом случае он предпочтет GPU, а не CPU)

person GPhilo    schedule 09.10.2017
comment
Я сделал это, но tensorflow выбирает CPU вместо GPU - person Никита Иванюшкин; 09.10.2017
comment
Учитывая, что вы не показали, как выглядит ваша модель, я не могу помочь с особенностями того, почему операции заканчиваются на ЦП. Некоторые операции могут быть только на ЦП (например, сохранение, которое выдает вашу ошибку), в то время как большинство вычислений имеют реализацию как ЦП, так и ГП. Как будут выглядеть выходные данные, если вы включите ведение журнала размещения устройств? - person GPhilo; 09.10.2017
comment
Все, что находится на /job:localhost/replica:0/task:0/gpu:0, назначается (и запускается) на вашем GPU. - person GPhilo; 09.10.2017
comment
Вывод заканчивается на encoder2: (Placeholder): /job:localhost/replica:0/task:0/cpu:0 encoder1: (Placeholder): /job:localhost/replica:0/task:0/cpu:0 training/GradientDescent/value: (Const): /job:localhost/replica:0/task:0/cpu:0 И обучение идет очень медленно - person Никита Иванюшкин; 09.10.2017
comment
Автор этого чат-бота упомянул, что обучал его на GPU, но не объяснил как, я пытался это сделать. Вот статья web.stanford.edu/class/cs20si/assignments/a3. pdf - person Никита Иванюшкин; 09.10.2017
comment
Из (удаленных) комментариев, которые вы разместили, я вижу, что у вас действительно есть операции на графическом процессоре. Однако обратите внимание, что не все операции могут быть размещены на графическом процессоре. Журнал сообщает вам, где находится каждая операция на графике, поэтому не имеет значения, как она заканчивается, это просто последние операции, выполненные на графике. Что касается того, почему обучение медленное, это может зависеть от миллиона вещей, но неиспользование графического процессора — это не ваш случай (хотя возможно, что графический процессор используется не на полную мощность. Оптимизировать код тензорного потока не так просто) - person GPhilo; 09.10.2017