2016-09-19 17 views
8

टेंसरफ्लो में, मैं विभिन्न मशीनों पर विभिन्न श्रमिकों में एक फ़ाइल नाम कतार साझा करना चाहता हूं, जैसे कि प्रत्येक मशीन को ट्रेनों के लिए सबसेट मिल सकता है। मैंने बहुत कुछ खोजा, और ऐसा लगता है कि साझा करने के लिए पीएस कार्य पर केवल चर लगाया जा सकता है। क्या किसी के पास कोई उदाहरण है? धन्यवाद।वितरित टेंसरफ्लो में, क्या अलग-अलग श्रमिकों में एक ही कतार साझा करना संभव है?

उत्तर

16

कतार बनाने के दौरान वैकल्पिक shared_name तर्क सेट करके, श्रमिकों में एक ही कतार साझा करना संभव है। जैसे tf.Variable ऑब्जेक्ट्स के साथ, आप कतार को किसी भी डिवाइस पर रख सकते हैं जिसे विभिन्न श्रमिकों से एक्सेस किया जा सकता है।

with tf.device("/job:ps/task:0"): # Place queue on parameter server. 
    q = tf.FIFOQueue(..., shared_name="shared_queue") 

कुछ नोट: उदाहरण के लिए:

  • shared_name के लिए मूल्य विशेष कतार है कि आप साझा कर रहे हैं करने के लिए अद्वितीय होना चाहिए। दुर्भाग्यवश, पाइथन एपीआई वर्तमान में इसे आसान बनाने के लिए स्कोपिंग या स्वचालित नाम uniqification का उपयोग नहीं करता है, इसलिए आपको इसे मैन्युअल रूप से सुनिश्चित करना होगा।

  • आपको पैरामीटर सर्वर पर कतार रखने की आवश्यकता नहीं है। एक संभावित कॉन्फ़िगरेशन एक अतिरिक्त "इनपुट जॉब" स्थापित करना होगा (उदा। "/job:input") जिसमें प्री-प्रोसेसिंग करने वाले कार्यों का एक सेट होता है, और श्रमिकों के उपयोग के लिए साझा कतार निर्यात करता है।

+0

बहुत बढ़िया! आपका बहुत बहुत धन्यवाद! – kopopt

+0

जब मैं 'tf.train.string_input_producer' और' tf.train.shuffle_batch' (अद्वितीय 'साझा_नाम' दोनों के साथ' ''/job: input '' का उपयोग करता हूं, तो यह केवल तभी काम करता है जब 'num_epochs' को 'none' पर सेट किया जाता है '। जब 'num_epochs! = कोई नहीं 'मुझे' tensorflow.python.framework.errors_impl.CancelledError मिलता है: RandomShuffleQueue' shared_shuffle_batch 'बंद है। त्रुटि। "इनपुट जॉब" या क्यूस को कैसे कॉन्फ़िगर करें, तो क्या मैं एक ही साझा कतार और एक ही युग से श्रमिकों को पढ़ सकता हूं? (उदाहरण के लिए डेटा-समांतर-ग्राफ प्रतिकृति वितरित प्रशिक्षण के बीच) – MtDersvan

संबंधित मुद्दे