刘岚实验室

Slurm 集群使用手册

2026/08/21
14
0

一、集群简介

  • 3 台服务器:node01(111)、node02(112)、node03(113)
  • 总资源:1536 核 CPU(3 × 512)、384 GB 内存(3 × 128GB)
  • 共享数据盘/data/shared(作业数据放这里,三台节点共享;R 包和 Python 环境在各节点本地)
  • 使用方式:登录后提交作业,由调度器自动分配到空闲节点运行,无需关心在哪台机器跑

二、登录

  1. 通过堡垒机用你自己的账号登录服务器
  2. 所有 Slurm 命令都在**登录节点(node01)**上执行

三、核心概念

概念 说明
节点 一台物理服务器(node01/02/03)
作业 你要运行的一次计算任务
队列 作业排队的地方,空闲资源够了自动开跑
分区 目前只有一个 all 分区,含全部 3 个节点

四、提交作业(最常用)

把要跑的命令写成一个脚本文件,用 sbatch 提交。作业会被调度到空闲节点执行,不占用登录节点

4.1 提交 R 作业

新建脚本 my_r_job.sh

#!/bin/bash
#SBATCH --job-name=myR          # 作业名(随意)
#SBATCH --cpus-per-task=16      # 申请 16 核
#SBATCH --mem=32G               # 申请 32GB 内存
#SBATCH --time=01:00:00         # 可选:运行时间上限,不确定就不写(不限时)
#SBATCH --output=%j.out         # 输出写到 作业号.out

Rscript /data/shared/你的目录/脚本.R

提交:

sbatch my_r_job.sh

R 包已装在 /data/R-library,脚本里 library() 会自动找到,无需额外设置。

4.2 提交 Python 作业

新建脚本 my_py_job.sh

#!/bin/bash
#SBATCH --job-name=myPy
#SBATCH --cpus-per-task=32      # 申请 32 核
#SBATCH --mem=64G               # 申请 64GB 内存
#SBATCH --time=02:00:00         # 可选:运行时间上限,不确定就不写(不限时)
#SBATCH --output=%j.out

source /data/miniconda3/etc/profile.d/conda.sh
conda activate work
python /data/shared/你的目录/脚本.py

提交:

sbatch my_py_job.sh

Python 环境 work 需要手动激活(上面两行),激活后才能用 scanpy、pandas 等包。

4.3 常用资源参数

参数 含义 示例
--cpus-per-task 申请核数 16(最多 512)
--mem 申请内存 32G(最多 128G/节点)
--time 运行时间上限(可选) 不写则不限时;01:00:00 表示 1 小时
--nodes 申请节点数 1(默认 1 个节点)
--output 输出文件 %j.out(%j=作业号)

核数和内存别申请超过单节点上限(512 核、128GB)。申请多了排不上队,申请少了作业可能跑不完被终止。

提交后可以放心关掉 SSH 窗口sbatch 提交的作业是异步的,由 Slurm 守护进程在后台运行,与你的 SSH 连接无关。关窗口、断网、下班都不影响作业运行,随时重新登录用 squeue 查看进度、cat 作业号.out 看输出。


五、查看和管理作业

sinfo                  # 看节点状态(idle=空闲,alloc=忙)
squeue                 # 看排队和运行中的作业
squeue -u 你的用户名    # 只看自己的作业
scancel 作业号         # 取消作业(作业号从 squeue 看)
sacct                  # 看已结束作业的统计(运行时间、内存等)

六、交互式使用(调试用)

需要临时进计算节点调试(不通过脚本提交):

srun --cpus-per-task=16 --mem=32G --pty bash

进去后就是一个计算节点的终端,可以交互式跑 Rpython。用完 exit 退出。

调试完记得退出,别占着资源。


七、注意事项

  1. 不要在登录节点直接跑重任务(node01 上直接 Rscript 大数据分析会把登录节点拖慢,影响所有人提交作业)。一律用 sbatch 提交。
  2. 数据放 /data/shared:作业可能被调度到任意节点,数据只有放 /data/shared(共享盘)才能被所有节点读到。
  3. 看输出:作业跑完,输出在提交目录的 作业号.out 文件里。
  4. 超时会被终止--time 是可选参数,不写则不限时;写了但设太短,作业到点会被杀掉。拿不准就别写。
  5. 内存超了会被终止:申请的内存比实际用的少,作业会被 OOM 杀掉,报错类似 oom-kill,加大 --mem 重跑。

八、常见问题

问题 原因 解决
squeue 看不到作业 作业已结束或提交失败 sacct 查历史;检查脚本语法
作业一直 PD(排队) 资源不够,前面有作业占着 等前面的跑完,或减少申请的核数/内存
作业报 oom-kill 内存申请少了 加大 --mem 重跑
Rscriptpackage not found 该包没装 按《离线安装 R 与 Python 包教程》离线补装
Python 报 No module named 没激活 work 环境 脚本里加 source .../conda.sh + conda activate work 两行
输出文件里中文乱码 终端编码问题 脚本开头加 export LANG=zh_CN.UTF-8