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

如何在SLURM中为同一块GPU设备定义多个gres资源?

问题根因

Slurm原生GRES GPU插件默认以整卡为调度粒度,不允许为同一块物理GPU重复定义配置条目,你配置多条同设备条目触发了配置校验规则,就会返回fatal: Gres GPU plugin failed to load configuration报错。

通用实现方案

无需修改CUDA代码即可生效的方案有两种,可根据你的Slurm版本选择:

方案1:自定义GRES显存分片(全Slurm版本兼容,适用所有ML任务场景)

该方案为逻辑显存配额调度,是目前小显存ML任务共享GPU的主流落地方式:

  • 首先修改slurm.conf,新增自定义GRES类型:
    GresTypes=gpu,gpumem
    # 单卡16G就配置16份gpumem,2卡就配置32份,以此类推
    NodeName=你的计算节点主机名 Gres=gpumem:16
    
  • 再修改gres.conf,配置gpumem和物理GPU的绑定规则,不需要重复定义GPU条目:
    # 单卡16G,拆分16份1G的gpumem配额,绑定到nvidia0和对应CPU核
    Name=gpumem Type=1G File=/dev/nvidia0 CPUs=0-7 Count=16
    # 如有第二块GPU,新增对应行即可
    # Name=gpumem Type=1G File=/dev/nvidia1 CPUs=8-15 Count=16
    
  • 提交任务时按需申请gpumem配额即可,比如需要2G显存就执行:
    srun --gres=gpumem:2 python your_ml_script.py
    
    注:该方案默认是软配额,不会强制限制任务实际显存使用,如需硬隔离,可搭配NVIDIA MPS服务、cgroup显存限制或nvidia-docker运行任务。

方案2:Slurm原生GPU共享调度(20.02及以上版本支持)

如果使用较新版本的Slurm,可直接用原生支持的多实例调度功能,无需自定义GRES:

  • 修改slurm.conf添加以下配置:
    SelectType=select/cons_tres
    GresTypes=gpu
    TaskPlugin=task/affinity,task/cgroup
    
  • 修改gres.conf,在GPU配置条目新增MultipleInstances=yes参数,允许同卡多任务共享:
    AutoDetect=nvml
    Name=gpu Type=对应GPU型号 File=/dev/nvidia0 CPUs=0-7 Count=1 MultipleInstances=yes
    # 多卡按同样格式新增配置行即可
    
  • 重启slurmctld和slurmd服务后,提交任务时正常指定--gpus-per-task=1即可,Slurm会自动调度多个任务到同一块GPU运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:57:01