LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
lsst.ctrl.pool.parallel.SlurmBatch Class Reference
Inheritance diagram for lsst.ctrl.pool.parallel.SlurmBatch:
lsst.ctrl.pool.parallel.Batch

Public Member Functions

def preamble (self, walltime=None)
 
def submitCommand (self, scriptName)
 Return command to submit script. More...
 
def shebang (self)
 
def preamble (self, command, walltime=None)
 
def execution (self, command)
 
def createScript (self, command, walltime=None)
 Create script to be submitted. More...
 
def run (self, command, walltime=None)
 Run the batch system. More...
 

Static Public Member Functions

def formatWalltime (walltime)
 

Public Attributes

 outputDir
 
 numNodes
 
 numProcsPerNode
 
 numCores
 
 queue
 
 jobName
 
 walltime
 
 dryrun
 
 doExec
 
 mpiexec
 
 submit
 
 options
 
 verbose
 

Detailed Description

Batch submission with Slurm

Definition at line 213 of file parallel.py.

Member Function Documentation

◆ createScript()

def lsst.ctrl.pool.parallel.Batch.createScript (   self,
  command,
  walltime = None 
)
inherited

Create script to be submitted.

    @param command: command to run
    @param walltime: maximum wall clock time, overrides value to constructor
    @return name of script on filesystem

Definition at line 138 of file parallel.py.

138  def createScript(self, command, walltime=None):
139  """!Create script to be submitted
140 
141  @param command: command to run
142  @param walltime: maximum wall clock time, overrides value to constructor
143  @return name of script on filesystem
144  """
145  fd, scriptName = tempfile.mkstemp()
146  with os.fdopen(fd, "w") as f:
147  f.write(self.shebang())
148  f.write('\n')
149  f.write(self.preamble(walltime))
150  f.write('\n')
151  f.write(self.execution(command))
152  f.write('\n')
153 
154  os.chmod(scriptName, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)
155  return scriptName
156 

◆ execution()

def lsst.ctrl.pool.parallel.Batch.execution (   self,
  command 
)
inherited
Return execution string for script to be submitted

Definition at line 117 of file parallel.py.

117  def execution(self, command):
118  """Return execution string for script to be submitted"""
119  script = [exportEnv(),
120  "umask %03o" % UMASK,
121  "cd %s" % pipes.quote(os.getcwd()),
122  ]
123  if self.verbose:
124  script += ["echo \"mpiexec is at: $(which mpiexec)\"",
125  "ulimit -a",
126  "echo 'umask: ' $(umask)",
127  "eups list -s",
128  "export",
129  "date",
130  ]
131  script += ["mpiexec %s %s" % (self.mpiexec, command)]
132  if self.verbose:
133  script += ["date",
134  "echo Done.",
135  ]
136  return "\n".join(script)
137 

◆ formatWalltime()

def lsst.ctrl.pool.parallel.SlurmBatch.formatWalltime (   walltime)
static
Format walltime (in seconds) as days-hours:minutes

Definition at line 217 of file parallel.py.

217  def formatWalltime(walltime):
218  """Format walltime (in seconds) as days-hours:minutes"""
219  secInDay = 3600*24
220  secInHour = 3600
221  secInMinute = 60
222  days = walltime//secInDay
223  walltime -= days*secInDay
224  hours = walltime//secInHour
225  walltime -= hours*secInHour
226  minutes = walltime//secInMinute
227  walltime -= minutes*secInMinute
228  if walltime > 0:
229  minutes += 1
230  return "%d-%d:%d" % (days, hours, minutes)
231 

◆ preamble() [1/2]

def lsst.ctrl.pool.parallel.Batch.preamble (   self,
  command,
  walltime = None 
)
inherited
Return preamble string for script to be submitted

Most batch systems allow you to embed submission options as comments here.

Definition at line 110 of file parallel.py.

110  def preamble(self, command, walltime=None):
111  """Return preamble string for script to be submitted
112 
113  Most batch systems allow you to embed submission options as comments here.
114  """
115  raise NotImplementedError("Not implemented for base class")
116 

◆ preamble() [2/2]

def lsst.ctrl.pool.parallel.SlurmBatch.preamble (   self,
  walltime = None 
)

Definition at line 232 of file parallel.py.

