云上弹性 HPC:AWS ParallelCluster 与按需集群实战

把 HPC 搬上云,弹性是最大红利也是最大复杂度。本文系统讲解云上 HPC 架构:AWS ParallelCluster 集群编排、弹性伸缩与 Spot 实例、EBS 与 FSx for Lustre 存储、EFA/RDXMA 高性能网络、作业调度与成本优化,以及「突发负载上云、稳态负载本地」的混合策略与迁移决策。

引言

超算中心容量有限、排队漫长;云的弹性让 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:弹性与按需

本地超算的痛点 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
容量固定弹性
网络原生 IBEFA(接近)
存储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]] — 高性能计算专题

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「hpc」更多文章

  1. ARM 超算与专用加速器:A64FX 与 NVIDIA Grace
  2. HPC 与 AI 融合:超算跑大模型训练
  3. 绿色 HPC:能耗优化与功率封顶实战