Exemple #1
0
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)
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #5
0
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)