提交一个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
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