यह अपेक्षाकृत सरल है।
को सरल बनाने मान्यताओं आप मेजबान प्रति एक प्रक्रिया अनुरोध है कि के तहत
, slurm सभी जानकारी आप वातावरण चर, विशेष रूप से SLURM_PROCID, SLURM_NPROCS और SLURM_NODELIST में आवश्यकता के साथ प्रदान करेगा। (जैसे, "myhost
from hostlist import expand_hostlist
task_index = int(os.environ['SLURM_PROCID'])
n_tasks = int(os.environ['SLURM_NPROCS'])
tf_hostlist = [ ("%s:22222" % host) for host in
expand_hostlist(os.environ['SLURM_NODELIST']) ]
ध्यान दें कि slurm आप अपने संकुचित प्रारूप में एक मेजबान सूची प्रदान करती है [11:
उदाहरण के लिए, यदि आप अपने काम सूचकांक, कार्यों की संख्या और nodelist इस प्रकार प्रारंभ कर सकते हैं -99] "), कि आपको विस्तार करने की जरूरत है। मैं केंट Engström द्वारा मॉड्यूल hostlist के साथ उपलब्ध यहाँ https://pypi.python.org/pypi/python-hostlist
है कि, उस समय, आप सही आगे जाना है और जानकारी उपलब्ध है, जैसे के साथ अपने TensorFlow क्लस्टर विनिर्देश और सर्वर बना सकते हैं:
cluster = tf.train.ClusterSpec({"your_taskname" : tf_hostlist })
server = tf.train.Server(cluster.as_cluster_def(),
job_name = "your_taskname",
task_index = task_index)
और आप सेट हैं! अब आप सामान्य वाक्य रचना के साथ अपने आवंटन की एक विशिष्ट मेजबान पर TensorFlow नोड नियुक्ति प्रदर्शन कर सकते हैं:
for idx in range(n_tasks):
with tf.device("/job:your_taskname/task:%d" % idx):
...
कोड ऊपर सूचना के साथ एक दोष है कि अपने सभी नौकरियों निश्चित पोर्ट 22222 पर सुनने सर्वर स्थापित करने के लिए Tensorflow निर्देश देगा है। यदि ऐसी कई नौकरियों को एक ही नोड पर निर्धारित किया जाना है, तो दूसरा 22222 सुनने में विफल रहेगा।
एक बेहतर समाधान प्रत्येक नौकरी के लिए स्लरम रिजर्व बंदरगाहों को देना है। आपको अपने स्लरम व्यवस्थापक को बोर्ड पर लाने की आवश्यकता है और उसे स्लरम कॉन्फ़िगर करने के लिए कहें ताकि यह आपको --resv-port विकल्प के साथ बंदरगाहों के लिए पूछने की अनुमति दे। के साथ अपने slurm व्यवस्थापक
MpiParams=ports=15000-19999
आप बग से पहले, जाँच क्या विकल्प पहले से ही कॉन्फ़िगर किया गया है, जैसे,:
scontrol show config | grep MpiParams
व्यवहार में, यह उनकी slurm.conf में निम्नलिखित की तरह एक पंक्ति जोड़ने के लिए उन्हें पूछ की आवश्यकता है
यदि आपकी साइट पहले से ही ओपनएमपीआई के पुराने संस्करण का उपयोग करती है, तो ऐसा मौका है कि इस तरह का विकल्प पहले से ही मौजूद है।
फिर, कोड की मेरी पहली टुकड़ा संशोधन इस प्रकार है:
from hostlist import expand_hostlist
task_index = int(os.environ['SLURM_PROCID'])
n_tasks = int(os.environ['SLURM_NPROCS'])
port = int(os.environ['SLURM_STEP_RESV_PORTS'].split('-')[0])
tf_hostlist = [ ("%s:%s" % (host,port)) for host in
expand_hostlist(os.environ['SLURM_NODELIST']) ]
गुड लक!
[निरंतर एकीकरण साइट] पर जानकारी (http://ci.tensorflow.org/) मदद की हो सकती है। इसके अलावा [रीडमी] (https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/tools/ci_build/README.md) –
मैं Slurm और डोकर की Google क्वेरी भाग गया और वहाँ एक से अधिक परिणाम थे। –
क्या आपको विशिष्ट स्रोत मिलते हैं? यदि हां, तो कृपया उन्हें साझा करें। बेशक Google कुछ पृष्ठों को सूचीबद्ध करता है लेकिन मुझे स्लेरम नौकरी के माध्यम से अपने पायथन-एपीआई के साथ टेंसरफ्लो चलाने के बारे में कोई सुझाव, ट्यूटोरियल या आधिकारिक जानकारी नहीं मिल पाई। – daniel451