超级计算机任务提交,超算任务提交系统slurm用法

超级计算机任务提交,超算任务提交系统slurm用法

2023年7月10日发(作者:)

超级计算机任务提交,超算任务提交系统slurm⽤法Abstract: 介绍了Slurm系统的基础⽤法,列举了⼀些样例。介绍了sbatch,srun, salloc, squeue常见命令的⽤法1. Slurm简介与基础命令现在的科研任务⼤部分是运⾏在超算上⾯的,本地的⼩机器⼤部分时间只是起到了⼀个⽂本编辑器的作⽤。⼀般超算上会有很多个节点,也会有很多个⽤户提交的很多任务。 这时候我们提交任务就不再是跟本地⼀样run或者F5⼀下就开始运⾏了的,我们需要先申请资源,等待超算的批准,然后超算才会将我们的任务分配到指定的节点上运⾏,这个系统就是SLURM。Slurm系统包含常见的两个提交任务的命令sbatch, srun;查看任务信息的命令,squeue,sinfo; 以及开辟资源的salloc和查看历史的sacct。1.1. 提交任务向slurm系统提交任务,需要包含两个信息:⼀个是需要的计算资源,包括计算时间,节点数等;第⼆个是在这个计算资源下需要运⾏的指令,包括载⼊环境与运⾏程序两部分。sbatch与srun两个指令在这两个⽅⾯⽤法不同,但是对应资源的关键词都是⼀致的,⼤部分情况下只需要熟悉⼀个指令就可以了。1.1.1. sbatchsbatch的⽤法是sbatch 。其中你的任务信息就包含在这个以ASCII码编码的⽂件中。⽂件基本形式是:其中#sbatch后⾯跟的信息就是计算资源、任务命名分区以及输⼊输出所对应的⽂件。这⾥需要注意的是sbatch提交任务之后是不会将程序的输出与报错信息直接print出来,⽽是接管程序的系统输出与报错到指定⽂件中。但是对⽂件的读写内容是正常进⾏的,因为超算系统的⽂件系统⼀般是⼀个整体,如果有⾼IO的内容就需要将⽂件存放在相应的区域内。sbatch提交任务之后,超算的操作系统记录这⼀个任务,会根据优先级给任务排队,在合适的时间运⾏。⽤户此时可以断开终端或运⾏其他任务。1.1.2. srunsrun是直接以命令⽽⾮脚本的形式申请资源并运⾏任务,基本⽤法是 srun -o1 xx1 --option2 xx2 ./hello_world。srun会实时输出你的程序的运⾏结果,⽤户可以中途直接终⽌程序。但是⼀旦远程连接端⼝终端,任务就会停⽌。sbatch与srun提交任务给超算的操作系统,不存在哪⼀个指令可以插队的情况。1.1.3. 常⽤options与释义options释义–batch=?指定任务所在分区,有的超算会设置batch与debug两个分区,debug分区基本不⽤排队,但是任务运⾏时间有限制-N, –nodes=?申请的节点个数。⼀般的超算系统上每个节点会有1个cpu:每个CPU的典型配置是32个核(或者理解为物理线程,不同架构的超算会有差异),其中每16个核是在同⼀个pie上的,不同pie上的核的通讯时间会更⼤,但是要远远⼩于不同节点之间的通讯时间-n, –ntasks=?将核⼼程序复制多少份,相当于并⾏计算中最顶层的并⾏数。如果任务是mpi的⽅式运⾏,这个参数将转化为mpi⾥⾯的ntasks; 如果是其他的⽅式并⾏,程序内部可以调出任务号,从⽽执⾏不同的任务,⽐如printenv SLURM_PROCID就可以调出相应的任务id-c, –cpus-per-task=?与上⾯的-n配合执⾏,指定每个任务有多少个核来运⾏(并不是⼀个⼤的cpu, ⽽是核数),实际对应着mpi⾥⾯的OMP_NUM_THREADS,次级并⾏参数–mem=?每个节点预先分配的内存⼤⼩,可以使⽤GB,MB, KB三个单位–gres=name:type:num可以根据超算配置申请相应的资源,需要超算⽀持。⽐如申请两个型号为kepler的GPU与两个型号为v100的GPU,就是--gres=gpu:kepler:2,gpu:v100:2-t, –time=xx:xx:xx程序运⾏的最⼤时间,超过这个时间超算会随时停⽌你的任务,对应的单位是 时:分:秒-e, –error=file_namefile_name可以使⽤模板。 ⽐如常见的单任务脚本输出设置为xxx_%J_,其中%J会被任务序号代替-o, –output=file_name同上–exclusive是否允许同⼀个节点上允许其他⼈的程序运⾏,防⽌资源共享后运⾏速度慢的问题,但是⼀般不被推荐使⽤-C, –constraint=”?”对申请的节点信息的限制,⼀般是⽤来限制cpu的型号,防⽌编译好的程序被⽤在错误的架构上,⽐如--constraint="AMD" 就限定只能运⾏在AMD cpu的节点上,不要分配Intel的cpu(AMD, YES!)更多的⽤法请参考slurm的说明⽂档,或者使⽤ sbatch --help调出来。也可以使⽤⼀个脚本⽣成器, IBEX Jobscript generator。下⾯是我的⼀个程序脚本:1.2. 查看任务查看任务的运⾏状态,可以使⽤squeue命令进⾏。查看特定⽤户的可以使⽤-u your_name,也可以与grep配合使⽤,检索特定的关键词。如果向实时更新,可以与watch命令配合,watch -n ?? squeue -u your_name,就会进⼊⼀个实时更新画⾯,频率是??s.如果想查看超算上资源使⽤问题,可以使⽤sinfo命令查看,查看空闲资源,可以使⽤sinfo | grep idle查看空闲节点。1.3. 其他如果想申请⼀个实时的交互资源,可以使⽤salloc命令,其关键词是与srun的选项是相同的,只是不需要指定运⾏什么程序。⽐如下⾯的指令,你就已经申请到了⼀个节点,运⾏时间是10分钟,在这个平台上,你可以实时运⾏指令,与本地运⾏相同。但是相⽐于sbatch,srun命令,可能存在⼀些性能损失.

发布者:admin,转转请注明出处:http://www.yc00.com/news/1688987088a191923.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信