Multi-GPU-Ausbildung in Tensorflow (Data Parallelism), bei Verwendung feed_dict
Möchte ich für die Verwendung mehrerer GPUs zu trainieren, meine Tensorflow Modell unter Ausnutzung von datenparallelität.
Ich bin derzeit training ein Tensorflow Modell mit den folgenden Ansatz:
x_ = tf.placeholder(...)
y_ = tf.placeholder(...)
y = model(x_)
loss = tf.losses.sparse_softmax_cross_entropy(labels=y_, logits=y)
optimizer = tf.train.AdamOptimizer()
train_op = tf.contrib.training.create_train_op(loss, optimizer)
for i in epochs:
for b in data:
_ = sess.run(train_op, feed_dict={x_: b.x, y_: b.y})
Ich würde gerne nutzen von mehreren Grafikkarten zu trainieren, dieses Modell in einem Daten parallelisieren Art und Weise. also möchte ich spaltete meine batches in der Hälfte, und führen Sie jede Hälfte batch auf einem meiner zwei GPUs.
cifar10_multi_gpu_train scheint ein gutes Beispiel für das erstellen eines Verlusts, der zieht aus Graphen die Ausführung auf mehreren Grafikkarten, aber ich habe nicht gefunden eine, gute Beispiele zu tun, diese Art von training bei der Verwendung feed_dict
und placeholder
im Gegensatz zu einem data loader-queue.
UPDATE
Scheint: https://timsainb.github.io/multi-gpu-vae-gan-in-tensorflow.html vielleicht ein gutes Beispiel. Sie scheinen zu ziehen, in average_gradients
aus cifar10_multi_gpu_train.py
und erstellen Sie einen Platzhalter, die Sie dann in Scheiben schneiden, in die für jede der GPUs.
Ich denke, Sie müssen auch split create_train_op
sich in drei Stufen: compute_gradients
, average_gradients
und dann apply_gradients
.
- Ich habe es geschafft, die Wiederverwendung der cifar Beispiel auf mnist. Es ist langsam und die Ergebnisse sind nicht spannend. github.com/normanheckscher/mnist-multi-gpu
- Dein Fall sieht sehr ähnlich wie das Beispiel auf dieser Seite: github.com/vahidk/EffectiveTensorflow. Das zweite Beispiel für parallele sollte für Sie arbeiten.
- könnten Sie bewegen Ihren Kommentar zu eine Antwort? Oder, Alex, haben Sie es geschafft, Ihre eigene Frage zu beantworten mit dem link von dir gefunden und wir sollten es in der Antwort?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich kenne drei Arten der Fütterung-Daten auf multi-gpu-Modell.
x
auf die CPU, dann verwenden Sietf.split
splitx
inxs
. Dann auf jedem Turm der GPU, bekommenxs[i]
als Ihre Eingabe.x
auf jeder GPU mit Umfang.tf.data.Dataset
um die feed-Daten. google-offiziellecifar10_multi_gpu_train.py
verwendenQueue
, das ist ähnlich wie mit diesem Weg.