2016-10-12 6 views
1

Lassen Sie uns sagen, dass ich die folgende Codezeile in TensorFlow (Python-Schnittstelle) haben:Parallelisiert TensorFlow unabhängige Operationen automatisch?

z = tf.matmul(W_1,x_1) + tf.matmul(W_2,x_2) + ... + tf.matmul(W_N, x_N) + b 

Alle oben genannten N-Operationen sind unabhängig, und das Ergebnis wird in z gesammelt. Wird TensorFlow zum Beispiel N Kernel unabhängig starten und dann das Ergebnis akkumulieren, oder wird N Operationen in Serie verarbeiten?

Ich frage, weil dies einen Einfluss darauf hat, wie viel Aufwand ich aufwenden muss, um Operationen zu vektorisieren, auf Kosten von reduzierter Lesbarkeit und Bequemlichkeit. Ich hoffe, dass TF alle N-GPU-Kernel asynchron startet, die Ausgabe in z akkumuliert und das Ergebnis zurückgibt.

Darüber hinaus vorausgesetzt, TF verarbeitet die obige Aussage parallel, gibt es irgendwelche Einschränkungen? Wenn ich beispielsweise z in einer for-Schleife (oder über mehrere Zeilen mit intermediären Variablen) ansammeln würde, würde ich diesen Vorteil verlieren?

Antwort

1

Ja, es läuft mehrere Pfade der Berechnung eines einzigen session.run Aufruf parallel, gesteuert von num_inter_device_parallelism_threads Parameter. Sie können tf.add_n für Ihre Summe verwenden. Wenn Sie mehrere session.run haben, müssen Sie die Dinge selbst parallelisieren, indem Sie sie beispielsweise in separaten Python-Threads starten.

Verwandte Themen