说实话,集群这东西,没搭过的人觉得是玄学,搭过的人知道全是坑。我第一次给课题组搭高性能计算集群时,整整折腾了一周,从硬件上架、交换机配置到Slurm跑通第一个MPI作业,过程比预想曲折太多。后来陆续给不同团队部署过几套,有科研计算、有AI训练、也有大数据混部的,才慢慢形成一套比较稳的打法。这篇东西,就把我这些年做高性能计算集群部署的实际经验重新整理一遍,从架构设计、硬件选型、软件栈选择,到Slurm调度器、共享存储、MPI并行、GPU资源管理,再到常见的坑和排查方法,一次讲清楚。不管你是在实验室搭一套十台以内的小集群,还是给公司规划几十节点的大规模环境,这篇文章都能给你一个能直接照着做的参考。
在动手之前,我得先把话说清楚:高性能计算集群不等于“一台好电脑插很多卡”,它是一套完整的软硬件协同体系。CPU、内存、GPU、高速网络、共享存储、调度器、用户环境、监控运维,任何一个环节拉胯,最终都会变成“集群跑起来很慢”“作业互相干扰”“节点无缘无故DRAIN”这类玄学问题。所以这篇文章不会只教你敲命令,我会把每个关键选择的为什么也讲明白,这样你后面遇到问题才知道从哪里入手排查。
1. 部署前的架构设计:先想清楚再动手
1.1 集群到底解决什么问题
很多团队刚开始接触集群,认知是“单机跑不动,买几台机器拼起来就是集群”。这话对了一半。高性能计算集群的核心价值有三个:一是聚合算力,把多个节点的CPU、GPU、内存汇聚成一个逻辑资源池;二是提高并发,让多个用户、多个任务同时提交,通过调度器统一排队执行;三是提供可扩展性,算力不够了加节点就行,不需要重写应用。
但你得先搞清楚自己跑的是什么负载。负载类型直接决定集群架构:如果是分子动力学、CFD、有限元这类传统科学计算,瓶颈通常在CPU核数、内存带宽和高速网络互联;如果是深度学习训练,核心是GPU算力、显存容量以及GPU间通信带宽(NVLink、InfiniBand);如果是大数据处理(Spark、Flink、Doris这类),瓶颈往往在存储IO和数据吞吐,调度方式也未必是Slurm,更可能是Yarn或K8s。
我见过最典型的失败案例是:有人看别人搭了Slurm集群跟风搭了一套,结果团队主要跑的是Spark,作业调度在Slurm里绕了一圈又映射到Yarn,调度逻辑重复,资源利用率反而低。所以第一步一定是列清楚你的工作负载清单:主流应用有哪些、单任务需要多少核多少内存、是否用GPU、任务时长是分钟级还是天级、有多少并发用户。这决定了后面所有选型。
1.2 硬件选型与预算分配
集群硬件规划有一个原则:角色分离。小型集群可以一台节点身兼数职,但节点规模超过几十台甚至上百台后,管理节点、登录节点、存储节点和计算节点必须分开。
标准角色分配大概是这样:
- 管理节点:跑调度器控制进程、认证服务、作业记账数据库,不需要很高计算性能,但内存和磁盘要可靠,建议双盘RAID1。
- 登录节点:用户在这里编辑代码、提交作业、做编译,交互IO比较重,CPU频率要高,内存充足,但不要在上面跑计算任务。
- 计算节点:集群主力,按需配置CPU、内存、GPU,不装多余软件,保持环境干净。
- 存储节点:负责共享家目录、应用软件和数据集,对IO和网络要求最高,建议配SSD缓存或直接上并行文件系统。
预算分配上,我自己的经验比例是:计算硬件(CPU/GPU/内存)大概占50%到60%,网络占15%到20%,存储占20%到25%,剩下的给管理、登录、机架电源和布线。很多人喜欢把钱全砸在GPU上,网络和存储随便买,结果多机训练时通信瓶颈严重,数据读取卡到爆,GPU利用率上不去,典型的省小钱花大钱。
举个我实际规划的节点示例,中等规模深度学习+仿真混合集群:
| 节点角色 | 数量 | 配置要点 | 网络 |
|---|---|---|---|
| 登录/管理 | 2 | 32核心64线程,256GB内存,双480GB SSD | 管理网10GbE |
| CPU计算 | 8 | AMD EPYC 7763(64核),512GB内存 | 计算网100GbE RoCE |
| GPU计算 | 6 | 4 x A100 80GB,128核心,1TB内存 | 计算网100GbE RoCE,NVLink |
| 存储 | 2 | 64GB内存,双口RDMA网卡,ZFS阵列 | 计算网100GbE |
这个规模不算小,但思路是通用的:计算网和存储网独立,避免IO流量挤占MPI通信。如果你预算有限,至少也要做到管理/登录网和计算网分离,哪怕是两台交换机分开两个VLAN也好。
1.3 软件栈选型:调度器怎么挑
调度器是整个集群的中枢,它的作用就是“排队叫号”:接收用户的作业,按策略分配资源,监督作业运行状态。传统HPC领域主流的开源调度器是Slurm,其次是PBS系(OpenPBS/Torque)、LSF商业版也常见。大数据生态则普遍用Yarn和K8s。
我个人的建议是:传统科学计算、MPI并行任务、GPU训练任务,首选Slurm。原因有三个:
一是Slurm的作业模型和HPC应用天然匹配,支持MPI启动器(srun/mpirun)深度集成,支持GPU资源管理(Gres),支持分区、QOS、抢占和回填调度,非常灵活。
二是社区活跃,几乎所有超算中心都用Slurm,网上排查案例多,踩坑容易找到答案。
三是配置复杂度可控,配好slurm.conf之后,日常运维命令就那么几条,不像K8s那样有大量控制器、CRD、网络插件需要维护。
但如果你主要是跑微服务、网页推理接口、大数据任务,那K8s可能更合适。注意,不要一上来就想把Slurm和K8s融合,那是大厂超融合的玩法,中小团队硬上会把自己搞死。后面第6章我会单独讲大数据和AI推理场景怎么和HPC集群共存。
另外,容器技术现在绕不开:HPC环境建议用Singularity/Apptainer,而不是Docker。因为Docker daemon有root权限,且用户态文件映射和MPI通信容易出权限问题;Singularity则是用户态容器,天然适合共享集群,配合Slurm用起来很顺。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础环境搭建:把地基打牢
2.1 节点规划和系统安装
文件动手之前,先把节点命名、IP地址、用户账户想好。我习惯用短主机名加编号:mng01、login01、cpu01、gpu01、stor01。IP按角色分段:管理网段192.168.10.0/24,计算网段192.168.20.0/24,存储网段192.168.30.0/24。物理上让管理网和计算网走不同物理交换机或不同VLAN,后面跑MPI时你会发现这是救命的设计。
我的规划表示例:
| 节点名 | 角色 | 管理IP | 计算IP | 存储IP |
|---|---|---|---|---|
| mng01 | 管理 | 192.168.10.11 | 192.168.20.11 | 192.168.30.11 |
| login01 | 登录 | 192.168.10.12 | 192.168.20.12 | 192.168.30.12 |
| cpu01 | 计算 | 192.168.10.21 | 192.168.20.21 | 192.168.30.21 |
| gpu01 | 计算 | 192.168.10.31 | 192.168.20.31 | 192.168.30.31 |
| stor01 | 存储 | 192.168.10.41 | 192.168.20.41 | 192.168.30.41 |
系统选择上,RHEL系(Rocky Linux 9、AlmaLinux 9)和Ubuntu Server 22.04 LTS都可以。传统HPC用得更多的是RHEL系,因为硬件厂商和MPI库对RHEL的适配最好,nvidia-driver、Infiniband驱动基本一键装好。这里多说一句,CentOS 7虽然很多人还在用,但真的不建议新集群再用它了,仓库源和依赖工具链越来越难适配新硬件,我踩过很大的坑。
系统装好后第一件事是确保所有节点能免密SSH互连。在管理节点上生成密钥,复制到所有节点:
bash复制ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa
for node in mng01 login01 cpu01 gpu0
