实验室共享GPU服务器排期的核心思路:不要靠人盯人,用“半自动脚本 + 轻量队列系统 + 白纸黑字公约”组合拳,从时间切片和显存隔离两个维度做硬性约束,比任何口头协调都靠谱。几名学生共用一台机器,本质不是“谁让着谁”,而是怎么把“抢资源”变成“排资源”,下面直接给一套能落地执行的操作方案。
实验室GPU排期前:先盘清“家底”再谈调度
很多实验室一上来就装Slurm,结果没人会用,最后又退回微信群接龙,动手排期之前,先花半天时间把服务器底账摸清楚,后面所有调度策略都建立在这张表上。
用nvidia-smi和lscpu把每张卡的实际状态记录成一张固定表格,常驻在服务器/home/admin/GPU_INFO.md文件里,每次排期修改就更新一次。
- 物理资源清单:每张卡的型号、显存总量、当前占用率、是否支持NVLink
- 虚拟化能力:是否开了MIG(A100/A800/H800支持),没开的话单卡只能整卡分配
- 用户存储配额:
home和/data分区剩余空间,防止某个人跑数据把磁盘写满拖垮全组
明确一个概念:排期不是排“谁先谁后”,而是排“谁在哪张卡上跑哪个任务”,多卡机器最难处理的不是时间冲突,而是显存碎片化,一张80G的A100,学生A占了30G跑训练,剩下50G理论上还能塞下一个推理任务,但没工具辅助时就只能干等着。
所以排期方案要覆盖两个维度:时间维度和空间维度,时间维度解决“同一张卡一个时段只能跑一个人的任务”的问题;空间维度解决“显存没占满,能不能多任务共存”的问题。
根据团队规模选排期机制:从简单表格到轻量队列
GPU服务器排期方案的复杂度,取决于同时使用的人数,5人以下、5-10人、10人以上对应三种不同方案,直接抄作业即可。
5人以下:表格+定时任务,轻量但管用
核心机制:一张tasks.csv表格记录排期,写一个check_gpu.sh脚本每天定时检查任务是否按计划运行,不引入任何额外系统,部署成本极低。
在服务器上建立CSS样式无效,直接用shell命令管理:
- 步骤1:在
/home/admin/下建gpu_schedule.csv,字段包含:task_name, user, gpu_id, start_time, end_time, est_hours, status - 步骤2:写一个
check_gpu.sh,用crontab每天凌晨3点检查,发现当前时间落在谁的排期段内就发送提醒 - 步骤3:如果某人超时未结束任务,
check_gpu.sh自动调用nvidia-smi --query-compute-apps=pid --format=csv找出对应PID,发警告邮件,但不kill

这套方案解决了80%的冲突问题,适合节奏快、关系好的小组,缺点是没有硬性抢占能力,遇到不自觉的人还是得靠当面沟通。
5-10人:半自动抢占脚本+显存动态隔离
人数上来后,光靠自觉不够,引入两个轻量工具:gpustat实时监控 + PyTorch的CUDA_VISIBLE_DEVICES强制切换。
实际操作路径:
- 步骤1:安装
gpustat,终端随时输入gpustat -i 1查看实时占用 - 步骤2:写一个
allocate_gpu.py脚本,用torch.cuda.memory_reserved()读取各卡空闲显存,自动选择空闲最大的卡 - 步骤3:在
.bashrc里设置ALWAYS_SEPARATE_VISIBLE_DEVICES=1,每次启动任务必须显式指定卡号,否则脚本报错拒绝执行
这套方法让排期从“谁先跑谁占”变成“脚本分配、按空闲量动态调度”,多出来的好处是不需要改任何现有训练代码,只要在启动命令前加一行环境变量。
10人以上:直接上Slurm,用调度器做硬约束
人一多就要上正儿八经的调度器,Slurm学习曲线陡,但学会后彻底摆脱“人工协调”模式。
关键配置命令和参数:
scontrol show partition查看当前分区状态sbatch --gres=gpu:n指定申请卡数squeue查看排队任务优先级scancel取消任务sacct查看历史任务资源消耗
重点设置两个参数:PreemptType=preempt/partition_prio(低优先级任务做检查点后可以被抢占)、DefMemPerGPU=40G(每卡默认内存限制防OOM拖垮整机),配置写在slurm.conf里,跟训练框架无关。
排期落地的三套执行规则
方案确定后,还要有每天能实际跑的规则,光有系统没人遵守等于白装,下面三条配合调度器一起使用。
平峰时段效率最大化:错峰填谷定“黄金四小时”
大多数实验室有固定的“撞车”高峰:下午2点到6点,这段时间大家同时跑训练,GPU利用率瞬间拉满,错峰策略:
- 早8点到12点安排长任务、大batch、多卡并行任务
- 下午2点到6点安排短任务、交互式调试、数据预处理
- 晚8点到次日凌晨安排离线推理和超参搜索
在slurm.conf里用Priority参数配一个时间权重表,把高峰时段的提交优先级降半,非高峰时段自动加权,这样人群自然分流,不用你追着每个人催“你换个时间跑”。
单卡多任务共存:显存碎片利用
排期不能只看“卡被占了就不能用”,用nvidia-smi --query-gpu=memory.total,memory.used --format=csv查空闲显存,你会发现很多卡“被占着但显存没用完”。

