Skip to main content

提交一个Slurm任务(脚本开发)

在HPC四期平台中,作业可以通过Slurm调度器提交至鲲鹏CPU集群,并根据一定规则分配资源调度计算。

提示

更多关于Slurm命令用法请参考官方文档:Slurm Documentation

1. 准备工作

SSH 连接 HPC 平台

使用 SSH 客户端连接到 HPC四期登录节点:

ssh username@hpc4login.hpc.hkust-gz.edu.cn

sinfo查看可用资源

  • sinfo命令会列出所有 Slurm 分区(partition)、节点数量、节点状态(idle / alloc / down)等信息。
  • HPC4期国产集群包含22台鲲鹏CPU节点,分区名: hpc alt text

module查看预置软件

  • HPC 平台通常使用 module 系统管理软件环境。
  • 使用module av查看已预置的软件及版本
  • 在脚本中使用module load加载对应软件及版本
  • 使用module list查看已加载的软件及版本

2. 编写 Slurm 作业脚本

Slurm 作业脚本是一个包含资源请求指令和实际命令的 Bash 脚本。脚本开头使用 #SBATCH 注释指定作业参数。

基本结构

以下内容请保存至script.sh 所有 #SBATCH 指令必须位于脚本开头,在任何非注释命令之前

#!/bin/bash
#SBATCH --job-name=my_job # 作业名称
#SBATCH --output=%j.out # 标准输出文件(%j 为作业ID)
#SBATCH --error=%j.err # 错误输出文件
#SBATCH --nodes=1 # 请求节点数
#SBATCH --ntasks-per-node=1 # 每节点任务数
#SBATCH --cpus-per-task=8 # 每任务 CPU 核心数
#SBATCH --mem=16G # 内存(每节点或每任务,视配置而定)
#SBATCH --time=02:00:00 # 最大运行时间(HH:MM:SS)
#SBATCH --partition=hpc # 指定分区(队列)

# 加载模块
module load your_software_module

# 运行你的程序
./my_program input.txt

3. 提交Slurm任务:sbatch

使用sbatch命令提交Slurm任务。如当前满足任务运行条件(资源/配额/权限等),Slurm会返回任务号;若不满足任务运行条件,任务将会进入排队等待。

sbatch script.sh

常用Slurm命令

命令说明
sbatch script.sh提交作业
squeue -u $ USER查看自己的作业状态
scancel <JOBID>取消指定作业
sinfo查看集群分区和节点状态

4. 多次交互开发:tmux + srun

  • srun --pty bash可以启动一个交互任务,并在里面进行多次脚本开发
  • 启动的交互会话一旦断开(如网络中断、SSH 断连),会话就会终止,无法再次连接

结合 tmux(终端复用工具)与 srun 创建一个持久化的交互环境,即使断开 SSH 也能重新连接。

步骤 1:在登录节点启动一个命名的 tmux 会话

tmux new -s debug_session

这将创建一个名为 debug_session 的会话,并进入该会话。

步骤 2:在 tmux 会话中提交交互式 Slurm 任务

srun --job-name=interactive_debug \
--nodes=1 \
--ntasks=1 \
--cpus-per-task=4 \
--mem=16G \
--time=02:00:00 \
--partition=hpc \
--pty bash

若满足任务运行条件,将连接到计算节点,并获得一个交互式 shell。

步骤 3:在计算节点中运行命令

module load python/3.9
python hello.py

步骤 4:安全断开连接(不终止任务)

按下组合键:Ctrl-b,然后按 d,将返回到登录节点的 shell,但 tmux 会话和其中的 Slurm 任务仍在后台运行。

步骤 5:重新连接会话

在登录节点重新连接会话:tmux attach -t debug_session