在运行程序时,经常需要大量的算力,故推至服务器是不错的选择,然而如何编写bash脚本呢?本文就做一个小记录。
通过slurm调度器进行调度
将程序推至服务器训练
CPU任务 单节点
#!/bin/bash
#SBATCH -J test #任务名
#SBATCH -p cpu #队列名
#SBATCH --nodes=1 # 申请的节点数量
#SBATCH --ntasks=10 #申请的CPU总核心数
GPU任务
#!/bin/bash
#SBATCH -J test
#SBATCH -p gpu
#SBATCH -N 1
#SBATCH --ntasks-per-node=4
#SBATCH --cpus-per-task=8
#SBATCH --mem=30G
#SBATCH --gres=gpu:4
常用参数
-p, --partition=<partition_names> # 将作业提交到对应队列;
-q, --qos=<qos> # 指定QOS;
-A <account> # 指定使用账户;
-D, --chdir=<directory> # 指定工作目录;
--gres=<list> # 使用gpu这类资源,如申请两块gpu则--gres=gpu:2
-J, --job-name=<jobname> # 指定该作业的作业名;
-n, --ntasks=<number> # sbatch并不会执行任务,当需要申请相应的资源来运行脚本,默认情况下一个任务一个核心,--cpus-per-task参数可以修改该默认值;
-c, --cpus-per-task=<ncpus> # 每个任务所需要的核心数,默认为1;
--ntasks-per-node=<ntasks> # 每个节点的任务数,--ntasks参数的优先级高于该参数,如果使用--ntasks这个参数,那么将会变为每个节点最多运行的任务数;
-o, --output=<filename pattern> # 输出文件,作业脚本中的输出将会输出到该文件;
-t, --time=<time> # 允许作业运行的最大时间,目前最大运行时间为14400分钟(10天);