Tensorflow только один GPU активен за раз в обучении MULTI GPU - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь обучить модель CNN, используя механизм параллелизма данных. Я публикую фрагмент кода метода поезда для простоты,

def train_model(file_loc='', data_details='', epochs='',checkpoint='', learning_rate=1e-5):
    train_initializer = data_details['train_it_init']
    test_initializer = data_details['test_it_init']
    iterator = data_details['iterator']

    batch_list = [iterator.get_next()  for _ in range(NUM_GPUS)]

    with tf.device('/cpu:0'):
        num_class=14
        tower_grads = []
        tower_losses = []
        opt =  tf.train.AdamOptimizer(learning_rate)
        dropout_rate = tf.placeholder(tf.float32)
        for i in range(NUM_GPUS):
            with tf.variable_scope(tf.get_variable_scope()):
                with tf.device('/gpu:{}'.format(i)), tf.name_scope('tower_{}'.format(i)) as scope:
                    xbatch, ybatch = batch_list[i]
                    total_loss = tower_loss(scope, xbatch, ybatch, dropout_rate=dropout_rate)
                    tower_grads.append(opt.compute_gradients(total_loss))

        avg_grads = average_gradients(tower_grads)
        train_op = opt.apply_gradients(avg_grads)

Я пытаюсь использовать 4 GPU (NUM_GPUS), но проблема в том, что одновременно активен только 1 GPU. Кажется, каждый графический процессор выполняет свою работу, но в последовательном порядке. Я не могу понять, почему он так себя ведет. Я использую набор данных api, итератор и инициализатор итератора находятся в словаре data_details (проверено, работает), а вывод модели вызывается внутри вызова метода tower_loss (..) в рамках определенной переменной и области имен. Любое предложение будет очень полезно. Мой GPU использует, как показано ниже, Использование GPU gpu usage

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...