AI服务器SRE日常巡检要做哪些配置检查
AI服务器的SRE配置,核心不是把一堆监控工具装上去,而是围绕GPU、驱动、容器运行时和显存这四样东西建立每日可执行的巡检项。
只要每天花几分钟跑完检查脚本,大部分显存泄漏、驱动掉卡和容器起不来的问题都能在影响训练任务之前被发现。
巡检前先确认环境基线
在写巡检脚本之前,先把当前环境的关键版本固定下来,后面所有检查都以这个基线为准。
登录服务器后执行:
nvidia-smi
nvidia-smi --query-gpu=driver_version --format=csv,noheader
nvcc --version
把输出里的驱动版本、
CUDA 版本记到巡检脚本的注释里。驱动版本和 CUDA 版本一旦升级,
需要同步检查容器镜像里的 CUDA 运行时是否匹配,
否则会出现容器内 nvidia-smi 正常、
但 PyTorch 报 CUDA driver version is insufficient 的情况。
同时确认容器运行时配置:
docker info | grep -i runtime
输出里应该能看到 nvidia runtime。
如果没有,说明 nvidia-container-toolkit 没有正确注册,后面所有带 --gpus 的容器都会失败。
每日GPU健康与显存检查
巡检脚本的第一段查显卡本身。
用 nvidia-smi 的查询模式输出结构化结果,方便脚本判断:
nvidia-smi --query-gpu=index,name,temperature.gpu,utilization.gpu,memory.used,memory.total,ecc.errors.uncorrected.volatile.total --format=csv
重点看三个值:
- 显存占用:如果某张卡在空闲时段(没有训练任务)显存占用仍然超过 5%,大概率是上一个进程没退干净,用
nvidia-smi找到 PID 后确认再kill。 - 温度:持续高于 85°C 要检查风扇和机房散热,温度过高会触发降频,训练速度明显变慢。
- ECC 错误:
ecc.errors.uncorrected.volatile.total非零说明显存出现不可纠正错误,这张卡需要安排下线检修。
可以把检查结果写进日志文件,用 crontab 每天固定时间跑:
0 8 * * * /opt/sre/gpu_check.sh >> /var/log/sre/gpu_check.log 2>&1
脚本里用 awk 判断显存占用是否超过阈值,超过就输出告警行,方便后续接告警平台。
容器运行时与驱动版本一致性
AI 服务器上的训练任务基本都跑在容器里,所以巡检要验证容器内 GPU 是否真的可用,而不只是宿主机正常。
跑一个轻量验证容器:
docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi
能正常输出显卡信息,说明 nvidia-container-toolkit、驱动和容器运行时链路是通的。
如果报 could not select device driver,先检查 nvidia-container-toolkit 是否安装,再确认 /etc/docker/daemon.json 里是否配置了 nvidia runtime。
另一个容易忽略的点是驱动版本与 CUDA 镜像的兼容性。
宿主机驱动版本决定了容器内能用的最高 CUDA 版本,例如驱动 535 系列最高支持 CUDA 12.2,如果镜像里用的是 CUDA 12.4,容器启动时 nvidia-smi 可能正常,但实际计算会报错。
巡检时把宿主机驱动版本和常用镜像的 CUDA 标签对照一次,记录在案。
日志轮转与磁盘空间
AI 服务器的日志增长很快,训练框架、容器 stdout 和系统日志加起来很容易把磁盘写满。
磁盘满会导致训练中途写 checkpoint 失败,任务直接崩掉。
巡检时检查磁盘使用率:
df -h / /var/lib/docker /data
/var/lib/docker 超过 80% 就要清理,可以执行 docker system prune 删除悬空镜像和无用容器,但执行前确认没有正在运行的任务依赖这些镜像。
同时确认日志轮转配置存在,Docker 默认的 json-file 日志不限制大小,需要在 /etc/docker/daemon.json 里加上:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
修改后重启 Docker 生效。
巡检脚本里可以用 du -sh /var/lib/docker/containers 看容器日志目录大小,异常增长说明某个容器在疯狂打日志。
常见问题与避坑
巡检脚本本身不要用 set -e。nvidia-smi 在某些掉卡场景下会返回非零退出码,脚本一遇到错误就退出,后面的检查项全部跳过,反而漏掉关键信息。
建议每项检查单独判断,把结果逐行写入日志。
不要只看 nvidia-smi 的显存数字。
部分框架(如 PyTorch)的缓存分配器会预留显存但不释放,nvidia-smi 显示占用高但实际没有计算任务。
巡检时配合 nvidia-smi --query-compute-apps=pid,process_name,used_memory 看具体进程,比单看显存总量更准确。
驱动升级后必须重跑验证容器。
SRE 巡检的价值在于基线稳定,驱动升级属于变更操作,升级后把本文的容器验证命令和 nvidia-smi 检查重新跑一遍,确认所有检查项通过再结束变更。
验证巡检是否生效
配置完成后,手动跑一次巡检脚本,确认日志文件里有完整的检查输出,并且每个检查项都有明确的通过或告警标记。
然后等一个巡检周期,检查日志是否按预期写入、告警是否触发。
如果日志里出现告警,
先按对应检查项排查:
显存占用高查残留进程,
温度高查散热,
ECC 错误查硬件。AI服务器SRE配置的巡检项不需要多,
关键是每天稳定执行,
让异常在变成故障之前被看到。