66from smartdispatch import utils
77
88
9- def job_generator_factory (queue , commands , command_params = {}, cluster_name = None ):
9+ def job_generator_factory (queue , commands , command_params = {}, cluster_name = None , base_path = "./" ):
1010 if cluster_name == "guillimin" :
11- return GuilliminJobGenerator (queue , commands , command_params )
11+ return GuilliminJobGenerator (queue , commands , command_params , base_path )
1212 elif cluster_name == "mammouth" :
13- return MammouthJobGenerator (queue , commands , command_params )
13+ return MammouthJobGenerator (queue , commands , command_params , base_path )
1414 elif cluster_name == "helios" :
15- return HeliosJobGenerator (queue , commands , command_params )
15+ return HeliosJobGenerator (queue , commands , command_params , base_path )
1616
17- return JobGenerator (queue , commands , command_params )
17+ return JobGenerator (queue , commands , command_params , base_path )
1818
1919
2020class JobGenerator (object ):
@@ -31,9 +31,10 @@ class JobGenerator(object):
3131 information about the commands
3232 """
3333
34- def __init__ (self , queue , commands , command_params = {}):
34+ def __init__ (self , queue , commands , command_params = {}, base_path = "./" ):
3535 self .commands = commands
3636 self .queue = queue
37+ self .job_log_filename = '"{base_path}/logs/job/"$PBS_JOBID".{{ext}}"' .format (base_path = base_path )
3738
3839 self .nb_cores_per_command = command_params .get ('nb_cores_per_command' , 1 )
3940 self .nb_gpus_per_command = command_params .get ('nb_gpus_per_command' , 1 )
@@ -51,6 +52,9 @@ def generate_pbs(self):
5152 for i , commands in enumerate (utils .chunks (self .commands , n = nb_commands_per_node )):
5253 pbs = PBS (self .queue .name , self .queue .walltime )
5354
55+ # TODO Move the add_options into the JobManager once created.
56+ pbs .add_options (o = self .job_log_filename .format (ext = 'out' ), e = self .job_log_filename .format (ext = 'err' ))
57+
5458 # Set resource: nodes
5559 resource = "1:ppn={ppn}" .format (ppn = len (commands ) * self .nb_cores_per_command )
5660 if self .queue .nb_gpus_per_node > 0 :
@@ -126,6 +130,6 @@ def generate_pbs(self):
126130 # Nb of GPUs has to be a multiple of 2
127131 nb_gpus = int (re .findall ("gpus=([0-9]+)" , pbs .resources ['nodes' ])[0 ])
128132 if nb_gpus % 2 != 0 :
129- pbs .resources ['nodes' ] = re .sub ("gpus=[0-9]+" , "gpus={0}" .format (nb_gpus + 1 ), pbs .resources ['nodes' ])
133+ pbs .resources ['nodes' ] = re .sub ("gpus=[0-9]+" , "gpus={0}" .format (nb_gpus + 1 ), pbs .resources ['nodes' ])
130134
131135 return pbs_list
0 commit comments