SLURM技术咨询:如何从控制节点node1在从节点node2运行程序
嘿,既然你已经搞定了SLURM集群的安装,那在node2上跑程序其实挺直接的,我给你一步步捋清楚操作方法,顺便说说需要确认的关键配置点:
直接在指定节点运行程序的方法
1. 交互式运行(用srun)
如果你想实时在node2上操作程序,直接在node1的终端里敲这条命令:
srun --nodes=1 --nodelist=node2 --pty /bin/bash
执行后你会直接进入node2的交互式终端,接下来就像在本地机器上一样运行你的程序就行。要是你不想进入终端,想直接执行某个命令或脚本,也可以这么写:
srun --nodes=1 --nodelist=node2 /path/to/your/program_or_script
2. 批量提交任务(用sbatch)
如果是不需要实时交互的批量任务,先写一个SLURM作业脚本,比如命名为run_on_node2.sh,内容示例如下:
#!/bin/bash #SBATCH --nodes=1 #SBATCH --nodelist=node2 #SBATCH --job-name=node2_test_job # 可选:指定任务运行的CPU/内存资源,比如 --cpus-per-task=4 --mem=8G # 这里写上你的程序运行命令 /path/to/your/program
然后在node1上提交这个脚本:
sbatch run_on_node2.sh
提交后可以用squeue命令查看任务状态,等任务完成后,输出结果会默认保存在当前目录的slurm-<任务ID>.out文件里。
需要确认的特殊配置
虽然SLURM默认配置大多能满足基础需求,但有几个点最好提前检查:
- 节点在线状态:在node1上执行
sinfo命令,查看node2的状态是否为idle(空闲)或alloc(已分配任务),如果是down或drain状态,说明node2的slurmd服务可能没启动,去node2上执行systemctl status slurmd检查服务状态,必要时重启服务。 - 共享存储与权限:确保你的用户账号能在node2上正常访问程序和数据——SLURM默认会用你在node1的用户身份登录node2,所以最好把程序、数据放在NFS这类共享存储目录里,或者提前同步到node2本地。
- SLURM配置正确性:检查控制节点的
slurm.conf文件,确认里面有NodeName=node2的正确配置(比如指定了节点的CPU、内存等资源),并且node2被包含在某个分区(Partition)里。如果node2不在任何分区,提交任务时可能需要额外加--partition=<分区名>参数,或者修改slurm.conf把node2加入对应分区。 - 网络与防火墙:保证node1和node2之间的网络连通性,SLURM通信需要的端口(默认6817、6818等)没有被防火墙拦截,否则控制节点没法调度任务到node2上。
内容的提问来源于stack exchange,提问作者ajthealchemist




