将整个计算过程,写到脚本中,通过sbatch指令提交到计算节点上执行;
先介绍一个简单的例子,随后介绍例子中涉及的参数,接着介绍sbatch其他一些常见参数,最后再介绍GPU和MPI跨节点作业案例。
首先是一个简单的例子;
假设我们的计算过程为:在计算节点上运行
hostname
指令,那么就可以这么编写作业脚本;
#!/bin/bash
hostname
假设上面作业脚本的文件名为job.sh,通过以下命令提交:
sbatch job.sh
随后我们介绍脚本中涉及的参数;
-o job.%j.out
-p C032M0128G
--qos=low
-J myFirstJob
--nodes=1
--ntasks-per-node=1
-p \ 指定作业的运行分区,提交作业时必须指定分区,每个分区有不同的属性,如未名一号上C032M0128G分区,每个节点核心数为32,内存为128G,通过以下命令可以查看对应集群可用分区,也可以通过sinfo查看分区的空闲状态;
sacctmgr show ass user=`whoami` format=part |uniq
--qos 指定作业的服务质量 ,不同qos,作业排队的优先级和收费也不同,通过以下命令可以查询 每个用户在每个分区下可用的qos;
sacctmgr show ass user=`whoami` format=user,part,qos
通过以上命令可以查看不同qos的作业优先级、作业允许最大运行时间、每个用户最多可提交作业数、最多可用核心数。
除此之外,还有一些常见的参数;
--help
-A <account>
-D, --chdir=<directory>
--get-user-env
--gres=<list>
-J, --job-name=<jobname>
--mail-type=<type>
--mail-user=<user>
-n, --ntasks=<number>
-c, --cpus-per-task=<ncpus>
--ntasks-per-node=<ntasks>
-o, --output=<filename pattern>
-p, --partition=<partition_names>
-q, --qos=<qos>
-t, --time=<time>
-w, --nodelist=<node name list>
-x, --exclude=<node name list>
其中-A指定计费账户,每个上机账号至少关联一个缴费账户(项目负责人持有),用于作业计费,通常情况下,提交作业不需要指定账户,通过以下命令可以查询上机账号所关联的账户,如果一个上机账号对应了多个缴费账户,那么可以在提交作业时指定缴费账户;
sacctmgr show ass user=`whoami` format=account%15 |uniq
接下来是一个GPU作业的例子;
假设我们想要申请一块GPU卡,并通过指令nvidia-smi来查看申请到GPU卡的信息,那么可以这么编写作业脚本;
#!/bin/bash
nvidia-smi
脚本中的一些参数说明如下
最后是一个跨节点多核心的例子;
假设我们想用两个节点,每个节点32个核心来运行vasp,那么可以这么编写作业脚本;
#!/bin/bash
module load intel/2017.1
module load vasp/5.4.4-intel-2017.1
srun hostname -s | sort -n >slurm.hosts
mpirun -n 64 -machinefile slurm.hosts vasp_std > log