交互式任务
$ srun -N 1 --cpus-per-task=4 -t 5:00 -p gpu
可选参数:
-N <节点数量>
--cpus-per-task=<单进程 CPU 核心数>
--gres=gpu:<单节点 GPU 卡数>
-t <最长运行时间>
-p <使用的分区>
--qos=<使用的 QoS>
批处理任务
推荐使用批处理方式提交任务,批处理任务模式的核心在于编写一个 SLURM 脚本,模板如下:
#!/bin/bash
#SBATCH -J test # 指定作业名
#SBATCH -o test.out # 屏幕上的输出文件重定向到 test.out
#SBATCH -p gpu # 作业提交的分区为 cgpu
#SBATCH -N 1 # 作业申请 1 个节点
#SBATCH --cpus-per-task=4 # 单任务使用的 CPU 核心数为 4
#SBATCH -t 1:00:00 # 任务运行的最长时间为 1 小时
#SBATCH --gres=gpu:1 # 单个节点使用 1 块 GPU 卡
# 加载运行环境
module load anaconda3
# conda初始化bash
conda init bash
# 重新进入conda环境
source activate
# conda激活自定义环境
conda activate wfenv
# 运行程序
python /gs/home/zzlzoro/test/abc.py
其中第一行表示使用 /bin/bash 来执行脚本,下面通过 #SBATCH 前缀设置服务的各个属性,没有指定的属性将使用默认值,其他属性见官方文档。可以根据自己的需要申请适当的资源。
提交任务
$ sbatch [BATCH_NAME].slurm
另一个例子
#!/bin/env bash
# file: example.sh
# set the number of nodes
#SBATCH --nodes=2
# set the number of tasks (processes) per node
#SBATCH --ntasks-per-node=4
# set partition
#SBATCH --partition=example-partition
# set max wallclock time
#SBATCH --time=2:00:00
# set name of job
#SBATCH --job-name=example-mpi4py
# set batch script's standard output
#SBATCH --output=example.out
# mail alert at start, end and abortion of execution
#SBATCH --mail-type=ALL
# send mail to this address
#SBATCH --mail-user=user@mail.com
# run the application
srun python example-mpi4py.py
分配式任务:
通过salloc执行创建分配式任务
$ salloc [options] command
如果后面的 command 为空,则执行 slurm 的配置 slurm.conf 中通过 SallocDefaultCommand 设定的命令。如果 SallocDefaultCommand 没有设置,则将执行用户默认的 shell。
salloc主要参数包括:
--core-per-socke=cores
分配的节点需要至少每颗 CPU 核
-I, --immediate=seconds
在 seconds 秒内资源未满足的情况下立即退出。
-J, --job-name=job name
设定作业名
-N, --nodes=minnodes[-maxnodes]
请求为作业至少分配 minnodes 个结点。
-n, --ntasks=number
指定要运行的任务数。请求为 number 个任务分配资源,默认为每个任务一个处理器核。
-p, --partitions=partition name
在指定分区中分配资源。如未指定,则由控制进程在系统默认分区中分配资源。
-w, --nodelist=node name
请求指定的结点名字列表。
-x, --exclude=node name
不要将指定的节点分配作业。