Пример использования нескольких графических процессоров CIFAR10 занимает больше времени по мере увеличения количества графических процессоров. Я использую восемь Tesla K80 GPU

Я использую пример Multi GPU CIFAR10. Я заметил, что по мере увеличения количества графических процессоров в этом примере время, затрачиваемое на обучение, увеличивается.

Команда nvidia-smi -l 1 показывает ожидаемое использование и поведение графических процессоров, но время, затрачиваемое на обучение модели, занимает больше времени при большем количестве графических процессоров, что является неожиданным.

Я не знаю, пропускаю ли я какие-либо настройки конфигурации перед запуском примера. Я также попытался запустить MNIST на нескольких графических процессорах, и я столкнулся с аналогичной проблемой с графическим процессором. В основном я пытался собрать статистику для нескольких графических процессоров.

Поскольку я увеличиваю количество графических процессоров, давая значения for i in xrange(num_gpus): Я вижу, что больше времени уходит. Что-то не так с кодом?

start_time = time.time()

def train ():

with tf.device('/cpu:0'):

    x = tf.placeholder(tf.float32, [None, 784])

    W = tf.Variable(tf.zeros([784, 10]))
    b = tf.Variable(tf.zeros([10]))

    #y = tf.nn.softmax(tf.matmul(x, W) + b)

    y_ = tf.placeholder(tf.float32, [None, 10])

    global_step = tf.get_variable( 'global_step', [], initializer=tf.constant_initializer(0), trainable=False)

    op = tf.train.GradientDescentOptimizer(0.5)

for i in xrange(4):
        with tf.device('/gpu:%d' % i):
          with tf.name_scope('%s_%d' % (TOWER_NAME, i)) as scope:


                #batch_xs, batch_ys = mnist.train.next_batch(100)
                #batch_xs, batch_ys = queue.dequeue_many(100)
                y = tf.nn.softmax(tf.matmul(x, W) + b)
                #print(batch_xs)

                cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
                tower_gradient = op.compute_gradients(cross_entropy)
                tower_grads.append(tower_gradient)

grads = average_gradients(tower_grads)
apply_gradient_op = op.apply_gradients(grads, global_step=global_step)

sess = tf.InteractiveSession(config=tf.ConfigProto(allow_soft_placement=True, log_device_placement=True))
#coord = tf.train.Coordinator()
#enqueue_threads = qr.create_threads(sess, coord=coord, start=True)
tf.global_variables_initializer().run()
for _ in range(1000):
    data_batch, label_batch = mnist.train.next_batch(100)
    #data_batch, label_batch = sess.run([batch_xs,batch_ys])
    sess.run(apply_gradient_op,feed_dict={x:data_batch, y_:label_batch})
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))
#coord.request_stop()
#coord.join(enqueue_threads)
sess.close()

train()
print("--- %s seconds ---" % (time.time() - start_time))

С уважением

0 ответов

Другие вопросы по тегам