/data/shared(作业数据放这里,三台节点共享;R 包和 Python 环境在各节点本地)| 概念 | 说明 |
|---|---|
| 节点 | 一台物理服务器(node01/02/03) |
| 作业 | 你要运行的一次计算任务 |
| 队列 | 作业排队的地方,空闲资源够了自动开跑 |
| 分区 | 目前只有一个 all 分区,含全部 3 个节点 |
把要跑的命令写成一个脚本文件,用 sbatch 提交。作业会被调度到空闲节点执行,不占用登录节点。
新建脚本 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()会自动找到,无需额外设置。
新建脚本 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 等包。
| 参数 | 含义 | 示例 |
|---|---|---|
--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
进去后就是一个计算节点的终端,可以交互式跑 R 或 python。用完 exit 退出。
调试完记得退出,别占着资源。
Rscript 大数据分析会把登录节点拖慢,影响所有人提交作业)。一律用 sbatch 提交。/data/shared:作业可能被调度到任意节点,数据只有放 /data/shared(共享盘)才能被所有节点读到。作业号.out 文件里。--time 是可选参数,不写则不限时;写了但设太短,作业到点会被杀掉。拿不准就别写。oom-kill,加大 --mem 重跑。| 问题 | 原因 | 解决 |
|---|---|---|
squeue 看不到作业 |
作业已结束或提交失败 | sacct 查历史;检查脚本语法 |
作业一直 PD(排队) |
资源不够,前面有作业占着 | 等前面的跑完,或减少申请的核数/内存 |
作业报 oom-kill |
内存申请少了 | 加大 --mem 重跑 |
Rscript 报 package not found |
该包没装 | 按《离线安装 R 与 Python 包教程》离线补装 |
Python 报 No module named |
没激活 work 环境 | 脚本里加 source .../conda.sh + conda activate work 两行 |
| 输出文件里中文乱码 | 终端编码问题 | 脚本开头加 export LANG=zh_CN.UTF-8 |