4

Ich habe kürzlich an einem Projekt gearbeitet, das ein neuronales Netzwerk für die virtuelle Robotersteuerung verwendet. Ich habe Tensorflow verwendet, um es zu codieren und es läuft reibungslos. Bisher habe ich sequenzielle Simulationen verwendet, um zu bewerten, wie gut das neuronale Netzwerk ist, jedoch möchte ich mehrere Simulationen parallel ausführen, um die Zeit zu reduzieren, die benötigt wird, um Daten zu erhalten.Tensorflow und Multiprocessing: Passing Sessions

Dazu importiere ich Pythons multiprocessing Paket. Anfangs übergab ich die Variable sess (sess=tf.Session()) an eine Funktion, die die Simulation ausführen würde. Sobald ich jedoch zu einer Anweisung komme, die diese Variable sess verwendet, wird der Prozess ohne Warnung beendet. Nach der Suche nach einem bisschen um, fand ich diese beiden Beiträge: Tensorflow: Passing a session to a python multiprocess und Running multiple tensorflow sessions concurrently

Während sie sehr verwandt sind habe ich nicht in der Lage gewesen, um herauszufinden, wie es funktioniert. Ich habe versucht, für jeden einzelnen Prozess eine Sitzung zu erstellen und die Gewichte des neuronalen Netzes seinen trainierbaren Parametern ohne Erfolg zuzuweisen. Ich habe auch versucht, die Sitzung in eine Datei zu speichern und dann innerhalb eines Prozesses zu laden, aber auch kein Glück.

Kann jemand eine Sitzung (oder Klone von Sitzungen) an mehrere Prozesse übergeben?

Danke.

+0

Ich vermute, dass Sie Klone von Sitzungen nicht zwischen Prozessen übergeben können, da es einen Status im C-Adressraum gibt, den Python nicht kopieren kann. Es sollte jedoch funktionieren, neue Sitzungen in jedem neuen Prozess zu erstellen. Ich habe kein Multiprocessing verwendet, aber ich habe oft mehrere Prozesse parallel geöffnet, die ihre eigenen TensorFlow-Sitzungen behalten –

+0

Die zweite Verbindung, die ich zur Verfügung gestellt habe, führt mehrere Prozesse parallel, aber das Problem ist, dass ich das neurale Netzwerk für das gleiche brauche ALLE Prozesse. – MrRed

+0

Sie können es umgehen, indem Sie TensorFlow verteilt verwenden - dh, Sie haben einen lokalen Arbeiter und ps und erstellen mehrere Sitzungen parallel wie 'tf.Session (" grpc: // localhost: 2222 ")' https://github.com/tensorflow/tensorflow/blob/master/tensorflow/g3doc/how_tos/distributed/index.md –

Antwort

1

Ich benutze Keras als Wrapper mit Tensorflow als gesichert, aber die gleiche allgemeine Prinzip sollte gelten.

Wenn Sie so etwas wie dies versuchen:

import keras 
from functools import partial 
from multiprocessing import Pool 

def ModelFunc(i,SomeData): 
    YourModel = Here 
    return(ModelScore) 

pool = Pool(processes = 4) 
for i,Score in enumerate(pool.imap(partial(ModelFunc,SomeData),range(4))): 
    print(Score) 

Es wird fehlschlagen. Wenn Sie jedoch so etwas versuchen:

from functools import partial 
from multiprocessing import Pool 

def ModelFunc(i,SomeData): 
    import keras 
    YourModel = Here 
    return(ModelScore) 

pool = Pool(processes = 4) 
for i,Score in enumerate(pool.imap(partial(ModelFunc,SomeData),range(4))): 
    print(Score) 

Es sollte funktionieren. Versuchen Sie, Tensorflow für jeden Prozess separat aufzurufen.

+0

das hat gerade meinen Tag gerettet. Vielen Dank! –