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

使用Slurm时如何在单节点内分组GPU?求替代Partition的方案

Alright, since Slurm partitions are meant for grouping nodes rather than splitting GPUs within a single node, here are three solid, practical solutions to group your 4 GPUs into two pairs (gpu0+gpu1 as Group 1, gpu2+gpu3 as Group 2) on node0:

方案1:自定义GRES资源(最规范的Slurm原生方式)

Slurm's Generic Resources (GRES) lets you define custom resource types, which we can leverage to represent your GPU groups. Here's how to set it up:

  1. 更新slurm.conf配置:
    在node0的节点配置行中添加自定义GRES定义:

    NodeName=node0 CPUs=... State=UNKNOWN Gres=gpugroup1:2,gpugroup2:2
    

    这会告诉Slurm:node0拥有2个gpugroup1资源(每个对应2块GPU)和2个gpugroup2资源。

  2. 配置gres.conf映射设备:
    将自定义组与实际GPU设备绑定:

    Name=gpugroup1 File=/dev/nvidia0,/dev/nvidia1
    Name=gpugroup2 File=/dev/nvidia2,/dev/nvidia3
    

    重启Slurm守护进程使配置生效。

  3. 提交指定组的作业:
    要在Group 1(gpu0+gpu1)上运行作业,执行:

    sbatch --gres=gpugroup1:1 --nodes=1 --ntasks=1 your_job_script.sh
    

    Slurm会自动跟踪这些自定义资源,避免作业抢占重叠GPU导致冲突。

方案2:脚本内动态设置CUDA_VISIBLE_DEVICES(无需修改Slurm配置)

如果你没有权限修改Slurm配置,可以通过在作业脚本中设置CUDA_VISIBLE_DEVICES环境变量,控制作业可见的GPU范围。提交时可传入组标识:

  1. 编写作业脚本(gpu_group_job.sh):

    #!/bin/bash
    #SBATCH --nodes=1
    #SBATCH --ntasks=1
    #SBATCH --gres=gpu:2  # 总共请求2块GPU
    
    # 根据传入的GROUP变量设置可见GPU
    if [ "$GROUP" == "1" ]; then
        export CUDA_VISIBLE_DEVICES=0,1
    elif [ "$GROUP" == "2" ]; then
        export CUDA_VISIBLE_DEVICES=2,3
    fi
    
    # 运行你的GPU任务
    python your_gpu_program.py
    
  2. 分批次提交作业:
    提交到Group 1:

    sbatch --export=GROUP=1 gpu_group_job.sh
    

    提交到Group 2:

    sbatch --export=GROUP=2 gpu_group_job.sh
    

    也可以用Slurm任务数组一键提交两个组的作业:

    sbatch --array=1-2 --export=GROUP=%a gpu_group_job.sh
    

方案3:使用--gpu-bind进行GPU映射(临时测试/快速部署)

较新版本的Slurm支持--gpu-bind参数,可显式映射作业能访问的GPU,配合请求总GPU数使用:

提交到Group 1:

sbatch --nodes=1 --ntasks=1 --gres=gpu:2 --gpu-bind=map_gpu:0,1 your_job_script.sh

提交到Group 2:

sbatch --nodes=1 --ntasks=1 --gres=gpu:2 --gpu-bind=map_gpu:2,3 your_job_script.sh

注意:该方式要求Slurm版本在19.05及以上,且需要你手动跟踪组的使用状态,避免资源冲突。


内容的提问来源于stack exchange,提问作者Jongsu Liam Kim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:05:29