Versi: nightly prebuilt untuk Python2 w/ GPU (baru saja)
Saya mengharapkan kode berikut untuk mencetak "10.0" 3 kali, tetapi session.run macet di semua proses bercabang.
import tensorflow as tf
import multiprocessing as mp
import os
class Worker(mp.Process):
def __init__(self, gid):
self.gid = gid
super(Worker, self).__init__()
def run(self):
G = tf.Graph()
with G.as_default():
x = tf.placeholder(tf.float32, shape=[])
y = x * 2
sess = tf.Session()
print sess.run(y, feed_dict={x: 5})
G = tf.Graph()
with G.as_default():
sess = tf.Session()
with sess.as_default():
x = tf.placeholder(tf.float32, shape=[])
y = x * 2
print sess.run(y, feed_dict={x: 5})
procs = [Worker(k) for k in range(2)]
for p in procs: p.start()
for p in procs: p.join()
Menghapus grafik/sesi dalam proses master akan menyelesaikan masalah. Jadi sepertinya begitu ada sesi, kita tidak bisa menggunakan fork?
Masalahnya ada dengan dan tanpa GPU.
CATATAN: kode ini tidak berakhir secara normal. Anda mungkin perlu mematikan proses bercabang secara manual setelah master keluar.
Sesi dalam proses (yaitu tf.Session()
tanpa argumen) tidak dirancang untuk menjadi fork()
-aman. Jika Anda ingin berbagi satu set perangkat di antara beberapa proses, buat tf.train.Server
dalam satu proses, dan buat sesi yang terhubung ke server itu (dengan tf.Session("grpc://...")
) di proses lain.
@mrry Apakah itu berarti ada cara untuk membuat fork
safe tf.Session
dengan tf.Session(args)
?
@mavenlin
Prototipe tf.Session
adalah
tf.Session.__init__(target='', graph=None, config=None)
Di sini target
mengacu pada mesin eksekusi yang akan dihubungkan. Artinya, seseorang harus menjalankan sesi kerja di proses lain, dalam mode terdistribusi, dan tf.Session
dengan argumen masih tidak fork()
-aman.
Berita buruk.
Komentar yang paling membantu
@mrry Apakah itu berarti ada cara untuk membuat
fork
safetf.Session
dengantf.Session(args)
?