使用 Podman 大规模 HPC 容器

了解 Podman 如何被修改以大规模运行于高性能计算 (HPC) 中。
1 位读者喜欢这篇文章。
Computer laptop in space

Opensource.com

本文介绍了 NERSC 与 Red Hat 合作完成的最新工作,旨在修改 Podman(pod 管理器工具),使其能够大规模运行,这是高性能计算 (HPC) 的一项关键需求。Podman 是一款开源工具,用于在 Linux 系统上开发、管理和运行容器。有关这项工作的更多详细信息,请参阅我们将在 CANOPIE-HPC Supercomputing 2022 会议论文集中发表的论文。

在下面的演示视频中,我们演示了如何从 NERSC 注册中心将镜像拉取到 Perlmutter 上,使用 podman-hpc 生成镜像的压缩版本,并通过我们的 podman-exec 封装器大规模运行 EXAALT 基准测试(900 个节点,3600 个 GPU)。NERSC 的旗舰超级计算系统是 Perlmutter,目前在 Top 500 榜单中排名第 7。它有一个 GPU 分区,拥有超过 6000 个 NVIDIA A100 GPU,以及一个 CPU 分区,拥有超过 6000 个 AMD Milan CPU。本博客文章中描述的所有工作均在 Perlmutter 上完成。

NERSC,即国家能源研究科学计算中心,是美国能源部 (DOE) 的生产任务计算机构,为 DOE 科学办公室提供服务,该办公室资助广泛的基础和应用研究。在 2022 年上半年,超过 700 位独立用户使用了 Shifter,NERSC 当前的容器解决方案,并且用户对容器的总体兴趣正在增长。

尽管 NERSC 已经证明 Shifter 在大规模运行时具有接近裸机的性能,但一些缺点促使我们探索 Podman。主要因素是 Shifter 不提供任何构建实用程序。用户必须在自己的本地系统上构建容器,并通过注册中心将镜像发送到 NERSC。另一个障碍是 Shifter 通过将运行中的容器限制为启动它的用户的权限来提供安全性。最后,Shifter 主要是一种“内部”解决方案,因此用户必须学习一项新技术,而 NERSC 工作人员也增加了维护该软件的负担。

Podman 为所有这些主要痛点提供了解决方案。Podman 是一个符合 OCI 标准的框架,它遵循一套社区标准。对于使用过 Docker 等其他符合 OCI 标准的工具的用户来说,它会感到很熟悉。它还拥有庞大的用户和开发者社区,截至 2022 年 10 月,在 GitHub 上拥有超过 1.5 万颗星。吸引我们使用 Podman 的主要创新是无根容器。无根容器通过使用 subuid/subgid 映射来优雅地约束权限,使容器能够在用户命名空间中运行,但感觉上拥有完整的 root 权限。Podman 还提供容器构建功能,允许用户直接在 Perlmutter 登录节点上构建镜像,从而消除了其开发工作流程中的一个主要障碍。

[ 在 Enable Sysadmin 上查看最新的 Podman 文章。]

为了在 Perlmutter 上大规模启用 Podman 并获得接近原生性能的体验,我们需要解决站点集成、可扩展性和性能问题。此外,我们还开发了两个封装脚本来实现两种操作模式:Podman container-per-processpodman-exec。Podman container-per-process 模式描述了节点上运行许多进程(通常在 MPI 应用程序中),并且每个进程运行一个单独容器的情况。podman-exec 模式描述了每个节点运行一个容器的情况,即使有多个 MPI 进程也是如此。

我们在 Perlmutter 上使用 podman-hpc 运行了多个 基准测试,以衡量裸机实现、Shifter、Podman container-per-processpodman-exec 模式的性能。EXAALT 基准测试运行 LAMMPS 分子动力学应用程序,Pynamic 基准测试模拟 Python 包导入和函数调用,DeepCAM 基准测试是一个气候数据分割深度学习应用程序。总的来说,基准测试表明裸机、Shifter 和 podman-exec 情况之间的性能相当。在 Pynamic 和 DeepCAM 的结果中都可以看到 Podman container-per-process 中产生的启动开销。总的来说,podman-exec 是我们性能最佳的配置,因此这将是我们未来开发工作的重点模式。

