实战:在 openEuler 上搭建高性能计算(HPC)集群——从部署到调优【华为根技术】
实战:在 openEuler 上搭建高性能计算(HPC)集群——从部署到调优
今天咱把“高性能计算(HPC)”和“openEuler”这两件事凑到一起:既讲工程实操,也掺点运维技巧和我这些年踩过的坑。目标很简单——让你能在 openEuler 上把计算节点、消息通信、中间件和调度器按套路装好,并且跑得稳、跑得快。
为什么选 openEuler 做 HPC?先说硬核事实
openEuler 现在的发行仓里已经包含常见的 HPC 关键组件,比如 OpenMPI 和 SLURM(也有相应的 RPM 包),这意味着你可以直接用系统包管理器安装并进入集群化部署,而不必每次从源码折腾。
我的意思是:有官方/社区打包的 OpenMPI、SLURM,意味着升级、依赖和安全补丁更容易管理——这对生产环境非常重要。
HPC 硬件栈要点(别省这几样)
在 HPC 场景里,网络和存储是瓶颈的常客。若要做跨节点大规模 MPI 计算,建议使用支持 RDMA 的互连(InfiniBand 或 RoCE),并在节点上部署 OFED 驱动(例如厂商打包的 MLNX_OFED),以获得低延迟高带宽的通信能力。openEuler 内核和社区也在跟进 RDMA/verbs 的支持(注意驱动与内核版本匹配)。
此外,竞品经验告诉我:如果你做 I/O 密集型任务,最好提前规划并行文件系统(如 Lustre/GPFS)或高速 NVMe 池;做计算密集型任务,CPU、内存通道、NUMA 拆分要看清楚再买。
部署思路(高层):节点角色划分与软件栈
典型 HPC 集群包括:
- 管理/登录节点(用户交互、编译、提交作业)
- 控制/调度节点(运行 SLURM controller、数据库)
- 计算节点(运行 MPI 进程)
- 存储节点(并行文件系统或 NFS)
软件栈推荐:openEuler 系统包(OpenMPI、SLURM、rdma-core/OFED),再加上 perf、hwloc、numactl 等工具用于定位与调优。openEuler 的仓库里就已经有 SLURM、PCP 相关 PMDA 包,便于监控集成。
快速落地:从 0 到 1 的命令和示例(可直接拿去跑)
- 在所有节点准备基础包(示例以 root/yum 为例):
# 配置 repo / 导入 GPG 密钥(略)
yum update -y
yum install -y openmpi openmpi-devel slurm slurm-slurmd rdma-core numactl hwloc perf
- 用 Ansible 批量安装(示例片段):
- hosts: hpc_nodes
become: yes
tasks:
- name: install hpc packages
yum:
name:
- openmpi
- openmpi-devel
- slurm
- slurm-slurmd
- rdma-core
- numactl
state: present
- 简易
slurm.conf
(控制节点):
ClusterName=oe_hpc
ControlMachine=slurmctl
AuthType=auth/munge
SchedType=sched/backfill
NodeName=compute[01-08] CPUs=64 RealMemory=262144 State=UNKNOWN
PartitionName=compute Nodes=compute[01-08] Default=YES MaxTime=INFINITE State=UP
- OpenMPI 小技巧(编译/运行):
# 如果你需要源码编译 OpenMPI,记得启用 ibverbs 和 rdmacm
./configure --prefix=/usr/local/openmpi --with-verbs --with-rdmacm
make -j && make install
# 运行 MPI 程序时指定绑定和映射,减少跨 NUMA 访问
mpirun --map-by ppr:4:socket --bind-to core -np 32 ./a.out
调优清单(实战心得)
下面是我用过就有效的调优项,按优先级给你:
- CPU & NUMA 亲和:用
numactl --cpunodebind
或mpirun --bind-to core
固定进程到 NUMA 域,减少远端内存访问。 - HugePages:对 HPC 数值计算启用 hugepages 可减小 TLB miss,降低内存开销。示例:
sysctl -w vm.nr_hugepages=1024
。 - IRQ 与 cpusets:把网卡 IRQ 绑定到性能核心,或用
isolcpus
/nohz_full
在 boot 参数把部分核隔离给计算任务。 - 内核网络参数:对于 RDMA/大消息,可调
net.core.rmem_max/wmem_max
、net.ipv4.tcp_rmem
等(但 RDMA 多走 verbs,主要由 OFED 调优工具调整)。 - 关掉不必要服务:NTP、auditd、包管理器自动更新等在计算节点上建议最小化。
- 监控与回溯工具:perf、sar、pcp(openEuler 仓库有 pmda 包可集成 SLURM 监控)帮助你定位瓶颈。
常见坑与我自己的感受
- 驱动与内核不匹配:很多人直接把厂商 OFED 装上去,结果内核版本不同导致 RDMA 不可用。上生产前先在测试服跑通。
- 把“编译优化”当万能钥匙:高优化编译能提速,但如果内存访问模式不对、网络延迟大,编译优化提升很有限。
- 忽视调度策略:SLURM 的资源描述(GRES、cpus/threads)配置不好,会造成“某些节点被饿死”的现象。
小结:工程比概念重要,但别放弃研究
把 HPC 部署做好,是一件需要软硬件同时发力的工程活:openEuler 现在已经把核心组件(OpenMPI、SLURM、监控 PMDA 等)纳入仓库,能让部署更顺滑;同时 RDMA/InfiniBand 的支持对于大规模 MPI 性能影响巨大,务必重视驱动与内核配套。
- 点赞
- 收藏
- 关注作者
评论(0)