本文介绍了 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-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
情况之间的性能相当。在 Pynamic 和 DeepCAM 的结果中都可以看到 Podman container-per-process
中产生的启动开销。总的来说,podman-exec
是我们性能最佳的配置,因此这将是我们未来开发工作的重点模式。

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

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

(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 测量方法。
1 条评论