Sensorflow: GPU-Auslastung liegt fast immer bei 0%
Ich verwende Tensorflow mit Titan-X-GPUs und habe festgestellt, dass beim Ausführen des CIFAR10-Beispiels dasVolatile GPU-utilization
ist ziemlich konstant um 30%, während wenn ich mein eigenes Modell trainiere, dieVolatile GPU-utilization
ist alles andere als konstant, es ist fast immer 0% und erreicht Spitzenwerte von 80/90%, bevor es immer wieder auf 0% zurückgeht.
Ich dachte, dass dieses Verhalten auf die Art und Weise zurückzuführen ist, in der ich die Daten in das Netzwerk eingespeist habe (ich habe die Daten nach jedem Schritt abgerufen, was einige Zeit in Anspruch nahm). Nach dem Implementieren einer Warteschlange, um die Daten zu füttern und diese Latenz zwischen den Schritten zu vermeiden, bestand das Problem weiterhin (siehe unten für das Warteschlangensystem).
Irgendeine Idee
batch = 128 # size of the batch
x = tf.placeholder("float32", [None, n_steps, n_input])
y = tf.placeholder("float32", [None, n_classes])
# with a capacity of 100 batches, the bottleneck should not be the data feeding
queue = tf.RandomShuffleQueue(capacity=100*batch,
min_after_dequeue=80*batch,
dtypes=[tf.float32, tf.float32],
shapes=[[n_steps, n_input], [n_classes]])
enqueue_op = queue.enqueue_many([x, y])
X_batch, Y_batch = queue.dequeue_many(batch)
sess = tf.Session()
def load_and_enqueue(data):
while True:
X, Y = data.get_next_batch(batch)
sess.run(enqueue_op, feed_dict={x: X, y: Y})
train_thread = threading.Thread(target=load_and_enqueue, args=(data))
train_thread.daemon = True
train_thread.start()
for _ in xrange(max_iter):
sess.run(train_op)