云原生HPC技术架构文档:面向CAD/CAE/EDA应用
云原生高性能计算(HPC)技术架构文档:面向CAD/CAE/EDA应用
摘要
将以计算机辅助设计(CAD)、计算机辅助工程(CAE)、电子设计自动化(EDA)为代表的传统高性能计算(HPC)工作负载迁移上云,是企业实现资源弹性、加速研发周期、优化成本的关键举措。云环境提供了前所未有的计算、存储和网络资源灵活性,但也带来了新的技术挑战。
我曾经在阿里云工作期间,我帮助芯片设计企业完成了EDA上云的技术选型和验证,并且也根据EDA上云的需求编写了技术最佳实践:EDA上云技术最佳实践;在目前公司工作期间的核心任务之一也是基于云原生K8S平台研发企业内部的AI机器学习平台,总之,无论是HPC上云,还是AI上云,我们的目的都是一致的,把复杂交给平台,把简单交给用户(算法/仿真工程师)。
本文档旨在系统性地阐述HPC上云所需关注的核心技术点,深入探讨高性能存储、基于Kubernetes的工作负载编排、用于自动化复杂仿真流程的Operator模式,以及作业调度器的选型对比,为企业构建高效、稳定、经济的云原生HPC平台提供专业指引。
1. 云上HPC的核心技术支柱
一个成功的云上HPC平台,主要建立在以下四大技术支柱之上:
- 高性能计算实例(Compute Infrastructure): 选择最适合计算工作负载的虚拟机(VM)或裸金属实例(CPU/GPU/FPGA)。
- 高性能存储(High-Performance Storage): 构建存储解决方案以管理海量数据的高速I/O和共享,这通常是主要瓶颈。
- 高性能网络(High-Performance Networking): 保证计算节点间低延迟、高带宽的通信,这对紧耦合的多节点仿真(例如使用MPI)至关重要。
- 工作负载与作业调度(Workload & Job Scheduling): 实现一个智能系统来高效地管理、调度和编排计算作业,最大化资源利用率并确保公平性。
2. 深度解析:高性能存储
存储是HPC的生命线,尤其对于I/O密集型的CAD/CAE/EDA应用。云存储架构的选择直接影响性能、成本和工作流效率。
2.1. 存储类型与应用场景
多层存储方法是业界最佳实践。
存储层级 | 技术/云产品示例 | 核心优势 | 主要应用场景 |
---|---|---|---|
热数据层 (Scratch) | 并行文件系统 (Lustre, GPFS) | 极高的聚合带宽和IOPS,支持并行I/O。 | 核心计算区: 作为求解器在仿真过程中读写数百万个中间文件的临时高速工作空间。 |
温数据层 (Work) | 网络文件系统 (NFS) | POSIX兼容,配置简单,数据共享方便。 | 通用目的: 用户主目录、软件安装路径以及中小型数据集的共享。 |
冷数据层 (Archive) | 对象存储 (Amazon S3, Azure Blob) | 近乎无限的容量,极高的数据持久性,成本最低。 | 长期归档: 存储原始输入数据和最终仿真结果。作为HPC平台的“数据湖”。 |
实例级存储 | 本地SSD/NVMe | 极致的低延迟和最高的单实例IOPS。 | 专用缓存: 用于延迟敏感应用或数据库的临时数据。 |
2.2. 实践考量与策略
- 分层存储策略: 这是成本优化的最关键概念。仅在活动计算期间使用昂贵的并行文件系统。数据默认应存放在对象存储中。
- 自动化数据生命周期管理: 实现跨层级的自动化数据迁移。
- 预热/数据入场(Staging-in): 作业开始前,自动将必要的输入数据从对象存储复制到并行文件系统。
- 归档/数据出场(Staging-out): 作业完成后,自动将结果从并行文件系统移回对象存储进行永久保留。
- 按需基础设施: 与计算集群一起动态地创建和销毁并行文件系统,以最大程度地降低成本。它应该只在作业期间存在。
3. 深度解析:使用Kubernetes进行工作负载编排
Kubernetes (K8s) 是云原生应用编排的事实标准。将其应用于HPC可以实现运维现代化,但这需要对K8s进行改造以适应批处理计算的独特需求。
3.1. Kubernetes在HPC中的作用
- 资源抽象: K8s将异构的计算资源(CPU、GPU)池化为统一的结构,将应用(打包为容器)与底层硬件解耦。
- 环境一致性: 容器保证了应用环境从工程师的笔记本电脑到生产集群的完全一致,消除了“在我机器上可以运行”的问题。
- 弹性与自动化: 水平Pod自动伸缩器(HPA)和集群自动伸缩器(Cluster Autoscaler)使平台能够根据需求自动伸缩应用Pod和底层计算节点,完美契合仿真工作负载的“突发”特性。
- 丰富的生态系统: K8s与监控(Prometheus)、日志(Fluentd)和安全领域的顶级工具无缝集成,构建了一个现代化的、可观测的HPC平台。
3.2. 挑战与适配
原生的K8s并非为HPC设计。主要挑战包括:
- 复杂的作业依赖: 原生的K8s
Job
对象缺乏对多步骤工作流(例如,前处理 -> 求解 -> 后处理)的支持。 - 成组调度(Gang Scheduling): HPC作业通常需要所有资源同时可用才能启动。默认的K8s调度器逐个分配Pod,可能导致死锁。
- 高性能网络: 支持MPI和RDMA需要专门的CNI插件(例如,Multus, Mellanox CNI)。
这些挑战可以通过专门的、HPC感知的调度器和强大的Operator模式来解决。
4. 核心实践:以Operator模式管理CAE/CAD工作负载
Operator模式是为HPC解锁真正云原生自动化的关键。它将运行CAE仿真的复杂领域知识编码为在K8s上运行的软件。
4.1. Operator技术原理
该模式结合了两个核心的K8s特性:
- 自定义资源定义 (Custom Resource Definition - CRD): CRD扩展了K8s API,允许我们创建新的、领域特定的资源类型。例如:对于我们的用例,我们可以定义一个名为
CaeJob
的资源。这个CaeJob
对象作为一个高级的“仿真请求表单”,抽象了所有底层复杂性。 - 自定义控制器 (Custom Controller): 控制器是一个持续运行的进程,它“监视”
CaeJob
对象。当一个CaeJob
被创建时,控制器会执行一个调和循环(Reconciliation Loop)——一系列自动化操作,使集群的实际状态与CaeJob
中定义的期望状态保持一致。
4.2. CaeJob
Operator工作流剖析
当用户提交一个CaeJob
时,Operator的控制器会自动执行整个仿真生命周期:
- 感知任务 (Observe): 控制器检测到新的
CaeJob
资源的创建。 - 数据准备 (Data Staging): 它在并行文件系统上动态地创建一个持久卷(PV),并启动一个临时Pod从对象存储下载和准备输入数据。
- 许可证获取 (License Acquisition): 它检查所需软件许可证的可用性。如果不可用,它会智能地等待和重试,而不会消耗昂贵的计算资源。
- 执行求解 (Execution): 它构建并向HPC感知的调度器(如Volcano)提交一个批处理作业,以确保成组调度。它将所有必要的配置(如许可证服务器信息和工作目录)注入到求解器Pod中。
- 实时监控 (Real-Time Monitoring): 它跟踪求解器的日志,解析关键指标(如迭代步数、收敛残差),并实时更新
CaeJob
对象的.status
字段。这为用户提供了通过kubectl
的即时反馈。 - 结果归档 (Data Archiving): 成功完成后,它启动另一个临时Pod将结果从临时文件系统上传回对象存储进行长期归档。
- 资源清理 (Cleanup): 它会一丝不苟地删除与作业相关的所有临时资源——求解器Pod、数据准备Pod,以及最关键的——昂贵的并行文件系统卷。这确保了“按使用付费”的模式。
4.3. 核心示范:一个CaeJob
CRD示例
通过Operator,用户体验得到了极大的简化。用户不再需要管理数十个K8s资源,只需提交一个单一、直观的YAML文件。
用户提交的YAML (my-fluent-job.yaml
):
apiVersion: hpc.example.com/v1alpha1
kind: CaeJob
metadata:
name: fluent-wing-simulation-d8f3
spec:
# 描述求解器应用
solver:
name: "AnsysFluent"
version: "2023R1"
# 描述输入数据来源
input:
source: "s3://my-cae-bucket/inputs/wing-model-v2.cas.gz"
# 描述计算资源需求
compute:
nodes: 10
coresPerNode: 32
memoryPerNode: "60Gi"
scheduler: "volcano" # 指定HPC调度器
# 描述许可证需求
licensing:
server: "license-server.internal:1055"
feature: "acfd_fluent"
# 描述结果归档位置
output:
destination: "s3://my-cae-bucket/results/wing-simulation-d8f3/"
这种声明式方法使工程师能够专注于他们的仿真,而Operator则在后台处理复杂、易错的IT自动化。
5. 深度解析:作业调度器选型
调度器是HPC平台的“大脑”。其选择在很大程度上取决于组织的技术成熟度、工作负载类型和战略目标。
5.1. 对比分析
调度器 | 类型 | 核心关注点 | 优势 | 劣势 | 最佳适用场景 |
---|---|---|---|---|---|
Slurm | 传统HPC | 通用批处理调度 | 成熟、稳定、功能丰富、社区庞大。学术界的事实标准。 | 与K8s集成复杂;非云原生。 | “平移上云” (Lift and Shift): 在云上复制现有的本地Slurm环境,对用户工作流的改动最小。 |
IBM LSF | 传统HPC | 商业级批处理调度 | 性能卓越,提供商业支持,在EDA行业有强大的集成。 | 许可证费用高昂,K8s集成复杂。 | “平移上云”(企业级): 尤其是在EDA领域,已深度投入LSF生态的组织。 |
Volcano | 云原生 | K8s的批处理系统 | K8s原生: 作为无缝的K8s扩展,提供关键的HPC功能(成组调度、作业队列、公平共享)。 | 生态系统相比传统调度器还较年轻。 | 云原生HPC: 直接在Kubernetes上为批处理工作负载(HPC/AI)构建一个现代化的、弹性的HPC平台。 |
Koordinator | 云原生 | 混合负载下的精细化调度 | 极致的资源效率: 通过安全地利用在线服务的闲置、超配资源来运行批处理作业,实现巨大的成本节约(基于QoS的资源回收)。 | 配置复杂性高;其核心优势在于混部,而不仅仅是HPC。 | 通过整合实现成本优化: 在同一集群上运行HPC作业和在线Web服务,以显著提高整体资源利用率并降低总拥有成本。 |
5.2. 决策框架
迁移路径:
- 对于平移上云,坚持使用部署在云VM上的
Slurm
或LSF
,以减少干扰。 - 对于云原生,在
Volcano
和Koordinator
之间选择。
- 对于平移上云,坚持使用部署在云VM上的
工作负载纯度:
- 如果集群专用于HPC/批处理工作负载,
Volcano
是最直接、最合适的解决方案。 - 如果集群将托管混合工作负载(例如,CAE仿真与Web应用并存),
Koordinator
是实现激进成本削减的战略选择。
- 如果集群专用于HPC/批处理工作负载,
战略目标:
- 目标:现代化HPC调度。 选择
Volcano
。 - 目标:降低所有IT业务的整体云开销。 选择
Koordinator
。
- 目标:现代化HPC调度。 选择
6. 结论与建议
在云中为CAD/CAE/EDA应用构建高性能计算平台,是一个从基础设施管理到服务自动化的战略旅程。
- 基础: 分层存储策略对于平衡性能和成本是不可或缺的。
- 方向: Kubernetes是必然的未来,为现代化平台提供了弹性和生态系统。
- 自动化: Operator模式是驯服复杂性的关键,将手动工作流转变为一个健壮、自动化且用户友好的服务。
- 智能: 调度器的选择定义了平台的能力。
- 为了无缝迁移,利用现有的
Slurm/LSF
专业知识。 - 为了一个专用的、现代化的HPC平台,基于
Volcano
构建。 - 为了在混合使用环境中实现极致效率,用
Koordinator
进行架构设计。
- 为了无缝迁移,利用现有的
通过深思熟虑地结合这些元素,组织可以创建一个强大的、按需的HPC环境,在加速创新的同时,保持对性能和成本的严格控制。