Пример использования нескольких графических процессоров 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))
С уважением