相关文章推荐
豪情万千的眼镜  ·  智能指针reset()·  4 天前    · 
豪情万千的眼镜  ·  Resources·  1 月前    · 
豪情万千的眼镜  ·  python 调用打印机 ...·  9 月前    · 
豪情万千的眼镜  ·  [Answer]-How to ...·  10 月前    · 
豪情万千的眼镜  ·  Java ...·  11 月前    · 
豪情万千的眼镜  ·  MySQL 导出数据 | ·  11 月前    · 
不爱学习的火腿肠  ·  java ...·  33 分钟前    · 
旅行中的铁链  ·  错误信息:SSL ShakeHand ...·  55 分钟前    · 
憨厚的金鱼  ·  Scanpy数据结构:AnnData - 何帅 ·  55 分钟前    · 

集群的登录节点设置有资源限制,请勿在登录节点进行大量计算。

集群的计算节点默认不允许用户直接登录,对需要交互式处理的程序,在登录到集群后,使用 salloc 命令分配节点,然后再ssh到分配的节点上进行处理:

这里注意一下,我们可以直接ssh到我们的节点,区别于上医的服务器,我们可以直接进行ssh。如:

计算完成后,使用 exit 命令推出节点。 注意需要如果是salloc得到的节点,则需要 exit 两次,第一次 exit 是从计算节点退出到登录节点,第二次 exit 是释放所申请的资源。

可以通过将程序执行命令放入作业提交脚本,并通过 sbatch 命令作业提交的方式在集群中进行计算。

一个简单的脚本示例如下:

#!/bin/bash #SBATCH --job-name=JOBNAME #SBATCH --nodes=2 #SBATCH --ntasks-per-node=10 #SBATCH --time=2:00:00 ### 程序的执行命令 python count.py

上述中 JOBNAME :作业的作业名。

上述中 nodes 指定该作业需要2个节点数。

上述中 ntasks-per-node 每个节点所运行的进程数。

上述中 time 作业最大的运行时间。

第一行表示这是一个bash脚本,第3-6行以 #SBATCH 开头的命令表示这些是需要slurm系统处理的参数。

如下图所示,通过 sbatch+作业脚本名 提交作业,系统会返回作业编号,通过 squeue 命令可以看到作业运行状态,等作业执行完成后,默认会把程序的输出放到 slurm-作业编号.out 的文件中,可通过该文件查看程序的输出。

GPU集群作业提交

如果是GPU集群,需要在作业脚本中增加 --gres=gpu:<number of card> 参数。例如 #SBATCH --gres=gpu:2 ,意味着指定2张GPU卡数。

以下为GPU作业的一个示例:

#!/bin/bash #SBATCH --job-name=gpu-example #SBATCH --nodes=1 #SBATCH --ntasks=16 #SBATCH --gres=gpu:1 ### 程序的执行命令 python test.py

上述中 job-name :作业的作业名。

上述中 nodes :该作业需要的节点数。

上述中 ntasks :该作业需要的CPU数。

上述中 gres :该作业需要的GPU数。

GPU集群中提交作业时,需要在 srun sbatch 命令中增加参数 -s ,或者 --oversubscribe 。表示允许与其它作业共享资源。

1
$sbatch -s job.sh

设定作业需要的节点数。如果没有指定,默认分配足够的节点来满足 --ntasks=<n> --cpus-per-task=<ncpus> 参数的要求。

--ntasks-per-node=<ntasks>

设定每个节点上的任务数。要和``–nodes=<n>``同时配合使用。

--ntasks=<n>

设定最多启动的任务数。

--cpus-per-task=<ncpus>

设定每个任务所需要的CPU核数。如果没有指定,默认为每个任务分配一个CPU核。一般运行OpenMP等多线程程序时需要,普通MPI程序不需要。

 
推荐文章