@@ -258,6 +258,7 @@ def submit_script(self, script, files=[],
258
258
walltime = '2-00:00:00' ,
259
259
mail_type = 'END,FAIL' ,
260
260
mail_user = None ,
261
+ addl_slurm_kwargs = {},
261
262
ignore_files = [],
262
263
wait_for_job_status = False ,
263
264
trial_run = False ):
@@ -301,6 +302,10 @@ def submit_script(self, script, files=[],
301
302
* `mail_user` (string, optional, default=None): email to send notifications.
302
303
If not provided or None, will default to the value in <RemoteSlurmServer.mail_user>.
303
304
Prepended to `script` as "#SBATCH --mail_user=mail_user"
305
+ * `addl_slurm_kwargs` (dict, optional, default={}): additional kwargs
306
+ to pass to slurm. Entries will be prepended to `script` as
307
+ "#SBATCH -<k> <v>" or "#SBATCH --<k>=<v>" depending on whether the
308
+ key (`k`) is a single character or multiple characters, respectively.
304
309
* `ignore_files` (list, optional, default=[]): list of filenames on the
305
310
remote server to ignore when calling <<class>.check_output>
306
311
* `wait_for_job_status` (bool or string or list, optional, default=False):
@@ -341,7 +346,8 @@ def submit_script(self, script, files=[],
341
346
nprocs = nprocs ,
342
347
walltime = walltime ,
343
348
mail_type = mail_type ,
344
- mail_user = mail_user if mail_user is not None else self .server .mail_user )
349
+ mail_user = mail_user if mail_user is not None else self .server .mail_user ,
350
+ ** addl_slurm_kwargs )
345
351
346
352
if trial_run :
347
353
return cmds
@@ -351,7 +357,13 @@ def submit_script(self, script, files=[],
351
357
# TODO: get around need to add IP to known hosts (either by
352
358
# expecting and answering yes, or by looking into subnet options)
353
359
354
- out = self .server ._run_server_cmd (cmd )
360
+ try :
361
+ out = self .server ._run_server_cmd (cmd )
362
+ except _subprocess .CalledProcessError as e :
363
+ if addl_slurm_kwargs :
364
+ raise ValueError (f"failed to submit to scheduler, addl_slurm_kwargs may be invalid. Original error: { e .output } " )
365
+ raise ValueError (f"failed to submit to scheduler. Original error: { e .output } " )
366
+
355
367
if "sbatch" in cmd :
356
368
self ._slurm_id = out .split (' ' )[- 1 ]
357
369
@@ -507,6 +519,7 @@ def submit_job(self, script, files=[],
507
519
walltime = '2-00:00:00' ,
508
520
mail_type = 'END,FAIL' ,
509
521
mail_user = None ,
522
+ addl_slurm_kwargs = {},
510
523
ignore_files = [],
511
524
wait_for_job_status = False ,
512
525
trial_run = False ):
@@ -525,6 +538,7 @@ def submit_job(self, script, files=[],
525
538
* `walltime`: passed to <RemoteSlurmJob.submit_script>
526
539
* `mail_type`: passed to <RemoteSlurmJob.submit_script>
527
540
* `mail_user`: passed to <RemoteSlurmJob.submit_script>
541
+ * `addl_slurm_kwargs': pass to <RemoteSlurmJob.submit_script>`
528
542
* `ignore_files`: passed to <RemoteSlurmJob.submit_script>
529
543
* `wait_for_job_status`: passed to <RemoteSlurmJob.submit_script>
530
544
* `trial_run`: passed to <RemoteSlurmJob.submit_script>
@@ -543,6 +557,7 @@ def submit_job(self, script, files=[],
543
557
walltime = walltime ,
544
558
mail_type = mail_type ,
545
559
mail_user = mail_user ,
560
+ addl_slurm_kwargs = addl_slurm_kwargs ,
546
561
ignore_files = ignore_files ,
547
562
wait_for_job_status = wait_for_job_status ,
548
563
trial_run = trial_run )
0 commit comments