使用 Podman 大规模 HPC 容器
了解如何修改 Podman 以大规模运行以实现高性能计算 (HPC)。
本文介绍了 NERSC 与 Red Hat 合作最近完成的工作,以修改 Podman(Pod 管理工具)以大规模运行,这是高性能计算 (HPC) 的关键要求。 Podman 是一个用于在 Linux 系统上开发、管理和运行容器的开源工具。有关这项工作的更多详细信息,请参阅我们将在 CANOPIE-HPC Supercomputing 2022 论文集上发表的论文。
在下面的演示视频中,我们将演示从 NERSC 注册表中将图像拉到 Perlmutter 上,使用 podman-hpc 生成图像的压缩版本,并通过我们的 大规模运行 EXAALT 基准测试(900 个节点,3600 个 GPU) >podman-exec 包装器。 NERSC 的旗舰超级计算系统是 Perlmutter,目前在 500 强排行榜上排名第七。它的 GPU 分区包含超过 6000 个 NVIDIA A100 GPU,CPU 分区包含超过 6000 个 AMD Milan CPU。本博文中描述的所有工作都是在 Perlmutter 上完成的。
NERSC(国家能源研究科学计算中心)是美国能源部的生产任务计算设施,为能源部科学办公室提供服务,该办公室资助广泛的基础和应用研究。 2022 年上半年,超过 700 个独立用户使用了 NERSC 当前的容器解决方案 Shifter,并且一般用户对容器的兴趣正在增长。
尽管 NERSC 已经在大规模范围内展示了 Shifter 近乎裸机的性能,但仍有一些缺点促使我们去探索 Podman。主要因素是 Shifter 不提供任何构建实用程序。用户必须在自己的本地系统上构建容器,并通过注册表将其镜像发送到 NERSC。另一个障碍是 Shifter 通过将正在运行的容器限制为启动它的用户的权限来提供安全性。最后,Shifter 主要是一个“内部”解决方案,因此用户必须学习新技术,并且 NERSC 工作人员还要承担维护该软件的额外负担。
Podman 为所有这些主要痛点提供了解决方案。 Podman 是一个符合 OCI 的框架,遵循一组社区标准。对于使用过其他 OCI 兼容工具(如 Docker)的用户来说,它会感觉很熟悉。截至 2022 年 10 月,它还拥有庞大的用户和开发者社区,在 GitHub 上拥有超过 15,000 颗星。Podman 吸引我们的主要创新是无根容器。无根容器通过使用 subuid/subgid 映射来优雅地限制权限,使容器能够在用户命名空间中运行,但具有完全 root 权限。 Podman 还提供容器构建功能,允许用户直接在 Perlmutter 登录节点上构建映像,从而消除了开发工作流程中的主要障碍。
[查看有关启用系统管理的最新 Podman 文章。 ]
要在 Perlmutter 上大规模启用 Podman 并使其具有接近本机的性能,我们需要解决站点集成、可扩展性和性能问题。此外,我们还开发了两个包装脚本来实现两种操作模式:Podman container-per-process 和 podman-exec。 Podman container-per-process 模式描述了一种情况,其中许多进程在节点上运行(通常在 MPI 应用程序中),每个进程运行一个单独的容器。 podman-exec 模式描述了每个节点运行一个容器的情况,即使有多个 MPI 进程也是如此。
我们在 Perlmutter 上使用 podman-hpc 运行了多个基准测试,以衡量裸机实现的性能:Shifter、Podman container-per-process 和 podman-exec 模式。 EXAALT 基准测试运行 LAMMPS 分子动力学应用程序,Pynamic 基准测试模拟 Python 包导入和函数调用,DeepCAM 基准测试是气候数据分割深度学习应用程序。一般来说,基准测试表明裸机、Shifter 和 podman-exec 情况之间的性能相当。 Podman container-per-process 中产生的启动开销可以在 Pynamic 和 DeepCAM 的结果中看到。一般来说,podman-exec 是我们性能最佳的配置,因此这是我们未来开发工作重点关注的模式。
(劳里·斯蒂芬,CC BY-SA 4.0)
我们在 32、64、128 和 256 个节点上进行强扩展 EXAALT 基准测试的结果。两次裸机运行结果的平均值以红色显示,Shifter 运行结果以蓝色显示,Podman container-per-process 运行结果以深绿色显示,podman-exec 模式结果以浅绿色显示,并带有相应的误差线。
(劳里·斯蒂芬,CC BY-SA 4.0)
裸机(红色)、Shifter(蓝色)、podman-exec 模式(绿色)和 Podman container-per-process 模式(浅色)的 Pynamic 基准测试结果-绿色)超过两种作业规模(128 和 256 个节点),每个节点使用 64 个任务。所有配置均运行三次。
(劳里·斯蒂芬,CC BY-SA 4.0)
Shifter(蓝色)、Podman container-per-process(浅绿色)和 podman-exec 模式(深绿色)的 MLPerf TM DeepCAM 强扩展基准测试结果涵盖一系列作业大小(16、32、64 和 128 Perlmutter GPU 节点)。我们将计时数据分为容器启动、训练启动和训练运行时。
我们对迄今为止看到的结果感到兴奋,但在向所有 NERSC 用户开放 Podman 之前,我们仍有工作要做。为了改善用户体验,我们的目标是探索添加 Slurm 集成,以消除使用嵌套包装器脚本的一些复杂性,特别是对于 podman-exec 情况。我们还旨在将 podman-hpc 脚本和二进制文件放入所有节点的 Perlmutter 启动映像中,因此不再需要将这些脚本和二进制文件暂存到每个节点。我们希望与 OCI 社区一起解决 OCI 挂钩功能的一些限制(例如,无法设置环境变量)。最后,我们的目标是将我们的大部分工作上游到 Podman 本身,以便更大的 Podman 社区可以利用我们的工作。
这些结果尚未经过 MLCommons 协会的验证。请注意,我们正在测量 N 个周期的时间,这不是官方的 MLPerf 测量方法。


