Motivation
之前从来没有用过集群,跑代码都是用单独的服务器,第一次上手组里的集群懵逼了一天。中文的博客大部分都写的很一般,有些我想知道的问题也找不到答案。所以就想着,自己一遍学习一边记录一下,做成一个入门的介绍,方便自己和其他新入门的朋友查看。
查看节点状态
sinfo
- 输出参数的含义
参考博客:PARRITION:节点所在分区 AVAIL:分区状态,up 标识可用,down 标识不可用 TIMELIMIT:程序运行最大时长,infinite 表示不限制,如果限制格式为 days-houres:minutes:seconds NODES:节点数 NODELIST:节点名列表 STATE:节点状态,可能的状态包括: allocated、alloc :已分配 completing、comp:完成中 down:宕机 drained、drain:已失去活力 fail:失效 idle:空闲 mixed:混合,节点在运行作业,但有些空闲 CPU 核,可接受新作业 reserved、resv:资源预留 unknown、unk:未知原因 如果状态带有后缀 *,表示节点没有响应
https://blog.csdn.net/u010797364/article/details/120724996?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-2-120724996.pc_agg_new_rank&utm_term=slurm+查看节点状态&spm=1000.2123.3001.4430
节点信息查看
scontrol show node
如何查看节点上GPU的型号等详细信息?
这里是我一开始懵逼的地方。如果是服务器其实可以直接nvidia-smi查看服务器的GPU配置。但是对于集群来说,个人的理解是,一开始登陆是在登陆节点上的,这个节点上你没有GPU,所以无法查看到GPU的信息。因此需要通过交互模式,进入一个有GPU的节点,获取到计算资源之后才可以查看。
srun --pty --gres=gpu:1 bash
进入交互模式- nvidia-smi
说明:
3. --pty进入交互任务(个人理解相当于把节点当成普通的服务器来用了)https://kb.iu.edu/d/awrz
4. bash表示的是run bash(个人理解相当于导入环境变量吧。。)
访问指定的partition
srun --pty -p gpu -N1 --gres=gpu:4 bash
-N表示任务的个数
运行过程中,节点被占用看不了显卡信息怎么办?
可以在训练的时候,加入这条语句,中间就可以打印某一时刻的显存占用了。
import os
os.system("nvidia-smi")
CPU信息查看
cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
cpu的个数cat /proc/cpuinfo | grep "cpu cores" | uniq
查看cpu的核心数top
查看cpu占用率
作业脚本
- squeeze 查看当前所有作业
- scancel 根据给定的标号取消作业
- sbatch xxx.slurm 运行脚本
- watch -n 1 nvidia-smi 每一秒钟显示显卡状态
比较不错的博客
- https://blog.csdn.net/wudibaba21/article/details/107757770?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2aggregatepagefirst_rank_ecpm_v1~rank_v31_ecpm-5-107757770.pc_agg_new_rank&utm_term=srun+集群&spm=1000.2123.3001.4430
- https://blog.csdn.net/qq_40806289/article/details/103581181?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2aggregatepagefirst_rank_ecpm_v1~rank_v31_ecpm-6-103581181.pc_agg_new_rank&utm_term=srun+集群&spm=1000.2123.3001.4430