الإصدار: تم إنشاؤه ليليًا مسبقًا لـ Python2 w / GPU (الآن)
أتوقع أن يطبع الكود التالي "10.0" 3 مرات ، لكن session.run تعطلت في جميع العمليات المتشعبة.
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()
ستؤدي إزالة الرسم البياني / الجلسة في العملية الرئيسية إلى حل المشكلة. لذلك يبدو أنه بمجرد وجود جلسة ، لا يمكننا استخدام الشوكة؟
توجد المشكلة مع GPU وبدونه.
ملاحظة: هذا الرمز لا ينتهي بشكل طبيعي. ستحتاج على الأرجح إلى إنهاء العمليات المتشعبة يدويًا بعد خروج السيد.
لم يتم تصميم الجلسة قيد المعالجة (على سبيل المثال tf.Session()
بدون وسيطات) لتكون fork()
-safe. إذا كنت ترغب في مشاركة مجموعة من الأجهزة بين عمليات متعددة ، فأنشئ tf.train.Server
في عملية واحدة ، وأنشئ جلسات تتصل بهذا الخادم (مع tf.Session("grpc://...")
) في العمليات الأخرى.
mrry هل هذا يعني أن هناك طريقة لإنشاء fork
آمن tf.Session
مع tf.Session(args)
؟
تضمين التغريدة
النموذج الأولي لـ tf.Session
هو
tf.Session.__init__(target='', graph=None, config=None)
هنا يشير target
إلى محرك التنفيذ الذي يجب الاتصال به. أي ، يجب على المرء تشغيل جلسة العمل في عملية أخرى ، في الوضع الموزع ، و tf.Session
مع الوسائط لا تزال غير آمنة fork()
.
خبر حزين.
التعليق الأكثر فائدة
mrry هل هذا يعني أن هناك طريقة لإنشاء
fork
آمنtf.Session
معtf.Session(args)
؟