提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
背景:XX气象局服务器(Pi)帐号上有XX中尺度数值预报系统,需用作业卡提交作业,以便服务器分配节点进行运算。
运用场景:
- 数值预报系统的作业提交;
- 自己写的脚本;比如我有一个Python脚本,但是自己的电脑上内存不够或者运行太慢,我可以写个作业卡让服务器分配一些计算节点来运行我的脚本。
一句话概述:用作业卡分配服务器的计算节点来完成自己提交的任务
一、作业卡是什么?
借用一张流程图:登录进服务器后进入的是登录节点,并不能直接运行程序,需要通过作业调度系统,将作业提交到计算节点上执行,而作业卡可以通过设置参数,通过sbatch命令提交,使得服务器根据作业卡分配节点运行上传的作业。
对Slurm作业调度感兴趣的可以看:http://hmli.ustc.edu.cn/doc/userguide/slurm-userguide.pdf
二、作业卡怎么写
1.关键参数
以下最常用的Slurm参数集表格:
2.举个例子
以串行计算为例,我想要运行 test1.py 这个python脚本
所以我根据自己需要写了 run_test1.sbatch 这个文件(每行代码都附注释)
#!/usr/bin/bash ## 脚本的解释器为Bash,这行一般不改
#SBATCH --comment Python ## 作业的注释为"Python"
#SBATCH -J Python ## 作业的名称为"Python"
#SBATCH -n 1 ## 作业节点数为1,按需设置,值越小排队越优先但运行越慢
#SBATCH --ntasks-per-node=32 ## 每个节点上运行的任务数为32,有的服务器是64
#SBATCH -p serial ## 作业的分区为"serial",表示作业将在串行分区中运行
#SBATCH -o ./LOG/p_run.%j ## 标准日志输出路径
#SBATCH -e ./LOG/p_run.%j ## 错误日志输出路径
#SBATCH -t 600 ## 运行时间不超过600分钟
unset SLURM_MEM_PER_CPU ## 取消了环境变量SLURM_MEM_PER_CPU的设置
ulimit -c unlimited ## 核心转储文件的大小限制为无限制
ulimit -s unlimited ## 栈大小的限制为无限制
python test1.py ## 开始运行我的test1.py脚本了
写好这个 run_test1.sbatch 文件后在命令行输入:
sbatch test1.sbatch
就可以成功运行 test1.py 脚本了
注意:如果脚本计算量大的话,不能直接在服务器上运行python文件,如 python test1.py 而要像这样先写个sbatch文件,否则你的脚本运行会侵占登陆节点,严重的可能会被管理员封号(我就因为这样被封过)
三、总结/强调/补充
总结:气象局模式运行/自己写的脚本都可以用作业卡提交的方式在服务器完成;
强调:脚本计算量大的话不能直接在服务器上运行,必须先用作业卡分配节点,否则占用登陆节点可能被导致封号;
补充:该文档给出的例子是串行处理,适用于有严格依赖关系的任务;而并行处理则用于可分解的大规模计算问题。(串行计算好处是确保每个任务按顺序执行,避免数据冲突和错误;但是如果任务之间没有依赖关系,并且对响应时间有较高要求,比如需要进行大数据处理或复杂计算任务时,就可采取并联计算)