昨天晚上跑的模型今天来一看别别人kill了 心累
更让人郁闷的是,你后来才发现,原来有些人根本不会先看服务器是不是空着。
但抱怨归抱怨,作为一名有素质的“共享玩家”,学会在自己跑模型前,先看看服务器上有没有别人在跑,以及如何友好地处理资源冲突,这应该是所有人应该最先学习的!
【重要忠告⚠️】核心原则:千万不要直接 Kill 别人的进程!这是共享服务器的基本素养,请务必牢记。
那到底该怎么看服务器的资源占用情况呢?别急,教程这就奉上!
核心教程:如何查看服务器资源占用情况?
无论是 CPU 还是 GPU,我们都有对应的查看工具和命令。
1. CPU 占用情况:top
命令
如果你想看服务器上 CPU 的使用情况,top
命令绝对是你的首选,它就像 Linux 里的“任务管理器”,能实时动态显示系统进程。
- 怎么看?
- 直接在命令行输入
top
,回车。看 CPU 整体利用率: 顶部 Cpu(s)
那一行,us
(用户空间)、sy
(内核空间)的百分比越高,说明 CPU 越忙。看负载: 顶部 load average
后面的三个数字,分别代表过去 1、5、15 分钟的系统平均负载。这个数值通常不应该超过 CPU 核心数,高了就说明系统很忙。看哪个进程在用: 往下看,%CPU
列就是每个进程占用的 CPU 百分比,USER
列是哪个用户在跑这个进程。通过 top
,你就能知道服务器的 CPU 是不是“满载”了,有没有人在上面跑着特别耗 CPU 的程序。
2. GPU 占用情况:nvidia-smi
系列,AIer的“救命稻草”
对于搞深度学习的我们,GPU 才是真正的命根子。NVIDIA 提供了一套强大的工具来监控 GPU。
nvidia-smi
(系统自带,基本款):
- 直接输入
nvidia-smi
回车。它会显示所有 GPU 的基本信息:型号、驱动版本、CUDA 版本、显存使用率 (Memory-Usage) 和 GPU 利用率 (GPU-Util)。你可以一目了然地看到每张显卡“累不累”、“还剩多少空间”。gpustat
(简化版,更清晰):
- 如果
nvidia-smi
的输出觉得有点复杂,可以试试 gpustat
。它能给出更简洁、更友好的 GPU 运行概览。如果提示没有这个应用: pip install gpustat
(确保在你的Python环境中安装)。nvitop
(实时查看进程,强烈推荐!):
- 这个工具就像 GPU 界的
top
命令,能实时显示每个 GPU 上正在运行的进程,以及这些进程属于哪个用户、占用了多少显存和利用率。谁在用你的卡,一目了然!如果提示没有这个应用: pip install nvitop
(同样确保在你的Python环境中安装)。通过这些命令,你就能精准地知道,服务器上的 GPU 是不是被占用了,以及具体是哪个用户在占用。
3. 查看其他用户的进程:ps -aux | grep [其他用户的名字]
当你通过 top
或 nvitop
发现某个用户正在占用资源,但想了解更详细的信息时,可以用这个命令:
ps -aux | grep [其他用户的名字]
- 把
[其他用户的名字]
替换成你想查看的用户名(比如 ps -aux | grep userA
)。这个命令会列出该用户在服务器上运行的所有进程,包括进程ID (PID)、CPU/内存占用等。这样你就能知道对方在跑什么程序了。4. 【进阶版】可视化监控与集群管理工具
如果你权限够高/有条件:DCGM-Exporter + Prometheus/Alertmanager
- 如果你所在的团队有更专业的服务器管理需求,可以考虑部署 DCGM-Exporter。它能配合 Prometheus 和 Alertmanager,搭建一套完整的可视化监控系统。这样你不仅能通过网页直观地看到所有 GPU 的实时状态,还能设置卡空闲/高负载告警,再也不用手动去查了!当然,这套系统需要连接互联网和一些运维知识去部署。
如果你用的服务器是集群/有资源管理工具:问问管理员!
- 如果你们的服务器是由很多 GPU 组成的阵列(比如学校或实验室的大型集群),那很可能它们是通过 Slurm、PBS 等资源分配管理工具来统一调度任务的。这种情况下,你直接用
squeue
(Slurm) 或其他对应命令,就能清晰地查看目前所有提交的任务情况,包括占用了多少 CPU、GPU、内存。【作者建议💡】 我的建议是,直接去问管理这台共享服务器的负责人或团队成员,他们有没有推荐的、已经安装好的资源检查工具或管理命令。这是最直接、最准确,也最省事的方法!因为不同服务器可能安装的工具不一样,系统自带的检查工具也可能不同。【终极忠告】千!万!不!要!直!接!Kill!别人的进程!
再强调一遍,这是程序员共享服务器的“黄金法则”:
- 绝不能直接 Kill: 别人的模型可能跑了几天几夜,一 Kill 就前功尽弃了。这不仅是不礼貌,更是可能引发矛盾的“雷区”。我会想kill你的正确姿势:
- 先用上面学到的命令,先看清楚情况。如果确实需要资源,并且对方占用时间过长或资源浪费,请礼貌地联系使用者协商,问问他大概什么时候能结束。如果联系不上,或者情况特别紧急,再考虑联系服务器管理员,让他们来处理。
一点额外的小建议
除了这些命令行工具,如果你用的是带图形界面的服务器(比如通过 Xterminal 连接),通常也会有一些可视化的 CPU/GPU 状态监控工具,操作起来更直观,也可以去探索一下。
最后,我想说句心里话:强烈建议所有从事编程的朋友,尤其是搞 AI 的,一定要学好 Linux! 服务器环境、各种工具、日常操作,都离不开 Linux。学好它,很多服务器上的疑难杂症都能迎刃而解,你的编程之路会顺畅很多,少踩很多坑!