Skip to content
Snippets Groups Projects
job-scheduling.md 3.84 KiB
Newer Older
  • Learn to ignore specific revisions
  • # Complementary System Job Scheduling
    
    ## Introduction
    
    [Slurm][1] workload manager is used to allocate and access Complementary systems resources.
    
    Display partitions/queues
    
    Jan Siwiec's avatar
    Jan Siwiec committed
    
    ```console
    
    $ sinfo -s
    PARTITION AVAIL  TIMELIMIT   NODES(A/I/O/T) NODELIST
    p00-arm      up 1-00:00:00          0/1/0/1 p00-arm01
    p01-arm*     up 1-00:00:00          0/8/0/8 p01-arm[01-08]
    p02-intel    up 1-00:00:00          0/2/0/2 p02-intel[01-02]
    p03-amd      up 1-00:00:00          0/2/0/2 p03-amd[01-02]
    p04-edge     up 1-00:00:00          0/1/0/1 p04-edge01
    p05-synt     up 1-00:00:00          0/1/0/1 p05-synt01
    
    Jan Siwiec's avatar
    Jan Siwiec committed
    
    ```console
    
    $ squeue --me
                 JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
                   104   p01-arm interact    user   R       1:48      2 p01-arm[01-02]
    ```
    
    Show job details
    
    Jan Siwiec's avatar
    Jan Siwiec committed
    
    ```console
    
    $ scontrol show job 104
    ```
    
    Run interactive job
    
    Jan Siwiec's avatar
    Jan Siwiec committed
    
    ```console
    
     $ salloc -A PROJECT-ID -p p01-arm
    
    ```
    
    Run interactive job, with X11 forwarding
    
    Jan Siwiec's avatar
    Jan Siwiec committed
    
    ```console
    
     $ salloc -A PROJECT-ID -p p01-arm --x11
    
    Jan Siwiec's avatar
    Jan Siwiec committed
        Do not use `srun` for initiating interactive jobs, subsequent `srun`, `mpirun` invocations would block forever.
    
    
    Run batch job
    
    Jan Siwiec's avatar
    Jan Siwiec committed
    
    ```console
    
     $ sbatch -A PROJECT-ID -p p01-arm ../script.sh
    ```
    
    
    Useful command options (salloc, sbatch, srun)
    
    
    * -n, --ntasks
    * -c, --cpus-per-task
    * -N, --nodes
    
    | PARTITION | nodes| cores per node |
    | ------ | ------ | ------ |
    | p00-arm | 1 | 64 |
    | p01-arm | 8 | 48 |
    | p02-intel | 2 | 64 |
    | p03-amd | 2 | 64 |
    | p04-edge | 1 | 16 |
    | p05-synt | 1 | 8 |
    
    
    Jan Siwiec's avatar
    Jan Siwiec committed
    Use `-t`, `--time` option to specify job run time limit. Default job time limit is 2 hours, maximum job time limit is 24 hours.
    
    
    FIFO scheduling with backfiling is employed.
    
    ## Partition 00 - ARM (Legacy)
    
    Whole node allocation.
    
    One node:
    
    ```console
    sbatch -A PROJECT-ID -p p00-arm ./script.sh
    ```
    
    ## Partition 01 - ARM (A64FX)
    
    Whole node allocation.
    
    One node:
    
    ```console
    sbatch -A PROJECT-ID -p p01-arm ./script.sh
    ```
    
    ```console
    sbatch -A PROJECT-ID -p p01-arm -N=1 ./script.sh
    ```
    
    Multiple nodes:
    
    ```console
    sbatch -A PROJECT-ID -p p01-arm -N=8 ./script.sh
    ```
    
    ## Partition 02 - Intel (Ice Lake, NVDIMMs + Bitware FPGAs)
    
    Partial allocation - per FPGA, resource separation is not enforced.
    
    One FPGA:
    
    ```console
    sbatch -A PROJECT-ID -p p02-intel --gres=fpga ./script.sh
    ```
    
    Two FPGAs on the same node:
    
    ```console
    sbatch -A PROJECT-ID -p p02-intel --gres=fpga:2 ./script.sh
    ```
    
    All FPGAs:
    
    ```console
    sbatch -A PROJECT-ID -p p02-intel -N 2 --gres=fpga:2 ./script.sh
    ```
    
    ## Partition 03 - AMD (Milan, MI100 GPUs + Xilinx FPGAs)
    
    Partial allocation - per GPU and per FPGA, resource separation is not enforced.
    
    One GPU:
    
    ```console
    sbatch -A PROJECT-ID -p p03-amd --gres=gpgpu ./script.sh
    ```
    
    Two GPUs on the same node:
    
    ```console
    sbatch -A PROJECT-ID -p p03-amd --gres=gpgpu:2 ./script.sh
    ```
    
    Four GPUs on the same node:
    
    ```console
    sbatch -A PROJECT-ID -p p03-amd --gres=gpgpu:4 ./script.sh
    ```
    
    All GPUs:
    
    ```console
    sbatch -A PROJECT-ID -p p03-amd -N 2 --gres=gpgpu:4 ./script.sh
    ```
    
    One FPGA:
    
    ```console
    sbatch -A PROJECT-ID -p p03-amd --gres=fpga ./script.sh
    ```
    
    Two FPGAs:
    
    ```console
    sbatch -A PROJECT-ID -p p03-amd --gres=fpga:2 ./script.sh
    ```
    
    All FPGAs:
    
    ```console
    sbatch -A PROJECT-ID -p p03-amd -N 2--gres=fpga:2 ./script.sh
    ```
    
    One GPU and one FPGA on the same node:
    
    ```console
    sbatch -A PROJECT-ID -p p03-amd --gres=gpgpu,fpga ./script.sh
    ```
    
    Four GPUs and two FPGAs on the same node:
    
    ```console
    sbatch -A PROJECT-ID -p p03-amd --gres=gpgpu:4,fpga:2 ./script.sh
    ```
    
    All GPUs and FPGAs:
    
    ```console
    sbatch -A PROJECT-ID -p p03-amd -N 2 --gres=gpgpu:4,fpga:2 ./script.sh
    ```
    
    ## Partition 04 - Edge Server
    
    Whole node allocation:
    
    ```console
    sbatch -A PROJECT-ID -p p04-edge ./script.sh
    ```
    
    ## Partition 05 - FPGA Synthesis Server
    
    Whole node allocation:
    
    ```console
    sbatch -A PROJECT-ID -p p05-synt ./script.sh
    ```
    
    [1]: https://slurm.schedmd.com/