Tensorflow: توقفت الجلسة بعد الشوكة

تم إنشاؤها على ٢١ مايو ٢٠١٦  ·  3تعليقات  ·  مصدر: tensorflow/tensorflow

الإصدار: تم إنشاؤه ليليًا مسبقًا لـ 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 وبدونه.

ملاحظة: هذا الرمز لا ينتهي بشكل طبيعي. ستحتاج على الأرجح إلى إنهاء العمليات المتشعبة يدويًا بعد خروج السيد.

التعليق الأكثر فائدة

mrry هل هذا يعني أن هناك طريقة لإنشاء fork آمن tf.Session مع tf.Session(args) ؟

ال 3 كومينتر

لم يتم تصميم الجلسة قيد المعالجة (على سبيل المثال 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() .

خبر حزين.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات