Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Currently we have moved resources away from this project. So this project is stalled for now.

This is a design proposal for PBS to support job submissions with multiple resource requests (with conditional operators) and capability to run only one of them.

 

For conditional requests (e.g.

...

Gist of proposed changes:

There are basically two requirements that we are trying to fulfill here - 

One requirement is for the user/admin to be able to specify their node filter criteria. This requirement can be met if we have support to specify some kind or node filter with the job. This filter could be a python expression that can consist of conditional operators with non-consumable resources present on the nodes for now. The filter concept can also be extended to be used as queue/server limits or while trying to find a preemption candidate out of running jobs etc.

Second requirement is for the user/admin to be able to provide multiple resource specifications and make PBS use one as soon as it knows that it can start the job with that resource specification. PBS scheduler shall look at each of the resource specifications in the order they get sorted according to scheduling policies and may choose to run the job with a specification as soon as it knows that it can. This fall in line with PBS scheduler's way of finding a node solution based on the "first fit" algorithm., allocate resources A or resources B for a job): 

Motivation for #1 & #2:  start the job sooner, trading lower performance/efficiency/cost/utilization… for a faster start time

    • Often the goal is to craft a request that makes the job start “now”
    • Visible progress provides a more positive user experience, and starting to run is evidence of progress
    • The underlying motivation is most likely “earliest finish time”, but multiple confounding factors lead users to desire “earliest start time”.  For example, once a job is started, it is unlikely to be delayed by higher priority work entering the system, so there is more assurance that the end time is fixed.

Use Cases:

1.      User requests job allocating 64 cores; if the job will be started sooner if it requested 32 cores, then run it on 32 cores instead; ditto for 16 cores

a.      Multiple distinct resource request options are provided, and only one is chosen and allocated for the job

      1. The use case has only a single, node-level resource

b.      The resource request options are prioritized first by site-policy, then by the order provided by the user.  If any resource request option can be started (based on site-policy and available resources), the highest priority option is started.

2.      User requests or admin forces job to allocate “like nodes”; “like nodes” all have the same value for some property, resource, or attribute, such as (a) all nodes have the same CPU type (e.g., Intel Sandybridge) or (b) all nodes are attached to the same network fabric (e.g., QDR Infiniband).  (Note: so far, this is exactly the behavior of “place=group=X” in PBS Pro.)   Further, if the job will be started sooner if the job requested like nodes based on a different “like value”, then run it on nodes with that “like value” (e.g., use Intel IvyBridge versus Intel SandyBridge or use FDR Infiniband versus QDR Infiniband).  Ditto for a third choice of “like value”.

a.      Multiple distinct resource request options are provided, and only one is chosen and allocated for the job

      1. The use case has only a single, non-consumable, node-level resource

b.      The resource request options are prioritized first by site-policy, then by the order provided by the user.  If any resource request option can be started (based on site-policy and available resources), the highest priority option is started.

c.       The use case only has two resource request options, but it makes sense to assume there may be more than two, but the usual number is less than 10.

  

link to forum discussion

Interface 1: New Job attribute called “job_set” - qsub option “-W job_set”

...

  • using qsub "-W job_set" option:

    • If user already knows that there is a job_set that exists in server then he/she can submit another job to the same job_set by specifying it's name using "-W job_set" option.
  • Every resource request specified by “-L” option will get queued as a separate job and will get it’s own job id.


Interface 3: Extend PBS to allow users to submit jobs with a node-filter (nfilter) resource.

...

:

...

  • User can now specify a node_filter with each of their jobs and this filter will help scheduler to filter out nodes that this job is allowed to run on.
  • A new resource “nfilter” is created. This resource is of type string. Users/operator/manager has privileges to read/write this resource.
  • nfilter is evaluated as an expression by PBS scheduler to filter out nodes that can be used to run the job in hand.
  • Users can specify a node filter with node resources using conditional operator like "<, >, <=, >=, !=.
    • Example: qsub -Lselect=3:ncpus=2:mem=18gb,nfilter=“resources_available[‘ncpus’]>=4 and resouces_available[‘color’] != ‘green’”,walltime=10000 -Lselect=2:ncpus=2:mem=24gb,nfilter=“resources_available[‘ncpus’]>16 and resources_available[‘color’]=‘blue’”,walltime=8000 job.scr
  • nfilter can make use of resources which are available with the nodes using “resources_available.” prefix with the resource, it can use resources that are assigned in the resource using “resources_assigned.” prefix before the resource. These are the only two inputs it can use to filter out the nodes.
  • To access a specific resource out of resources_available, resources_assigned inputs, users must enclose each resource name within square brackets “[ ]” like this - “resources_available[‘ncpus’]

Interface 4: New job substate “JOB_SUBSTATE_RUNNING_SET” (95)

  • Visibility: Private
  • Change Control: Stable
  • Details:
    • When a job of a job_set starts running then all other jobs of the same job_set will be marked in hold state and their substate will be set to 95.
    • Job substate 95 identifies that this held job is part of a job_set which has one job running in it.


Interface 54: New error code PBSE_MOVE_JOBSET

  • Visibility: Private
  • Change Control: Stable
  • Details:
    • When a job which is part of a job_set is being moved to another complex, following error code will the returned “PBSE_MOVE_JOBSET” (15211)


Interface 65: New error code PBSE_NO_JOBSET

  • Visibility: Private
  • Change Control: Stable
  • Details:
    • When pbs server tries to find out a job_set with a specified job_set id but unable to find it will use the error_code “PBSE_NO_JOBSET” (15212)


Interface 76: New job comment for jobs in substate 95

  • Visibility: Private
  • Change Control: Stable
  • Details:
    • When a job of a job_set starts running then all other queued jobs of the same job_set that are in substate 95 will have a new job comment as “Job held, job <job-id> running from this job_set


Interface 87: New qselect option “- - job_set”

  • Visibility: Private
  • Change Control: Stable
  • Details:
    • A new select command option “- - job_set” is added.
    • It accepts a string as an input value. This string must be the job_id which represents the leader of the job_set user is trying to query.
    • If server could not find any such job_set then select command will fail with the following error message - “qselect: a nonexistent job_set specified


Interface 98: move or peer-scheduling of job_set jobs is not allowed.

  • Visibility: Private
  • Change Control: Stable
  • Details:
    • Jobs that are part of a job_set are not allowed to be peered or moved to another complex.
  • If a peering complex tries to move a job that is part of a job_set from furnishing complex following error code will be returned “PBSE_MOVE_JOBSET” (15211)


Interface 109: When a running job of a job_set is requeued.

  • Visibility: Public
  • Change Control: Stable
  • Details:
    • When a running job of a job_set is requeued all other held jobs are released and put back in queued state.
    • job_comment of all the jobs of the job_set is cleared.


Interface 1110: When a job of a job_set starts running

...