引言
超算中心容量有限、排队漫长;云的弹性让 HPC 用户按需秒级拿到几千核、算完即走。但「云上跑 HPC」不是简单地把 Slurm 装进虚拟机——需要解决**动态伸缩、网络低延迟(EFA/RDMA)、共享存储(FSx for Lustre)、成本控制(Spot)**四大问题。AWS ParallelCluster 把这些打包成「声明式集群」。
本文按「架构 → 网络 → 存储 → 调度 → 成本 → 混合策略」讲解云上弹性 HPC:ParallelCluster 的组件与生命周期、EFA 高性能网络、FSx for Lustre 存储、Slurm 集成与弹性伸缩、Spot 实例成本优化、Cloud HPC 的架构取舍,以及本地与云混合的落地路径。
前置:/hpc-slurm-scheduling/(Slurm 调度)、/hpc-cluster-admin/(集群运维)、/hpc-infini-band/(高性能网络)、/hpc-lustre-filesystem/(Lustre 文件系统)。
目录
- 1. 为什么云上 HPC:弹性与按需
- 2. AWS ParallelCluster:集群即代码
- 3. 高性能网络:EFA 与 RDMA
- 4. 存储:FSx for Lustre 与 EBS
- 5. 作业调度与弹性伸缩
- 6. Spot 实例与成本优化
- 7. 云上 HPC 的架构取舍
- 8. 混合策略:本地与云突发
- 9. 上云迁移的检查清单
- 10. 速查表与一句话记忆
- 延伸阅读
1. 为什么云上 HPC:弹性与按需
本地超算的痛点 vs 云的解法:
本地:容量固定 → 排队、闲置共存
云:弹性伸缩 → 突发拉满、空闲归零
云上 HPC 的价值:
□ 秒级获取数千核(不用等采购/排队)
□ 算完即释放(按秒计费)
□ 按需选择实例类型(CPU/GPU/内存型)
□ 全球多区域、与云生态集成
□ 故障冗余(多可用区)
代价:
□ 网络:跨节点 MPI 需 EFA/RDMA 才接近本地
□ 存储:共享文件系统需托管(FSx)
□ 调度:弹性集群的状态管理复杂
□ 成本:失控会「算到账单爆表」
认知:云的弹性是「按需取用 + 算完即走」——价值大,但要靠网络(EFA)、存储(FSx)、调度、成本四件套把「裸虚拟机」变成「真 HPC」。
2. AWS ParallelCluster:集群即代码
AWS ParallelCluster 用一份 YAML 定义整个 HPC 集群,自动创建头节点 + 计算节点 + 调度器。
# config.yaml
Region: us-east-1
Image:
Os: alinux2
HeadNode:
InstanceType: c5.xlarge
Networking:
SubnetId: subnet-xxxx
ElasticIp: true
Scheduling:
Scheduler: slurm
SlurmQueues:
- Name: compute
ComputeResources:
- Name: c5
InstanceType: c5n.18xlarge
MinCount: 0
MaxCount: 8 # 弹性上限
Efa:
Enabled: true # 启用 EFA
- Name: gpu
InstanceType: p4d.24xlarge
MaxCount: 4
Efa:
Enabled: true
核心概念:
□ HeadNode:头节点(调度器 + 共享目录)
□ SlurmQueues:计算队列(实例组)
□ ComputeResources:实例类型 + 弹性范围
□ Efa:高性能网络开关
□ 生命周期:create-cluster / update-cluster / delete-cluster
常用命令:
pcluster create-cluster -n my-hpc -c config.yaml # 建集群
pcluster ssh -n my-hpc # 登录头节点
pcluster delete-cluster -n my-hpc # 销毁
记忆:ParallelCluster = 「YAML 定义集群」——头节点 + 队列 + 实例组 + EFA,一条命令建/销毁,弹性范围写在 MaxCount 里。
3. 高性能网络:EFA 与 RDMA
MPI 跨节点性能是云 HPC 的生死线。云上默认网络(VPC/普通 ENI)延迟高、带宽受限。
EFA(Elastic Fabric Adapter):AWS 的 HPC 网络接口,直通底层 InfiniBand 结构:
□ EFA 实例间通信不走 TCP/内核协议栈
□ 提供 RDMA(OS 旁路、内核旁路)
□ 支持 MPI(Intel MPI / MPICH)与 NCCL
□ 延迟接近本地 InfiniBand
要点:
□ 仅特定实例族支持 EFA(c5n、p4d、hpc7g 等)
□ 需启用 Efa: Enabled 且用支持的 AMI
□ 大 MPI 作业必须 EFA 才能扩展
□ 扩展性:EFA 跨可用区不支持(要同区)
# 节点上检查 EFA 是否就绪
efa-check # 安装的验证脚本
ibstat | head # 显示 HCA(若可用)
记忆:云上 MPI = EFA——「不装 EFA,几千核 MPI 就是笑话」;EFA 提供 RDMA 直通,是大规模云 HPC 的前提。
4. 存储:FSx for Lustre 与 EBS
云上共享存储的两种路径:
| 存储 | 特点 | 适用 |
|---|---|---|
| EBS | 块存储、单实例挂载 | 头节点/单机数据 |
| EFS/NFS | 共享 POSIX、性能一般 | 小规模共享 |
| FSx for Lustre | 托管 Lustre、高带宽 | 大规模 HPC 共享存储 |
| S3 | 对象存储、便宜 | 输入/输出/归档 |
FSx for Lustre:AWS 托管的 Lustre 并行文件系统:
□ 兼容 Lustre 语义(fopen/mkdir 正常应用不用改)
□ 高带宽:百 GB/s 级聚合吞吐
□ 与 S3 集成:S3 数据「按需挂载」进 Lustre(Lazy Load)
□ 按需创建/销毁,弹性容量
# 挂载 FSx(计算节点)
sudo mount -t lustre -o flock <fsx_dns>:<mount> /fsx
数据流模式:
S3(原始数据)→ FSx for Lustre(计算读写)→ S3(结果归档)
└─ S3 Lazy Load:文件按需拉取,避免全量拷贝
记忆:云上 HPC 存储 = FSx for Lustre(算得快)+ S3(存得久)——数据从 S3 懒加载进 Lustre,算完写回 S3。
5. 作业调度与弹性伸缩
云上 Slurm 的弹性:作业排队时自动加实例、算完自动减。
用户 sbatch 作业 → 调度器检测资源不足
→ 触发集群扩容(新增计算节点)
→ 节点就绪 → 作业运行 → 空闲节点回收
ParallelCluster 的弹性机制:
□ MinCount=0:无作业时不启动实例(省成本)
□ MaxCount=上限:作业突发自动扩容
□ 节点生命周期:Slurm 管理 + 云自动伸缩
□ 空闲超时回收:Slurm 配置的节点回收策略
调度配置要点:
# Slurm 队列上设置伸缩(ParallelCluster 管理)
# 关键参数
MinCount / MaxCount # 弹性范围
MaxStaticComputeNodes # 常驻节点(延迟敏感作业)
SlurmDns # 节点动态 DNS
落地:弹性 HPC = 「作业驱动伸缩」——MinCount 控下限、MaxCount 控上限,无作业不开机、有作业秒扩容,空闲自动回收。
6. Spot 实例与成本优化
Spot 实例:以大幅折扣(通常 60–90%)获取闲置算力,可被中断回收。
HPC 与 Spot 的适配度:
□ 可容错作业(可断点续跑/检查点)→ 适合 Spot(便宜)
□ 关键长跑作业 → 按需实例(稳)
□ 混合:Spot 为主 + 按需兜底
成本优化手段:
□ Spot 池:多个可用区/实例族分散 Spot 风险
□ 检查点 + 重启:被中断后从检查点继续
□ 弹性作业规模:Spot 充足时跑大、不足时跑小
□ 生命周期策略:算完即删集群
# ParallelCluster 队列支持 Spot 配置
ComputeResources:
- Name: spot
InstanceType: c5n.18xlarge
SpotPrice: 80% # 或用 CapacityType: SPOT
成本治理:
□ 预算告警:AWS Budgets 设上限
□ 实例时长监控:空闲节点回收
□ 按队列拆分成本标签
□ 存储成本:S3 归档 + FSx 按需
心法:Spot = 「用中断风险换 80% 折扣」——配合检查点与弹性规模,是云 HPC 成本优化的大杀器。
7. 云上 HPC 的架构取舍
云 vs 本地的全面对比:
| 维度 | 本地超算 | 云上 HPC |
|---|---|---|
| 容量 | 固定 | 弹性 |
| 网络 | 原生 IB | EFA(接近) |
| 存储 | Lustre/自有 | FSx 托管 |
| 采购周期 | 月/年 | 秒 |
| 成本 | 沉没成本 | 按量 |
| 运维 | 自管 | 托管+自管 |
| 合规 | 完全掌控 | 云信任边界 |
适合云上的负载:
□ 突发/弹性需求(峰值算完即走)
□ 项目制工作(短期集群)
□ 需要最新 GPU/实例
□ 与云生态集成(S3/ML/监控)
适合本地的负载:
□ 恒定满载的稳态算力
□ 严格合规/数据本地化
□ 超大规律性长跑
□ 极低延迟专用硬件(如专用 HPC 网络)
决策:弹性负载上云、稳态负载本地、峰值溢出到云——云不是替代超算,是「按需取用的算力补充」。
8. 混合策略:本地与云突发
混合云 HPC(Burst):本地超算跑稳态,排队/突发时「溢到云」:
本地 Slurm ──作业队列溢出──▶ 云上 ParallelCluster(临时扩)
└─ 统一调度视图(hybrid 调度器)或独立队列
混合的关键工程点:
□ 调度统一:同一份作业脚本两端跑(需相同的软件栈)
□ 数据同步:本地 ↔ S3/FSx 同步(数据分层)
□ 网络互通:VPN/Direct Connect 连本地与云
□ 软件栈一致:容器(Singularity)保证可移植
混合的典型流程:
1. 本地队列排队超时 → 作业转发到云
2. 数据(输入/代码)同步到 S3/FSx
3. 云上临时集群跑作业
4. 结果回传本地 → 释放云集群
记忆:混合 HPC = 「稳态本地 + 峰值云突发」——软件栈用容器统一、数据走 S3/FSx、调度统一视图,本地和云各司其职。
9. 上云迁移的检查清单
迁 HPC 到云前逐项确认:
□ 网络:MPI 规模需要 EFA?验证延迟/带宽(HPL/OSU bench)
□ 存储:应用是否依赖 Lustre 语义?FSx 兼容?
□ 软件栈:编译好的 MPI/库能否在云 AMI 复现?(容器优先)
□ 许可:第三方软件许可是否支持云?
□ 数据:存量数据上传成本(S3 Transfer/雪球)
□ 调度:Slurm 作业脚本迁移(路径/模块)
□ 安全:IAM、VPC、加密
□ 成本:预算模型(突发算力成本估算)
迁移验证基准:
# 上云后先跑基准对比
mpirun -np 8 ./osu_latency # 延迟
mpirun -np 8 ./osu_bw # 带宽
# 应用级:跑典型作业对比本地时间/成本
心法:迁移不是「搬虚拟机」,是「验证网络、存储、软件、许可、成本五件事」——先小作业验证,再放量。
10. 速查表与一句话记忆
| 需求 | 手段 |
|---|---|
| 集群编排 | AWS ParallelCluster(YAML) |
| 低延迟网络 | EFA(RDMA 直通) |
| 共享存储 | FSx for Lustre |
| 对象存储 | S3(懒加载/归档) |
| 弹性范围 | MinCount / MaxCount |
| 成本优化 | Spot + 检查点 + 弹性规模 |
| 混合云 | 本地稳态 + 云突发 |
| 数据同步 | S3 / Direct Connect |
| 软件可移植 | 容器(Singularity) |
| 迁移验证 | OSU bench + 应用基准 |
一句话记忆:云上弹性 HPC = ParallelCluster 定义集群 + EFA 保 MPI 性能 + FSx for Lustre 共享存储 + Min/Max 弹性伸缩 + Spot 降成本——弹性负载上云、稳态负载本地,迁移先验网络存储软件许可成本五件事。
延伸阅读
- /hpc-slurm-scheduling/ — Slurm 调度与队列
- /hpc-infini-band/ — EFA 背后的 RDMA 原理
- /hpc-lustre-filesystem/ — Lustre 与 FSx 的语义
- /hpc-cluster-admin/ — 集群运维与监控
- /hpc-fault-tolerance/ — 检查点与 Spot 中断
- [[hpc]] — 高性能计算专题
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。