Slurm常用命令总结

1.常用命令及功能介绍 

  • sacct:显示激活的或已完成作业或作业步的记账(对应需缴纳的机时费)信息。
  • salloc:为需实时处理的作业分配资源,典型场景为分配资源并启动一个shell,然后用此shell执行srun命令去执行并行任务。
  • sattach:吸附到运行中的作业步的标准输入、输出及出错,通过吸附,使得有能力监控运行中的作业步的IO等。
  • sbatch:提交作业脚本使其运行。此脚本一般也可含有一个或多个srun命令启动并行任务。
  • sbcast:将本地存储中的文件传递分配给作业的节点上,比如/tmp等本地目录;对于/home等共享目录,因各节点已经是同样文件,无需使用。
  • scancel:取消排队或运行中的作业或作业步,还可用于发送任意信号到运行中的作业或作业步中的所有进程。
  • scontrol:显示或设定Slurm作业、队列、节点等状态。
  • sinfo:显示队列或节点状态,具有非常多过滤、排序和格式化等选项。
  • squeue:显示队列中的作业及作业步状态,含非常多过滤、排序和格式化等选项。
  • srun:实时交互式运行并行作业,一般用于段时间测试,或者与sallcoc及sbatch结合。

2.查询作业:sacct

参数解释
-E, --endtime=end_time查询在指定时间之前,任何状态的作业.如果通过-s参数指定
状态则返回在此时间之前的指定状态的作业,有效格式为:
HH:MM[:SS] [AM|PM]
MMDD[YY] or MM/DD[/YY] or MM.DD[.YY]
MM/DD[/YY]-HH:MM[:SS]
YYYY-MM-DD[THH:MM[:SS]]
-S, --starttime= starttime在指定时间后,任何状态的作业
-T, --truncate如果一个job在 --starttime之前开始运行,开始时间将被截断
为 --starttime,同样的作业结束时间 = --endtime
-o, --format指定显示字段以逗号分隔

 

3.节点操作: scontrol

下线节点:

scontrol update nodename=gv21 state=drain reason="hardware error"

上线节点:

scontrol update nodename=[node_name] state=idle

清空节点

scontrol update nodename=[node_name] state=down reson="debug"

节点恢复

scontrol update nodename=[node_name]  state=resume

显示分区详情:

scontrol show partition [queue_name]

显示作业详情:

scontrol show job [jobid]

显示节点详情

scontrol show node nodes

显示配置详情

scontrol show config

修改配置文件后使配置文件生效

scontrol  reconfig

4.用户管理操作 sacctmgr

4.1用户有关

查询用户

sacctmgr show user ***

添加用户

sacctmgr add user sghpc2 DefaultAccount=acct02 Qos=test_qos

修改用户 

sacctmgr modify user sghpc2 set QoS=nomal

删除用户

sacctmgr delete user username

4.2账户相关

查询账户

sacctmgr show account ***

添加账户

 sacctmgr add account acct

修改账户

sacctmgr modify account acc

删除账户

sacctmgr delete account acct

4.3QOS相关

查询QOs:

sacctmgr show qos mormal

 添加QOs

sacctmgr add qos mormal

修改QOs

sacctmgr modify qos mormal

删除QOs

sacctmgr delete qos mormal

5.srun sbatch salloc 常用的作业提交参数

参数参数解释
-J 或者 --job-name指定作业名称
-p 或者 --partition指定队列资源
-N 或者 –nodes= <number>指定节点数量
-n 或者 --ntasks =<number>指定处理器数量
-o 或者--output=<filename pattern>指定 stdout 的输出文件
或者--error=<filename pattern>指定 stderr 的输出文件,如果指定的文件已经存在,它将被 覆盖。

6.其他命令

产看节点拥有资源

slurmd  -C

查看slurm的版本信息

slurmd --version

slurmd -V

sinfo -V

查看slurm中集群列表的命令

sacctmgr show cluster

systemctl启动、停止、重启、查看slurmctld.service的命令

systemctl start slurmctld.service

systemctl stop slurmctld.service

systemctl restart slurmctld.service

systemctl status slurmctld.service

取消指定id作业

scancel [jobid]

查看作业列表

squeue

查看你节点和分区状态

sinfo

]写出使用srun提交使用1个节点,1个核心,一个gpu卡的sleep 100秒作业的命令

srun -N 1 -n 1 –gres=gpu:1 sleep 100

查看系统支持的pmi

srun --mpi=list

<think>好的,用户问的是关于SLURM挂载显卡的问题。首先,我需要确定用户的具体需求。SLURM本身是一个作业调度系统,用于管理集群中的计算资源,包括GPU。用户可能是在使用集群时遇到了GPU配置或挂载的问题,或者想了解如何在SLURM作业中正确请求和使用GPU资源。 首先,我应该回顾SLURM中GPU管理的基本方法。通常,管理员需要在节点配置中定义GPU资源,比如使用Gres(Generic Resources)来标识每个节点的GPU数量。用户提交作业时,通过SLURM的参数来请求GPU资源,例如--gres=gpu:数量,或者指定特定类型的GPU。 接下来,需要考虑用户可能的错误场景。比如,用户可能在提交作业时没有正确请求GPU,导致作业无法访问GPU资源;或者节点上的GPU未被正确配置,导致SLURM无法识别。另外,用户可能对如何检查GPU状态或监控使用情况有疑问。 然后,我应该分步骤说明如何在SLURM中挂载和使用GPU。这包括管理员如何配置节点的GPU资源,用户如何提交作业请求GPU,以及如何验证GPU是否被正确挂载。同时,需要提供一些常用的命令示例,比如scontrol show nodes查看节点GPU信息,sbatch脚本中的参数设置等。 还需要注意不同集群的配置可能不同,比如有的使用--gpus参数而不是--gres,或者需要指定GPU类型。因此,应该建议用户查阅所在集群的文档,或者联系管理员获取具体配置方法。 此外,用户可能在作业脚本中遇到环境变量问题,比如CUDA_VISIBLE_DEVICES的设置,或者驱动版本不兼容的情况。这时候需要指导用户如何检查驱动和CUDA版本,确保与应用程序兼容。 最后,总结常见问题解决方法,比如作业无法识别GPU时的排查步骤:检查请求参数是否正确、节点配置是否包含GPU、驱动是否安装等。同时,提醒用户权限问题,可能需要管理员配置相应的账户权限才能使用GPU资源。 总结来说,用户的需求可能涉及SLURM配置、作业提交参数、GPU资源管理和故障排除。需要以清晰的步骤和示例回答,帮助用户逐步解决问题,并确保他们理解如何在自己的环境中应用这些方法。</think>以下是关于在SLURM作业调度系统中挂载和使用显卡(GPU)的分步说明: --- ### **1. 管理员配置GPU资源(集群层面)** **目标**:确保SLURM识别节点上的GPU硬件。 **步骤**: 1. **定义GPU资源**:在节点配置文件中,通过`gres.conf`声明GPU资源。 ```bash # /etc/slurm/gres.conf 示例 NodeName=node01 Name=gpu Type=tesla_v100 File=/dev/nvidia0 Cores=0-7 NodeName=node01 Name=gpu Type=tesla_v100 File=/dev/nvidia1 Cores=0-7 ``` - `Type`:指定GPU型号(如tesla_v100、a100等)。 - `File`:关联的GPU设备文件。 2. **重启SLURM服务**:使配置生效。 ```bash systemctl restart slurmctld ``` 3. **验证GPU资源**: ```bash scontrol show node node01 | grep Gres ``` 输出应包含:`Gres=gpu:tesla_v100:2`(表示2块V100 GPU)。 --- ### **2. 用户提交GPU作业(作业脚本层面)** **目标**:在作业中请求并正确使用GPU资源。 **步骤**: 1. **通过SBATCH指令请求GPU**: - **通用方法**:使用`--gres=gpu:[数量]` ```bash #SBATCH --gres=gpu:1 # 请求1块任意型号的GPU #SBATCH --gres=gpu:2 # 请求2块GPU ``` - **指定GPU型号**(若集群支持): ```bash #SBATCH --gres=gpu:tesla_v100:1 # 请求1块V100 GPU ``` - **替代语法**(部分集群可能使用): ```bash #SBATCH --gpus=1 # 等效于--gres=gpu:1 #SBATCH --gpus=rtx3090:2 # 请求2块RTX 3090 GPU ``` 2. **绑定GPU与进程**: 在作业脚本中,通过环境变量确保进程与GPU绑定: ```bash # 限制仅使用分配的GPU(避免跨GPU抢占) export CUDA_VISIBLE_DEVICES=$(nvidia-smi --query-gpu=index --format=csv,noheader | tr '\n' ',') ``` 3. **完整作业脚本示例**: ```bash #!/bin/bash #SBATCH --job-name=gpu_test #SBATCH --partition=gpu #SBATCH --gres=gpu:1 #SBATCH --output=output.log # 加载CUDA环境(依集群配置) module load cuda/11.7 # 运行GPU程序(例如PyTorch训练) python train.py ``` --- ### **3. 验证GPU是否挂载成功** **目标**:确认作业实际获得了GPU资源。 **方法**: 1. **日志检查**: 作业日志中应显示GPU设备被成功分配: ```bash INFO: Requested GPU resources: 1 INFO: Detected 1 GPU device(s) ``` 2. **命令行验证**(在作业脚本中插入调试命令): ```bash # 查看分配的GPU信息 nvidia-smi # 检查CUDA可见设备 echo $CUDA_VISIBLE_DEVICES ``` --- ### **4. 常见问题与解决** | **问题** | **解决方案** | |-----------------------------------|-----------------------------------------------------------------------------| | 作业未分配到GPU | 检查`#SBATCH --gres=gpu`指令是否正确,或联系管理员确认节点是否配置GPU资源。 | | `nvidia-smi`显示"No devices found" | 确认节点驱动已安装,或`CUDA_VISIBLE_DEVICES`是否被错误覆盖。 | | 多进程任务中GPU竞争 | 使用`CUDA_VISIBLE_DEVICES`绑定特定GPU,或通过程序级控制(如`torch.cuda.set_device()`)。 | --- ### **总结** - **管理员需**:在`gres.conf`中声明GPU,并通过SLURM服务生效。 - **用户需**:在作业脚本中正确请求GPU资源,并在代码中绑定设备。 - **验证关键**:通过`nvidia-smi`和日志确认GPU分配状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值