2016-01-16 13 views
12

मैं कंप्यूटिंग क्लस्टर तक पहुंच प्राप्त कर सकता हूं, विशेष रूप से दो 12-कोर CPUs के साथ एक नोड, जो Slurm Workload Manager के साथ चल रहा है।एक स्लमम क्लस्टर पर टेंसरफ्लो चलाना?

मैं उस सिस्टम पर TensorFlow चलाने के लिए चाहता हूं लेकिन दुर्भाग्य से मैं यह कैसे करना है या यह भी संभव है के बारे में कोई जानकारी नहीं मिल सका। मैं इसके लिए नया हूं लेकिन जहां तक ​​मैं इसे समझता हूं, मुझे स्लरम नौकरी बनाकर टेंसरफ्लो चलाने की ज़रूरत होगी और एसएसएच के माध्यम से सीधे पाइथन/टेन्सफोर्लो को निष्पादित नहीं कर सकता।

क्या इस विषय पर कोई भी विचार, ट्यूटोरियल या किसी भी प्रकार का स्रोत है?

+1

[निरंतर एकीकरण साइट] पर जानकारी (http://ci.tensorflow.org/) मदद की हो सकती है। इसके अलावा [रीडमी] (https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/tools/ci_build/README.md) –

+0

मैं Slurm और डोकर की Google क्वेरी भाग गया और वहाँ एक से अधिक परिणाम थे। –

+1

क्या आपको विशिष्ट स्रोत मिलते हैं? यदि हां, तो कृपया उन्हें साझा करें। बेशक Google कुछ पृष्ठों को सूचीबद्ध करता है लेकिन मुझे स्लेरम नौकरी के माध्यम से अपने पायथन-एपीआई के साथ टेंसरफ्लो चलाने के बारे में कोई सुझाव, ट्यूटोरियल या आधिकारिक जानकारी नहीं मिल पाई। – daniel451

उत्तर

19

यह अपेक्षाकृत सरल है।

को सरल बनाने मान्यताओं आप मेजबान प्रति एक प्रक्रिया अनुरोध है कि के तहत

, 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']) ] 

गुड लक!

2

आप बस एक बैच स्क्रिप्ट slurm को sbatch कमांड के साथ इस तरह के

की तरह पारित कर सकते हैं
sbatch --partition=part start.sh 

सूची उपलब्ध विभाजन sinfo के साथ किया जा सकता है।

start.sh (संभव विन्यास) :

#!/bin/sh 
#SBATCH -N 1  # nodes requested 
#SBATCH -n 1  # tasks requested 
#SBATCH -c 10  # cores requested 
#SBATCH --mem=32000 # memory in Mb 
#SBATCH -o outfile # send stdout to outfile 
#SBATCH -e errfile # send stderr to errfile 
python run.py 

जबकि run.py स्क्रिप्ट आप slurm अर्थात अपने tensorflow कोड के साथ क्रियान्वित किया जा करना चाहते हैं।

आप यहाँ विवरण देख सकते हैं: https://slurm.schedmd.com/sbatch.html

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