You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SLURM单GPU作业独占节点,如何实现多作业共享单节点GPU?

解决SLURM单节点同时运行多单GPU作业的方案

嘿,这个问题我之前帮不少用户解决过——核心问题要么是你的作业默认占满了节点的CPU/内存资源,要么是集群节点默认设置了独占模式,导致其他单GPU作业没法在同一节点调度。下面给你一步步的优化方案:

一、先调整你的作业脚本参数

你的现有脚本只指定了GPU数量,但没限制CPU和内存,SLURM可能默认把整个节点的资源分给单个作业,导致其他作业进不来。修改后的脚本参考如下:

#!/bin/bash
#SBATCH --gres=gpu:1               # 每个作业用1块GPU
#SBATCH --ntasks-per-node=1        # 每个作业只跑1个任务
#SBATCH --cpus-per-task=4          # 给每个作业分配4核CPU(根据节点总CPU数调整:比如节点16核配4块GPU,每GPU对应4核刚好)
#SBATCH --mem-per-gpu=8G           # 限制每个GPU对应的内存(避免一个作业占满节点内存)
#SBATCH --exclusive=no             # 明确允许节点共享(如果集群默认是独占模式的话)
#SBATCH -p ghp-queue               # 指定目标队列

# 可选:打印分配的GPU,确认SLURM资源分配正确
echo "当前作业分配的GPU编号:$SLURM_STEP_GPUS"

# 运行你的程序
./myprog.exe

关键参数说明:

  • --cpus-per-task:必须设置!如果不指定,SLURM可能默认把节点所有CPU分给单个作业,其他作业就没CPU资源可调度了。
  • --mem-per-gpu:避免单个作业吃光节点内存,导致其他作业因内存不足被拒绝调度。
  • --exclusive=no:如果你的集群节点默认设置了Exclusive=yes(单作业独占节点),这个参数会强制允许节点共享。

二、检查集群节点的共享配置

如果改了脚本还是不行,那大概率是集群节点默认设置了独占模式,分两种情况处理:

如果你是集群管理员

可以修改节点的共享属性,让它允许多作业共享:

# 临时修改单个节点(SLURM重启后失效)
scontrol update NodeName=你的节点名 Shared=yes

# 永久修改(编辑slurm.conf文件,添加或修改对应配置)
DefaultShared=yes
# 或者针对特定节点单独设置
NodeName=你的节点名 Shared=yes

如果你是普通用户(无管理员权限)

直接联系集群管理员,说明需求:需要将ghp-queue队列对应的节点设置为共享模式,允许单GPU作业在同一节点并行运行。

三、验证优化是否生效

提交3-4个修改后的作业,用以下命令确认效果:

  1. 用squeue查看作业是否分配到同一个节点:
squeue -u 你的用户名

如果多个作业的NODELIST列显示同一个节点,说明调度成功。

  1. 登录到该节点,用nvidia-smi查看GPU使用情况:
ssh 节点名
nvidia-smi

应该能看到多个进程分别占用不同的GPU设备。

注意事项

  • 一定要根据节点的实际硬件配置调整--cpus-per-task和--mem-per-gpu:比如节点有24核CPU、4块GPU,那每作业分配6核CPU会更合理。
  • 如果你的程序本身会占用大量CPU/内存,要适当调整资源分配,避免作业之间互相干扰导致性能下降。

内容的提问来源于stack exchange,提问作者ta8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:40:14