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)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage