LabHub
学习 学习路径 课程

HPC 与 Slurm

节点掉了之后要读的顺序

在 LabHub 中继续学习

一句话总结

Slurm障碍诊断**sinfo缩小范围slurmctld.log大部分都以阅读理由**结束。

概念图: sinfo缩小范围slurmctld.log大部分都以阅读理由 · 其原因字符串 · 不自动返回 · 设置与实际不符

为什么需要这个?

收到“工作无效”的报告后,有几个地方可以确认。工作是否在队列中等待,节点是否丢失,认证是否被破坏,设置是否错误。但是是有顺序的。

怎么行动

第1阶段——整体状态

sinfo
sinfo -R                        # DRAIN/DOWN 이유만
sinfo -N -l                     # 노드별 상세

sinfo -R这个特别有用。只显示缺失的节点和其原因字符串

节点状态的含义。

状态 意思
idle 正常,无工作
alloc/mix 全部/部分资源被分配
drain 管理员或系统删除。不自动返回
down 没有回复或注册失败
inval 设置与实际不符
fail/failg 报告硬件问题

第2阶段——阅读理由

scontrol show node gpu-node01 | grep -i reason
tail -100 /var/log/slurm/slurmctld.log
tail -100 /var/log/slurm/slurmd.log     # 해당 노드에서

日志中出现的代表性信息和原因。

消息 原因
Low socket*core*thread count CPUs插座×核心×线程不一致
Low RealMemory 设置的内存比节点的实际大
gres/gpu count reported lower than configured slurm.confgres.conf数量不一致
Munge decode failed: Expired credential 时钟不一致
Munge decode failed: Invalid credential 身高不一致
partition X has unknown node Y 未定义的节点被分区引用
Node unexpectedly rebooted 节点重新启动后注册

区分munge错误的两种类型很重要。Expired credential因为是钟表问题,所以看了NTP,Invalid credential因为是身高问题/etc/munge/munge.key进行比较。完全不同的应对。

3阶段——工作无法进行时

节点没问题,但如果工作只是等待的话squeue看REASON列。

REASON 对应
Resources 请求的资源还没有剩余。正常等待
Priority 优先级高的工作在前面
Dependency 等待先行工作
PartitionTimeLimit --time超过了该分区最大值
PartitionNodeLimit 请求节点数超过了分区限制
ReqNodeNotAvail 指定的节点不可使用
QOSMax... 受到QOS限制

**PartitionTimeLimit相同的东西永远等待。**即使产生资源,也绝对不会开始,所以用户必须修改请求后重新提交。

4阶段——恢复

如果解决了原因,则明确地恢复节点。

scontrol update NodeName=gpu-node01 State=RESUME
scontrol update NodeName=gpu-node[01-03] State=RESUME
scontrol reconfigure                     # 설정 변경 반영

如果修改了设置文件,请在部署到所有节点后scontrol reconfigure必须这样做。如果只有一个节点不同,那个节点就会再次掉落。

提前抓住节点丢失的情况

在贫民窟运营中耗费最多时间不是工作失败,而是节点安静地 是掉落。用户只觉得“变慢了”,原因是半个群集在玩 有。

错过的原因总是被记录下来。

sinfo -R --format="%50E %12U %19H %N"     # 사유, 지운 사람, 시각, 노드
scontrol show node <노드> | grep -E 'State|Reason|CfgTRES|AllocTRES'

节点是drain成为这个的常见原因三。

理由 实际原因
Low RealMemory 设置的内存值比实际大。内核会稍微占用一些空间。
gres/gpu count too low 一个GPU消失了(nvidia-smi确认为)
Kill task failed 工作流程没有结束,节点没有整理。

第一个特别经常出现。slurm.conf如果把物理内存值直接写在上面, 由于内核和预约区域,实际可用容量有点少,节点会立即掉线。slurmd -C 使用输出值,然后在那里再降低一点。

slurmd -C          # 이 노드가 보고하는 실제 값

更改设置后确认传播。slurm.conf所有的节点都必须相同, 变了之后scontrol reconfigure需要。只要有一个节点不同,那个节点就会 一直掉出来,症状看起来像是那个节点的问题。

**整理失败通常是因为进程没有结束。**如果epilog没有结束,节点就会 completing被困在里面。UnkillableStepTimeout超过的话节点就会变成drain。 如果经常这样,那么文件系统(特别是NFS)的队列中进程处于D状态, 要修的地方不是贫民窟,而是仓库。

**复活时删除理由。**只要恢复状态并留下理由,在下一次健康检查时 又掉下来了。

scontrol update NodeName=<노드> State=RESUME

在现场相遇的样子

**时钟问题会定期复发。**如果NTP死机或防火墙阻止123端口,几天内会逐渐失调,然后有一天munge开始拒绝。最好在群集监控中设置时钟同步状态。

DRAIN 不删除理由字符串而留下的习惯。scontrol update ... State=RESUME只要做,理由就会消失。为了调查记录,在某个地方留下理由后返回的队伍很多。

下次实习要做的事情

收到包含故障设置和日志的照片,分别确定四个原因,制作修改版,填写恢复程序,并提交RCA报告。