You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Slurm作业异常获取Ryzen CPU全部线程访问权限的问题排查请求

Slurm作业异常获取Ryzen CPU全部线程访问权限的问题排查请求

看起来你遇到了Slurm在Ryzen节点上任务CPU亲和性失控的问题——明明想让每个任务只绑定单个线程/核心,结果所有任务都能访问CPU的全部32个线程,而Xeon Phi节点却正常工作。我来帮你梳理几个关键排查方向和解决方案:

先明确你的环境与问题现象

你的硬件与Slurm配置核心信息:

  • Ryzen R9 5950x:16核/32线程,对应Slurm节点amd,归属fast分区
  • Xeon Phi 7120p:61核/244线程,对应节点mic0,归属compute分区
  • Slurm版本:21.08.8-2,CentOS7
  • 核心配置:TaskPlugin=task/affinity、SelectType=select/cons_res、SelectTypeParameters=CR_CPU_Memory

问题现象:

提交命令salloc -p fast -n 8 --threads-per-core=1 --mem=256mb后,用srun -l --cpu_bind=threads cat /proc/self/status | grep Cpus_allowed_list | sort -n查看,所有8个任务的Cpus_allowed_list都是0-31,即全部线程都能访问。

可能的问题点与解决方案

1. 先确认Slurm对Ryzen硬件的识别是否正确

Slurm的亲和性依赖对硬件拓扑的正确识别,先在amd节点上运行:

slurmd -C

查看输出的CPU拓扑信息,确认是否正确识别到1 socket, 16 cores, 2 threads per core(总32 threads)。如果识别错误(比如把线程当成核心),那亲和性肯定会出问题。

如果识别错误,可以尝试在slurm.conf中添加:

TopologyPlugin=topology/tree

强制Slurm正确解析CPU拓扑,修改后重启slurmctld和slurmd服务。

2. 调整TaskPlugin与亲和性约束配置

当前你的TaskPlugin=task/affinity,但缺少强制亲和性约束的参数。可以修改slurm.conf:

# 启用亲和性插件并强制调度器设置CPU绑定
TaskPlugin=task/affinity
TaskPluginParam=Sched
# 强制Slurm约束任务到分配的核心/线程
ConstrainCores=YES

修改后重启服务:

systemctl restart slurmctld
systemctl restart slurmd

3. 修改作业提交命令,明确CPU资源约束

你当前的提交命令没有明确指定--cpus-per-task,Slurm可能默认给每个任务分配全部CPU资源。试试用以下命令提交:

# 明确每个任务用1个CPU线程,绑定到单个线程
salloc -p fast -n 8 --cpus-per-task=1 --threads-per-core=1 --mem=256mb
# 或者直接用srun提交并绑定
srun -p fast -n 8 --cpus-per-task=1 --cpu_bind=thread cat /proc/self/status | grep Cpus_allowed_list | sort -n

这里的--cpus-per-task=1是关键,告诉Slurm每个任务只分配1个CPU单元(线程),再配合--cpu_bind=thread强制绑定到单个线程。

4. 启用Cgroup插件增强资源隔离

CentOS7上可以通过Cgroup来强化Slurm的资源约束,避免任务越权访问CPU。在slurm.conf中添加:

CgroupPlugin=cgroup/v1
CgroupMountpoint=/sys/fs/cgroup
CgroupAutomount=yes
CgroupReleaseAgentDir=/etc/slurm/cgroup
ConstrainCpu=yes

创建对应的目录并重启服务:

mkdir -p /etc/slurm/cgroup
systemctl restart slurmctld slurmd

Cgroup会通过内核级别的限制,确保任务只能访问分配的CPU资源。

5. 考虑Slurm版本兼容性问题

Slurm 21.08版本对AMD Zen3架构(5950x属于Zen3)的亲和性支持可能存在已知bug。如果以上配置都无效,可以尝试升级Slurm到更高版本(比如22.05或23.02),新版本通常会修复硬件兼容性问题。

总结排查顺序

建议按以下步骤逐步验证:

  • 用slurmd -C确认硬件拓扑识别正确
  • 调整TaskPlugin参数并启用ConstrainCores
  • 修改作业提交命令,明确--cpus-per-task=1和--cpu_bind
  • 启用Cgroup插件增强隔离
  • 必要时升级Slurm版本

备注:内容来源于stack exchange,提问作者Igor Popov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 09:07:42