Performance results for EXAALT carbon analysis

(Laurie Stephey, CC BY-SA 4.0)

我们在 32、64、128 和 256 个节点上进行的强扩展 EXAALT 基准测试结果。红色显示的是两次裸机运行结果的平均值,蓝色显示的是 Shifter 运行结果,深绿色显示的是 Podman container-per-process 运行结果,浅绿色显示的是 podman-exec 模式结果,并带有相应的误差条。

Pynamic scaling benchmark results

(Laurie Stephey, CC BY-SA 4.0)

Pynamic 基准测试在两种作业规模(128 和 256 个节点),每个节点使用 64 个任务的情况下,针对裸机(红色)、Shifter(蓝色)、podman-exec 模式(绿色)和 Podman container-per-process 模式(浅绿色)的结果。所有配置均运行三次。

DeepCAM scaling benchmark results

(Laurie Stephey, CC BY-SA 4.0)

MLPerf TM DeepCAM 强扩展基准测试在不同作业规模(16、32、64 和 128 个 Perlmutter GPU 节点)下,针对 Shifter(蓝色)、Podman container-per-process(浅绿色)和 podman-exec 模式(深绿色)的结果。我们将计时数据分为容器启动、训练启动和训练运行时。

我们对目前看到的结果感到兴奋,但在向所有 NERSC 用户开放 Podman 之前,我们还有很多工作要做。为了改善用户体验,我们计划探索添加 Slurm 集成,以消除使用嵌套封装脚本的一些复杂性,特别是对于 podman-exec 情况。我们还计划将我们的 podman-hpc 脚本和二进制文件放入所有节点的 Perlmutter 引导镜像中,这样就不再需要将它们暂存到每个节点。我们希望与 OCI 社区一起解决 OCI hook 功能的一些限制(例如,无法设置环境变量)。最后,我们的目标是将我们的大部分工作上游化到 Podman 本身,以便更大的 Podman 社区可以利用我们的工作。


这些结果尚未经过 MLCommons 协会验证。请注意,我们正在测量 N 个 epoch 的时间,这不是官方的 MLPerf 测量方法。

Laurie in front of NERSC's Perlmutter system
Laurie Stephey 是数据分析和服务组的科学数据架构师。她在 NERSC 的容器基础设施和 Python 团队工作,担任 DIII-D 和 KSTAR 核聚变科学团队的项目联络员,并且对科学工作流程和 NERSC 中心数据分析也很感兴趣。
ajyounge
Andrew J. Younge 是 Sandia 国家实验室可扩展计算机架构部门的研发经理。他的研究兴趣包括高性能计算、虚拟化和容器、分布式系统以及节能计算。
Picture of Dan Fulton holding a keyboard.
Dan Fulton 是伯克利国家实验室 NERSC 数据与分析服务团队的科学数据架构师,他在那里从事计算容器基础设施以及面向 NERSC 用户的 kubernetes 即服务 (kubernetes-as-a-service) 的工作。

1 条评论

HPC(高性能计算)已成为科学研究、数据分析和工程应用的重要方面。然而,由于需要大量的互连资源和依赖项,大规模运行 HPC 工作负载可能具有挑战性。容器化技术已成为简化复杂 HPC 应用程序部署和管理的解决方案。Podman 是一种容器引擎,使 HPC 容器能够大规模运行。借助 Podman,可以在机器集群中构建、运行和管理 HPC 容器,从而确保一致且可靠的结果。使用 Podman 大规模部署 HPC 容器的能力为研究人员和工程师高效处理大规模数据分析和模拟提供了灵活、可扩展且经济高效的解决方案。通过利用容器化技术和 Podman 的强大功能,可以在各种环境中(从本地集群到基于云的基础设施)更轻松地执行、编排和管理 HPC 工作负载。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.