Changeset 213


Ignore:
Timestamp:
03/18/10 16:28:02 (6 years ago)
Author:
mmckerns
Message:

allow settable tmpfile directory, to better deal with queue launches;
allow type and ppn config within setting for 'nnodes' (e.g. '3:core4:ppn=2');
updated QSUB example to use compound nodestring

Files:
7 edited

Legend:

Unmodified
Added
Removed
  • branches/UQ/math/examples/QSUB_surrogate_diam_batchgrid.py

    r209 r213  
    6262 
    6363# MPI config 
    64 nnodes = 4   # = npop 
     64nnodes = '4:core4:ppn=1'   # = npop 
    6565 
    6666# QUEUE config 
    67 queue = 'normal' 
     67queue = 'weekdayQ' 
    6868timelimit = '00:10' 
    6969 
  • pyina/applications/ezrun.py

    r198 r213  
    2323        func = pickle.load(open(funcname,'r')) 
    2424    else:  # used ez_map 
     25        sys.path = [sys.argv[4]] + sys.path 
    2526        module = __import__(funcname) 
     27        sys.path.pop(0) 
    2628        func = module.FUNC 
    2729    arglist = pickle.load(open(sys.argv[2],'r')) 
  • pyina/applications/ezrun2.py

    r198 r213  
    2323        func = pickle.load(open(funcname,'r')) 
    2424    else:  # used ez_map 
     25        sys.path = [sys.argv[4]] + sys.path 
    2526        module = __import__(funcname) 
     27        sys.path.pop(0) 
    2628        func = module.FUNC 
    2729    arglist = pickle.load(open(sys.argv[2],'r')) 
  • pyina/examples_other/test_ezmap.py

    r205 r213  
    88    return "Rank: %d -- %s" % (id, socket.gethostname()) 
    99 
    10 res = ez_map(host, range(5), nnodes=10, mapper=carddealer_mapper)  
     10res = ez_map(host, range(10), nnodes=3, mapper=carddealer_mapper)  
     11#res = ez_map(host, range(10), nnodes=3, mapper=equalportion_mapper)  
    1112#res = ez_map(host, range(5), nnodes=2, mapper=carddealer_mapper) 
     13#res = ez_map(host, range(5), nnodes=2, mapper=equalportion_mapper) 
     14#res = ez_map(host, range(5), nnodes=10, mapper=carddealer_mapper)  
     15#res = ez_map(host, range(5), nnodes=10, mapper=equalportion_mapper)  
     16#NOTE: bug?  map algorithm performs correctly when nnodes > range ??? 
    1217 
    1318print '\n'.join(res) 
  • pyina/pyina/differential_evolution_ezmap.py

    r209 r213  
    431431        self._launcher     = None 
    432432        self._nnodes       = None 
     433        self._queue        = None 
     434        self._timelimit    = None 
    433435 
    434436    def SetMapper(self, mapper): 
  • pyina/pyina/ez_map.py

    r212 r213  
    7979    import dill as pickle #XXX: to address costfactories 
    8080    import tempfile 
    81     #pickle.dump(src(func), file) 
    82     file = tempfile.NamedTemporaryFile(suffix='.py', dir='.') 
     81    #XXX: assumes '.' is writable and on $PYTHONPATH 
     82    file = tempfile.NamedTemporaryFile(suffix='.py', dir=ezdefaults['tmpdir']) 
    8383    file.write(''.join(src(func))) 
    8484    file.write('FUNC = %s\n' % func.func_name) 
     
    100100              'python' : '`which mpipython.exe`' , 
    101101              'nodes' : '1', 
    102               'progargs' : '' 
     102              'progargs' : '', 
     103              'tmpdir' : '.' 
    103104            } 
    104105 
     
    109110    import dill as pickle 
    110111    import tempfile 
    111     file = tempfile.NamedTemporaryFile(suffix=suffix, dir='.') 
     112    file = tempfile.NamedTemporaryFile(suffix=suffix, dir=ezdefaults['tmpdir']) 
    112113    pickle.dump(arglist, file) 
    113114    file.flush() 
     
    132133  - queue -- string name of selected queue (e.g. 'normal') 
    133134""" 
     135    import dill as pickle 
     136    import os.path, tempfile, os 
    134137    # mapper = None (allow for use of default mapper) 
    135138    if kwds.has_key('mapper'): 
     
    146149    if kwds.has_key('launcher'): launcher = kwds['launcher'] 
    147150    else: launcher = mpirun_launcher  #XXX: default = non_mpi? 
    148  
    149     import dill as pickle 
    150     import os.path, tempfile, os 
     151    # set scratch directory (most often required for queue launcher) 
     152    if kwds.has_key('tmpdir'): ezdefaults['tmpdir'] = kwds['tmpdir'] 
     153    else: 
     154        if launcher in [torque_launcher]: 
     155            ezdefaults['tmpdir'] = os.path.expanduser("~") 
     156 
    151157    modfile = func_pickle(func) 
    152158    argfile = arg_pickle(arglist) 
    153     resfilename = tempfile.mktemp(dir='.') 
     159    resfilename = tempfile.mktemp(dir=ezdefaults['tmpdir']) 
    154160    modname = os.path.splitext(os.path.basename(modfile.name))[0]  
    155     ezdefaults['progargs'] = ' '.join([modname, argfile.name, resfilename]) 
     161    ezdefaults['progargs'] = ' '.join([modname, argfile.name, resfilename, \ 
     162                                       ezdefaults['tmpdir']]) 
    156163    #HOLD.append(modfile) 
    157164    #HOLD.append(argfile) 
    158165 
    159166    if launcher == torque_launcher: 
    160         jobfilename = tempfile.mktemp(dir='.') 
    161         outfilename = tempfile.mktemp(dir='.') 
    162         errfilename = tempfile.mktemp(dir='.') 
     167        jobfilename = tempfile.mktemp(dir=ezdefaults['tmpdir']) 
     168        outfilename = tempfile.mktemp(dir=ezdefaults['tmpdir']) 
     169        errfilename = tempfile.mktemp(dir=ezdefaults['tmpdir']) 
    163170        ezdefaults['jobfile'] = jobfilename 
    164171        ezdefaults['outfile'] = outfilename 
     
    194201same functionality as ez_map, however function 'func' and arguments 'arglist' 
    195202are stored and sent as pickled strings.""" 
     203    import dill as pickle 
     204    import os.path, tempfile, os 
    196205    # mapper = None (allow for use of default mapper) 
    197206    if kwds.has_key('mapper'): 
     
    208217    if kwds.has_key('launcher'): launcher = kwds['launcher'] 
    209218    else: launcher = mpirun_launcher  #XXX: default = non_mpi? 
    210  
    211     import dill as pickle 
    212     import os.path, tempfile, os 
     219    # set scratch directory (most often required for queue launcher) 
     220    if kwds.has_key('tmpdir'): ezdefaults['tmpdir'] = kwds['tmpdir'] 
     221    else: 
     222        if launcher in [torque_launcher]: 
     223            ezdefaults['tmpdir'] = os.path.expanduser("~") 
     224 
    213225    modfile = func_pickle2(func) 
    214226    argfile = arg_pickle(arglist) 
    215     resfilename = tempfile.mktemp(dir='.') 
    216     ezdefaults['progargs'] = ' '.join([modfile.name, argfile.name, resfilename]) 
     227    resfilename = tempfile.mktemp(dir=ezdefaults['tmpdir']) 
     228    ezdefaults['progargs'] = ' '.join([modfile.name,argfile.name,resfilename, \ 
     229                                       ezdefaults['tmpdir']]) 
    217230    #HOLD.append(modfile) 
    218231    #HOLD.append(argfile) 
    219232 
    220233    if launcher == torque_launcher: 
    221         jobfilename = tempfile.mktemp(dir='.') 
    222         outfilename = tempfile.mktemp(dir='.') 
    223         errfilename = tempfile.mktemp(dir='.') 
     234        jobfilename = tempfile.mktemp(dir=ezdefaults['tmpdir']) 
     235        outfilename = tempfile.mktemp(dir=ezdefaults['tmpdir']) 
     236        errfilename = tempfile.mktemp(dir=ezdefaults['tmpdir']) 
    224237        ezdefaults['jobfile'] = jobfilename 
    225238        ezdefaults['outfile'] = outfilename 
  • pyina/pyina/launchers.py

    r212 r213  
    1616    if error: raise IOError, "launch failed" 
    1717    return error 
     18 
    1819     
     20def tasks(nodes): 
     21    """ compute # of tasks from node string of pattern = N[:TYPE][:ppn=P] 
     22    For example, tasks("3:core4:ppn=2") yields 6 """ 
     23    nodestr = str(nodes) 
     24    nodelst = nodestr.split(":") 
     25    n = int(nodelst[0]) 
     26    nodelst = nodestr.split("ppn=") 
     27    if len(nodelst) > 1: 
     28        ppn = nodelst[1] 
     29        ppn = int(ppn.split(":")[0]) 
     30    else: ppn = 1 
     31    tasks =  n*ppn 
     32    return tasks 
     33 
    1934 
    2035def serial_launcher(kdict={}): 
     
    5368    mydict = defaults.copy() 
    5469    mydict.update(kdict) 
    55     str = """ echo \"mpirun -np %(nodes)s %(python)s %(file)s %(progargs)s\" | qsub -l nodes=%(nodes)s -l walltime=%(timelimit)s -o %(outfile)s -e %(errfile)s -q %(queue)s &> %(jobfile)s""" % mydict 
    56     #XXX: would be nice to allow "-l nodes=x:ppn=y" in qsub 
     70    mydict['tasks'] = tasks(mydict['nodes']) 
     71    str = """ echo \"mpirun -np %(tasks)s %(python)s %(file)s %(progargs)s\" | qsub -l nodes=%(nodes)s -l walltime=%(timelimit)s -o %(outfile)s -e %(errfile)s -q %(queue)s &> %(jobfile)s""" % mydict 
    5772    return str 
    5873 
Note: See TracChangeset for help on using the changeset viewer.