Ich versuche einen Weg zu finden, meinen Code zu beschleunigen.TensorFlow Parallel CPU mit Numpy
Kurz gesagt, ich habe ein trainiertes Modell, das ich benutze, um Vorhersagen zu erhalten, sie zu sortieren und einen Rang auszugeben.
def predict(feed_dict, truth):
# Feed dict contains about 10K candidates to obtain scores
pred = self.sess.run([self.mdl.predict_op], feed_dict)
pred = np.array(pred)
# With the scores, I sort them by likelihood
sort = np.argsort(pred)[::-1]
# I find the rank of the ground truth
rank = np.where(sort==truth)[0][0] + 1
return rank
Dieser Prozess ist jedoch extrem langsam. Ich habe ungefähr 10K Testproben. Ich glaube, Session funktioniert nicht gut mit Standard-Multiprocessing-Bibliotheken in Python, während die Multi-CPU/GPU-Unterstützung nur für Tensorflow-Ops verfügbar ist.
Gibt es eine elegante Möglichkeit, dies über Multiprocessing zu beschleunigen? Oder muss ich es als Teil des Berechnungsgraphen in TF implementieren.
Vielen Dank!
, welcher Teil ist zu langsam? –
BTW, 'tf.nn.top_k (pred) [1]' ist das gleiche wie deine 'np.argsort' Zeile. Wenn Sie alles in TF-Graphen umwandeln, brauchen Sie kein Multiprocessing - parallele 'session.run'-Aufrufe können von verschiedenen Python-Threads im selben Prozess gestartet werden. –
Das kommt langsam von der Tatsache, dass ich diese 10K + mal jedes Mal entweder auf den gültigen oder Test-Set anrufen muss. – op10no4