slurm 的使用教程

最近因为上课的原因,频繁的使用到了slurm脚本,所以在这边简单记录一下

基本概念:什么是slurm脚本?

Slurm呢是一种脚本语言,它的详细文档呢可以参考这个Slurm 文档。我们都知道脚本语言呢,一般都是有特定用处的,slurm也不例外。Slurm是操作大型计算集群的脚本语言。

我们想象一下,如果我们很有钱,有个100台带带T100显卡的计算机组成的集群,我们怎么用呀?你可能会说,很简单呀就跑代码就是的。但是,请思考一下,如果我想同时用很多台计算机呢?那么这些计算机是不是要组成个局域网,然后我要写个代码协调这些计算机工作。是不是有点复杂了?

我们再想,如果这个集群我们希望能做大做强,不止给我一个人用,想给100个人,1000个人同时用,能行吗?这个时候自然还需要考虑协调用户的功能。这个协调用户包含很多东西,包括资源的分配,包括用户环境的安装等等。

是不是很复杂?这才哪到哪,我这还只是章口就来随便举的例子。真实的情况比这个要复杂的多得多,那我们怎么办?自己从头写代码来管理这个集群?显然不是,我们有专门的管理软件。这个管理软件呢不是我们今天的研究重点,我就不说了,我也不会哈哈哈哈。重点是如何使用这个管理软件,如何通过它来操作集群。我们呢正是通过slurm 脚本语言来控制这个管理软件的。

常见指令:

我目前用到的指令主要有

  • srun/sbatch:用来执行slurm 脚本。sbatch -J hello hyperparameter_tuning.slurm --method tfidf
  • sinfo:用来查看集群的信息,比如说看看节点的状态啦啥的
  • squeue -u xxxx: 用来查看你提交的任务执行情况
  • sprio -u xxx: 这是个插件,不一定安装了,但是可以用来查看你的任务的优先级。
  • module avail: 查看所有预先安装好的模块
  • module load: 加载某个模块
  • module use: 使用某个模块集合
    -sstat: 查看正在执行的任务状态
    -sacct: 查看已经跑完的任务状态

示范脚本

#!/bin/bash
#SBATCH -p node1   #要使用的节点
#SBATCH --job-name=in5550 # 给你的任务起个名字
#SBATCH -n 1 # 使用到的节点数
#SBATCH --time 00-02:00:00    # time (D-HH:MM:SS) #预估你的任务执行时间,到时间会自动kill掉


module purge # 卸载模块,如果有预先安装的模块可以通过Module load来加载
conda activate in5550 # 使用虚拟环境

# by default, pass on any remaining command-line options
srun python hyperparameter_tuning.py ${@}

注意,module load的包可以直接被所有的虚拟环境使用,而你在login node创建的虚拟环境,会自动的分发到各个运算节点上,然后镜像的安装一模一样的环境

你可能感兴趣的:(slurm 的使用教程)