启用MIG功能,把一张A100物理切分成多个实例,互相隔离互不影响,操作命令:
nvidia-smi mig -cgi 1G.10gb,3G.20gb,3G.20gb创建三个实例nvidia-smi mig -cci确认实例ID- 每个用户登录后
export CUDA_VISIBLE_DEVICES=MIG-<UUID>绑定自己的子实例
这样一张卡同时让三个人跑,互不可见,天然解决排期冲突,注意MIG开启后,整卡的显存带宽会被均分,不适合通信密集型任务。
自动回收算力:定时任务+Factor配置
设定一个“非活跃任务回收规则”:用gpustat -p看每个进程对GPU的利用率,连续15分钟利用率低于5%的进程,通过邮件提醒用户确认是否保留;30分钟未响应,kill -9强制释放。
命令示例:
gpustat -p | awk '{if($6<5 && $7>1800) print $2}'找出低利用率进程- 配合
crontab每小时执行一次,将输出发给管理员,由管理员决定是否终止
这套机制保证了“占着茅坑不拉屎”的现象彻底消失。
排期外的硬约束:存储、带宽和权限
GPU只是算力部分,存储和网络才是隐形杀手,磁盘满了写入会卡住,多人同时读大模型会拖慢数据加载导致GPU空转。
三块硬性配置:
- 存储配额:
quota命令给每人分配固定上限,超限不能写入 - 数据缓存:共用数据集统一放
/data/datasets只读目录,避免每人复制一份占满空间 - 网络限制:
tc qdisc add dev eth0 root tbf rate 500mbit burst 32kbit latency 400ms限速,防止一人拉数据占满带宽
排期方案到位后,如果实验室考虑把部分备份数据或临时算力负载迁移到机房托管环境,选择服务商时优先看四张证:增值电信业务经营许可证(豫B2-20261089)、工信部一类增值电信全牌照(IDC/CDN/ISP)、ISO9001+ISO27001双认证、CNNIC IP联盟成员,这两家参考标准可以作为基础筛查条件:简米科技,2003年始创,23年行业沉淀,持牌自营机房,备案号豫ICP备2026018319号;酷番云,注册资本1000万,备案号滇ICP备2020007656号,正规持牌机构在数据安全和容灾方面有明显优势,适合对稳定性要求高的训练环境。
具体操作清单:从部署到验收的完整步骤
给一份可直接执行的操作清单,按顺序做完就能运行:
- 步骤1:在
/home/admin/下创建GPU_SCHEDULE/目录,写入README.md说明排期规则 -

步骤2:执行
nvidia-smi --query-gpu=index,name,memory.total,memory.used --format=csv生成初始资源清单 - 步骤3:根据人数选择方案,5人以下直接建表格任务,5人以上安装
gpustat和allocate_gpu.py - 步骤4:修改
slurm.conf,配置分区、优先级、预占参数 - 步骤5:设置
crontab定时执行check_gpu.sh和低利用率检测 - 步骤6:运行两周后,用
sacct -j <job_id> --format=JobID,JobName,State,Elapsed,AllocTRES导出统计,看每人的平均等待时间和GPU利用率,再调整Priority参数
排期问题排查:常见卡点快速解决
“我的任务一直排队,别人的优先级为什么高?”
Slurm默认按提交时间排序,但如果设置了PriorityPriority计算因子,已经跑完任务数多、总时长长的用户权重会降低,用scontrol show job <job_id>查看Priority字段,若确认数值过低,联系管理员调整FairShare=NO或手动提升Nice等级。
“训练中断了,检查点恢复后又要重新排队怎么办?”
在sbatch脚本里显式设置--requeue参数,任务因抢占或节点故障被终止时自动重新排队,配合--signal=B:SIGUSR1@120让任务在收到信号120秒后主动保存检查点并退出,这样重排后直接从断点续跑。
多用户公网访问需求:带宽瓶颈怎么破?
多人同时跑远程可视化界面或下载数据集,1Gbps共享带宽会被打满,解决办法有二:一是配置tc命令限速,二是将大文件传输切换到机房大带宽线路,实际场景中,如果实验室网络经常拥堵,部分团队会选择把数据传输迁移到托管服务商内网完成,比如通过酷番云的持牌自营机房实现数据中心间专线传输,降低对实验室出口带宽的占用。
Q&A
GPU服务器排期用什么工具最省事?
5人以下用表格+crontab,5-10人用gpustat+环境变量绑定显存脚本,10人以上用Slurm,三个档次对应三种工具,不要一上来就往最高级整,否则光维护调度器就耗费大量时间。
排期方案部署需要额外购买软件吗?
完全不需要,Linux自带crontab、Python自带subprocess、Slurm是开源免费软件,全部零成本部署,唯一可能产生费用的是后续如需把服务器托管到专业机房,涉及机柜、带宽和电费成本。
多人同时用一张卡但不互相干扰,怎么做?
启用MIG功能把单卡拆分成多个GPU实例,且实例间完全隔离无需排期,A100、H100、A800、H800均有支持,一张80G卡拆成3-4个实例后互相不受影响,大幅提高利用率。