232  def preamble(self, walltime=None):
233  if walltime is None:
234  walltime = self.walltime
235  if walltime <= 0:
236  raise RuntimeError("Non-positive walltime: %s (did you forget '--time'?)" % (walltime,))
237  if (self.numNodes <= 0 or self.numProcsPerNode <= 0) and self.numCores <= 0:
238  raise RuntimeError(
239  "Number of nodes (--nodes=%d) and number of processors per node (--procs=%d) not set OR "
240  "number of cores (--cores=%d) not set" % (self.numNodes, self.numProcsPerNode, self.numCores))
241  if self.numCores > 0 and (self.numNodes > 0 or self.numProcsPerNode > 0):
242  raise RuntimeError("Must set either --nodes,--procs or --cores: not both")
243 
244  outputDir = self.outputDir if self.outputDir is not None else os.getcwd()
245  filename = os.path.join(outputDir, (self.jobName if self.jobName is not None else "slurm") + ".o%j")
246  return "\n".join([("#SBATCH --nodes=%d" % self.numNodes) if self.numNodes > 0 else "",
247  ("#SBATCH --ntasks-per-node=%d" % self.numProcsPerNode) if
248  self.numProcsPerNode > 0 else "",
249  ("#SBATCH --ntasks=%d" % self.numCores) if self.numCores > 0 else "",
250  "#SBATCH --time=%s" % self.formatWalltime(walltime),
251  "#SBATCH --job-name=%s" % self.jobName if self.jobName is not None else "",
252  "#SBATCH -p %s" % self.queue if self.queue is not None else "",
253  "#SBATCH --output=%s" % filename,
254  "#SBATCH --error=%s" % filename,
255  "#SBATCH %s" % self.options if self.options is not None else "",
256  ])
257 

◆ run()

def lsst.ctrl.pool.parallel.Batch.run (   self,
  command,
  walltime = None 
)
inherited

Run the batch system.

    Creates and submits the script to execute the provided command

    @param command: command to run
    @param walltime: maximum wall clock time, overrides value to constructor
    @return name of script on filesystem

Definition at line 164 of file parallel.py.

164  def run(self, command, walltime=None):
165  """!Run the batch system
166 
167  Creates and submits the script to execute the provided command
168 
169  @param command: command to run
170  @param walltime: maximum wall clock time, overrides value to constructor
171  @return name of script on filesystem
172  """
173  scriptName = self.createScript(command, walltime=walltime)
174  command = self.submitCommand(scriptName)
175  if self.dryrun:
176  print("Would run: %s" % command)
177  elif self.doExec:
178  os.execl(scriptName, scriptName)
179  else:
180  os.system(command)
181  return scriptName
182 
183 
def run(self, coaddExposures, bbox, wcs)
Definition: getTemplate.py:603

◆ shebang()

def lsst.ctrl.pool.parallel.Batch.shebang (   self)
inherited

Definition at line 107 of file parallel.py.

107  def shebang(self):
108  return "#!/bin/bash"
109 

◆ submitCommand()

def lsst.ctrl.pool.parallel.SlurmBatch.submitCommand (   self,
  scriptName 
)

Return command to submit script.

    @param scriptName: name of script on filesystem

Reimplemented from lsst.ctrl.pool.parallel.Batch.

Definition at line 258 of file parallel.py.

258  def submitCommand(self, scriptName):
259  return "sbatch %s %s" % (self.submit if self.submit is not None else "", scriptName)
260 
261 

Member Data Documentation

◆ doExec

lsst.ctrl.pool.parallel.Batch.doExec
inherited

Definition at line 101 of file parallel.py.

◆ dryrun

lsst.ctrl.pool.parallel.Batch.dryrun
inherited

Definition at line 100 of file parallel.py.

◆ jobName

lsst.ctrl.pool.parallel.Batch.jobName
inherited

Definition at line 98 of file parallel.py.

◆ mpiexec

lsst.ctrl.pool.parallel.Batch.mpiexec
inherited

Definition at line 102 of file parallel.py.

◆ numCores

lsst.ctrl.pool.parallel.Batch.numCores
inherited

Definition at line 96 of file parallel.py.

◆ numNodes

lsst.ctrl.pool.parallel.Batch.numNodes
inherited

Definition at line 94 of file parallel.py.

◆ numProcsPerNode

lsst.ctrl.pool.parallel.Batch.numProcsPerNode
inherited

Definition at line 95 of file parallel.py.

◆ options

lsst.ctrl.pool.parallel.Batch.options
inherited

Definition at line 104 of file parallel.py.

◆ outputDir

lsst.ctrl.pool.parallel.Batch.outputDir
inherited

Definition at line 93 of file parallel.py.

◆ queue

lsst.ctrl.pool.parallel.Batch.queue
inherited

Definition at line 97 of file parallel.py.

◆ submit

lsst.ctrl.pool.parallel.Batch.submit
inherited

Definition at line 103 of file parallel.py.

◆ verbose

lsst.ctrl.pool.parallel.Batch.verbose
inherited

Definition at line 105 of file parallel.py.

◆ walltime

lsst.ctrl.pool.parallel.Batch.walltime
inherited

Definition at line 99 of file parallel.py.


The documentation for this class was generated from the following file: