def submit(project='datascience', queue='debug-flat-quad', nodes=1, wall_minutes=30, job_mode='mpi', wf_filter=''): """ Submits a job to the queue with the given parameters. Parameters ---------- project: str, name of the project to be charged queue: str, queue name, can be: 'default', 'debug-cache-quad', or 'debug-flat-quad' nodes: int, Number of nodes, can be any integer from 1 to 4096. wall_minutes: int, max wall time in minutes job_mode: str, Balsam job mode, can be 'mpi', 'serial' wf_filter: str, Selects Balsam jobs that matches the given workflow filter. """ from balsam.service import service from balsam.core import models QueuedLaunch = models.QueuedLaunch mylaunch = QueuedLaunch() mylaunch.project = project mylaunch.queue = queue mylaunch.nodes = nodes mylaunch.wall_minutes = wall_minutes mylaunch.job_mode = job_mode mylaunch.wf_filter = wf_filter mylaunch.prescheduled_only = False mylaunch.save() service.submit_qlaunch(mylaunch, verbose=True)
def submitlaunch(args): from balsam import setup setup() from balsam.service import service from balsam.core import models Job = models.BalsamJob from django.db import connection, transaction if args.wf_filter and not Job.objects.filter( workflow=args.wf_filter).exists(): raise RuntimeError( f"No job with wf_filter={args.wf_filter} registered in local DB") # Exclusive Lock on core_queuedlaunch with transaction.atomic(): with connection.cursor() as cursor: cursor.execute( 'LOCK TABLE core_queuedlaunch IN ACCESS EXCLUSIVE MODE;') QueuedLaunch = models.QueuedLaunch qlaunch = QueuedLaunch(project=args.project, queue=args.queue, nodes=args.nodes, wall_minutes=args.time_minutes, job_mode=args.job_mode, wf_filter=args.wf_filter, sched_flags=args.sched_flags, prescheduled_only=False) qlaunch.save() service.submit_qlaunch(qlaunch, verbose=True)
def submit_jobs(project='', queue='debug-cache-quad', nodes=1, wall_minutes=30, job_mode='mpi', wf_filter='', save=False, submit=False): """ Submits a job to the queue with the given parameters. Parameters ---------- project: str, name of the project to be charged queue: str, queue name, can be: 'default', 'debug-cache-quad', 'debug-flat-quad', 'backfill' nodes: int, Number of nodes, can be an integer from 1 to 4096 depending on the queue. wall_minutes: int, max wall time in minutes, depends on the queue and the number of nodes, max 1440 minutes job_mode: str, Balsam job mode, can be 'mpi', 'serial' wf_filter: str, Selects Balsam jobs that matches the given workflow filter. """ from balsam import setup setup() from balsam.service import service from balsam.core import models validjob = True QueuedLaunch = models.QueuedLaunch mylaunch = QueuedLaunch() mylaunch.project = project mylaunch.queue = queue mylaunch.nodes = nodes mylaunch.wall_minutes = wall_minutes mylaunch.job_mode = job_mode mylaunch.wf_filter = wf_filter mylaunch.prescheduled_only = False if queue.startswith('debug'): if wall_minutes > 60: validjob = False print(f'Max wall time for {queue} queue is 60 minutes') if nodes > 8: validjob = False print(f'Max number of nodes for {queue} queue is 8') else: if nodes < 128: validjob = False print(f'Min number of nodes for {queue} queue is 128') if save and validjob: mylaunch.save() print(f'Ready to submit') if submit: service.submit_qlaunch(mylaunch, verbose=True)
def submit_qlaunch(project, queue, nodes, time_minutes, job_mode, wf_filter): """Submit Balsam launcher job to batch scheduler""" from balsam.service import service from balsam.core import models QueuedLaunch = models.QueuedLaunch qlaunch = QueuedLaunch( project = project, queue = queue, nodes = nodes, wall_minutes = time_minutes, job_mode = job_mode, wf_filter = wf_filter, prescheduled_only=False) qlaunch.save() service.submit_qlaunch(qlaunch, verbose=True)
def submitlaunch(args): from balsam import setup setup() from balsam.service import service from balsam.core import models from django.db import connection, transaction # Exclusive Lock on core_queuedlaunch with transaction.atomic(): with connection.cursor() as cursor: cursor.execute('LOCK TABLE core_queuedlaunch IN ACCESS EXCLUSIVE MODE;') QueuedLaunch = models.QueuedLaunch qlaunch = QueuedLaunch( project=args.project, queue=args.queue, nodes=args.nodes, wall_minutes=args.time_minutes, job_mode=args.job_mode, wf_filter=args.wf_filter, sched_flags=args.sched_flags, prescheduled_only=False) qlaunch.save() service.submit_qlaunch(qlaunch, verbose=True)