Slurm中无需登录节点如何实现各节点local scratch文件向外传输(类反向sbcast)
Slurm集群本地scratch文件反向传输方案(sbcast反向功能实现)
以下是几种无需登录计算节点即可拉取节点本地scratch分区文件的可行方案:
方案1:使用Slurm原生sgather工具(官方反向sbcast实现)
- 适用场景:Slurm版本≥20.02,官方原生支持,无需额外配置
- 核心功能:和sbcast逻辑完全反向,支持从指定节点/指定作业对应的所有节点拉取本地文件到管控节点/共享存储,自动用节点名区分同名文件避免覆盖
- 常用命令:
按作业ID拉取所有作业节点上的指定文件:sgather --jobid <你的作业ID> /local/scratch/源文件路径 ./本地目标存储路径/
按指定节点列表拉取:sgather -w node01,node02 /local/scratch/源文件路径 ./本地目标存储路径/
方案2:srun并行执行传输命令(全版本通用)
- 适用场景:Slurm版本较低没有sgather,或者需要自定义传输逻辑的场景
- 操作步骤:
- 先获取目标节点列表,若要拉取指定作业的节点文件,执行
squeue -j <作业ID> -o "%N" -h即可得到节点列表 - 用srun在所有目标节点并行执行传输命令,示例:
传输到共享存储(不需要跨节点认证):srun -w <节点列表> --ntasks-per-node=1 cp /local/scratch/你的文件路径 /共享存储/目标路径/$(hostname)-结果文件
传输到管控节点本地路径:srun -w <节点列表> --ntasks-per-node=1 rsync /local/scratch/你的文件路径 管控节点用户名@管控节点IP:/目标路径/$(hostname)-结果文件
- 先获取目标节点列表,若要拉取指定作业的节点文件,执行
方案3:作业脚本内嵌自动回传逻辑
- 适用场景:作业尚未提交,可提前配置数据回传规则
- 操作方法:在sbatch提交脚本的作业执行逻辑末尾添加回传命令,作业运行结束前自动将本地scratch数据传到共享存储,避免scratch清空导致数据丢失,示例脚本:
#!/bin/bash #SBATCH --job-name=compute_job #SBATCH --nodes=4 #SBATCH --ntasks-per-node=8 # 作业计算逻辑 srun /path/to/your/compute/program # 自动回传本地scratch数据 mkdir -p /sharedfs/result/${SLURM_JOB_ID}/$(hostname) cp -r /local/scratch/${USER}/${SLURM_JOB_ID}/* /sharedfs/result/${SLURM_JOB_ID}/$(hostname)/
注意:绝大多数Slurm集群的local scratch分区会在作业结束后自动清空回收空间,建议优先选择方案3提前配置自动回传,若作业已运行,需在作业结束前尽快执行拉取操作。
内容的提问来源于stack exchange,提问作者AhmadRg
相关产品推荐
相关产品推荐

