为什么容器对于HPC如此重要?

说到 HPC,你可能会想到一个房间那样大的计算机。但 HPC 与云计算中盛行的虚拟化有什么不同呢?虽然超级计算机看起来与大型虚拟化部署相似,但两者的目标实际上大相径庭。那么,是什么让高性能计算与众不同?

要回答这个问题,不妨看一个实际的例子:天气预报。天气预报涉及处理和分析大量数据,最终目的是准确预测明天的天气。虽然使用一台计算机就可以预测天气,但由于需要处理的数据量太大,即使使用目前最快的计算机,也可能需要数天甚至数周的时间。显然,如果预测明天的天气需要五天时间,那就没有什么用处了,因为关键是要能够为明天做好计划。如果我们找不到更快的计算机,那么如何才能足够快地预报天气呢?答案显而易见,那就是使用多台计算机。这正是高性能计算的真正意义所在。当一台计算机无法解决我们的问题时,我们可以使用多台计算机来解决问题。

归根结底,超级计算机其实就是一个由高速计算机组成的集群,它们之间的连接方式可以让集群中的单台计算机高效地相互通信。那么,虚拟化和高性能计算有什么区别呢?通常,虚拟化是将一台计算机虚拟成五台计算机,以便多人使用。而高性能计算则恰恰相反。我们使用多台计算机,共同解决一个问题。

既然我们已经知道了什么是高性能计算,那就让我们深入了解一下如何构建可在超级计算机上运行的软件。为满足不同用户的要求,高性能计算系统通常提供带有特定软件版本的预定义模块,用户可通过加载或卸载模块来切换所需的软件包。这种方法需要系统管理员的协助,因此限制了用户对环境定制日益增长的需求。在多租户环境中,用户按需安装新软件包受到限制,因为这可能会改变现有用户的工作环境,甚至引发安全风险。启用模块的软件环境对于动态人工智能(AI)软件栈来说也很不方便。通常,人工智能应用对软件堆栈和配置有着复杂的要求。容器化不仅能在高性能计算系统上实现定制环境,还能将研究的可重复性付诸实践。通过将我们的应用程序及其所有依赖项打包到容器中,应用程序的可移植性会变得更强。编写软件时最常见的挑战之一就是代码中使用的不同版本库之间的行为差异。通过使用容器,无论我们使用的是笔记本电脑还是超级计算机,我们都能确保代码运行所依赖的版本是相同的。这样,我们就能更轻松地完成工作,并及时发布天气预报!

然而,容器化应用可能会变得复杂,例如生产中可能需要数千个独立的容器,出于安全考虑,容器之间可能需要网络隔离。在云或大数据集群上已开发出复杂的容器协调策略,以满足此类要求。而高性能计算系统在容器调度和管理(如负载平衡和容器自动扩展)方面缺乏高效功能,而且通常不提供环境配置(即基础设施、配置和依赖关系)方面的集成支持。

下面列出了高性能计算系统中一些具有代表性的容器引擎和运行时。

1. Charliecloud

Charliecloud运行容器时不需要特权操作或守护进程。Charliecloud 可将 Docker 映像转换为 tar 文件,并在高性能计算节点上解压。安装 Charliecloud 不需要 root 权限。这种非侵入式机制是高性能计算系统的理想选择。Charliecloud被认为可以安全地防止各种攻击,如chroot逃逸、绕过文件和目录权限、特权端口绑定到所有主机IP地址或UID设置为未映射UID等。

2. Singularity

Singularity 是学术界和工业界使用最广泛的高性能计算容器引擎。Singularity 从一开始就是专为高性能计算系统设计的。与 Docker 相比,它有以下优点:

  • 以用户权限运行,无守护进程。
  • 与高性能计算系统无缝集成。Singularity 本机支持 GPU、MPI 和 InfiniBand。与 Docker 容器相比,无需额外的网络配置;
  • 可通过单个镜像文件快速移植。相反,Docker 是建立在层级文件之上的。

3. SARUS

SARUS 是另一个针对 HPC 系统的容器引擎。SARUS 依赖 runc 来实例化容器。与上述引擎不同,SARUS 的内部结构基于 OCI 标准。值得注意的是,SARUS 的功能可通过调用定制的 OCI 钩子(如 MPI 钩子)进行扩展。

4. UDocker

UDocker 是 Docker 容器的 Python 封装程序,它只在用户空间执行简单的 Docker 容器,无需获取 root 权限。UDocker 提供类似 Docker 的 CLI,但只支持 Docker 命令的一个子集,即搜索、提取、导入、导出、加载、保存、创建和运行。值得注意的是,UDocker 既不使用 Docker,也不要求主机上有 Docker。它只需在提取的容器上提供一个类似 chroot 的环境即可执行容器。

高性能容器支持的Linux命名空间

命名空间SingularityCharliecloudUDockerSARUSDocker
UTS不支持不支持不支持不支持支持
user支持支持支持支持支持
PID支持不支持不支持不支持支持
network不支持不支持不支持不支持支持
mount支持支持支持支持支持
IPC不支持不支持不支持不支持支持
Cgroup支持不支持不支持支持支持

Docker 与高性能计算系统容器引擎列表的比较

容器引擎SingularityCharliecloudUDockerSARUSDocker
命名空间的使用支持支持支持支持支持
MPI支持支持支持支持支持支持
GPU支持支持支持支持支持支持
网络支持可插拔网络驱动程序主机网络主机网络主机网络主机网络
镜像格式层级文件系统单镜像文件squashfs文件系统bundle层级文件系统
是否可以访问宿主机系统支持支持支持支持支持
特权守护进程不是不是不是不是
编程语言GoGoCC++Python
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值