Singularity简介

诞生与发展

2015年作为在HPC集群上运行的容器系统由劳伦斯伯克利国家实验室(LBNL)的Greg Kurtzer提出。Singularity本身就是为应对大规模、跨节点HPC和DL工作负载而开发的容器,具备轻量级、快速部署、方便迁移等诸多优势。2016年4月诞生第一个公开版,2018年1月1日,Greg Kurtzer成立了Sylabs Inc用以开发和维护Singularity及其相关生态,开源社区逐步形成。2018年10月,Singularity 3.0由Go语言重构。目前版本已经迭代到3.8,在Github上已经拥有2.2k+的start数量。

设计哲学

计算的可移动性

计算的可移动性主要是指在本地构建一个工作流,同时保证这个工作流可以在不同的主机不同的linux操作系统或者云服务器上执行。本质上,计算的可移动性意味着能够将完整的软件栈从一个系统移动到另一个系统。对于一个可复现的自然科学来说,可计算的可移动性是其重要组成部分,同时还要保证计算的一致性和应用的持续性部署。

Singularity通过利用一个可分发的镜像格式文件(Singularity image Format)来实现,这个SIF文件把完整的容器和栈封装到一个镜像文件中,这个文件能够被复制和共享,独特的镜像格式将应用程序所依赖的环境都封装在镜像文件中,不需要再单独打包和导入。没有复杂的缓存机制并且镜像经过压缩,只需占用非常少的磁盘空间。
图1 Singularity容器镜像格式

可重复性

一旦一个容器化的工作流被定义,在容器运行过程中可以实行快照和存档操作,以便容器能够继续使用,由于容器不受主机操作系统的影响,可以保证容器的文件和代码是没有更改的。

用户定义自由

运维问题一直困扰着系统集成商,管理员和工程师们,必须花费大量的时间进行系统的管理和维护。Singularity旨在为用户提供安装不同版本应用程序和依赖的自由。通过提供和dockerfile类似的recipe脚本,用户可以定义自己的工作环境,并可以将环境镜像进行共享,在任何装有Singularity的系统上运行其工作流,运维复杂度也得到极大简化。

对现有HPC资源进行支持

Docker作为最流行的容器技术,在微服务的部署中应用广泛,但是直接将Docker引入传统HPC,由于两种应用场景不能很好地重叠,因此解决方案是不能强行结合的。Singularity的一个目标就是支持现存的HPC资源,让使用Singularity就像和主机操作系统上安装单个软件包一样简单。
Singularity的架构如图2所示。在保证容器安全的基础上,弱化了隔离性。无需运行daemon进程,仅提供的一个完整运行时的环境,在不使用时不需要单独的进程,不占用任何资源。也正因为不由daemon进程代为执行指令,资源限制和权限问题也得以解决。

Docker镜像应用非常广泛,生态优秀,为此Singularity设计上能够和Docker镜像无缝协作,可以将Docker镜像转换为自己的镜像格式(SIF)。例如可以直接利用下面命令进行Docker容器镜像的下载:Singularity shell docker://Ubuntu:latest。

Singularity原生地支持infiniBand 、GPU和Lustre等,能够和资源管理器(SLURM,Torque,SGE等)集成,因此Singularity在系统上运行就像执行一个普通的命令行一样。
图2 Docker和Singularity的架构

应用场景

HPC集群资源由于是一个共享系统,普通用户不具有root访问权限。如果普通用户能够升权root权限,则可能造成严重的安全问题,这在容器技术中也是首要考虑的。

想要在集群规模化运行容器,在大型的并行文件系统中使用单个镜像作为容器的标准镜像格式无疑是更有优势的,容器内部的元操作都发生在容器镜像内,而不是元数据服务器。

Singularity通用的工作流如图3所示,用户在自己的终端根据需要创建,修改和更新容器。在容器中包含了相应的应用程序,库和数据,可以通过镜像共享给其他主机,并且可以在没有root权限下进行执行。
图3 Singularity的工作流

技术生态

计算机领域任何一项技术的兴起和快速发展都离不开技术生态。Singularity目前已经有了丰富的工具集,建成了良好的生态。下面介绍几种常用的开源工具。

Singularity Hub

一个公共可用的Singularity容器云服务,存储了大量构建不同应用容器recipe文件,并且提供在线构建服务。(https://singularityhub.github.io/singularityhub-docs/)

Singularity Registry Server

可以部署私有的容器仓库服务,类似Docker Registry,可使用Singularity进行交互。
(https://singularityhub.github.io/sregistry/)

Singularity Community Catalog

每天进行Singularity社区中的recipe文件更新,并且提供一个可以搜索的交互式接口。(https://singularityhub.github.io/singularity-catalog/)

Singularity Python

是一个 Python API,用于与 Singularity配合使用。可以用来对recipe文件进行解析和也可以辅助生成,并且提供对dockerfile的支持。
https://singularityhub.github.io/singularity-cli/)

总结

在HPC应用场景下相较于Docker,Singularity主要有以下优势:Singularity同时支持root用户和非root用户启动,且容器启动前后,用户上下文保持不变,这使得用户权限在容器内部和外部都是相同的。Singularity强调容器服务的便捷性、可移植性和可扩展性,而弱化了容器进程的高度隔离性,因此量级更轻,内核namespace更少,性能损失更小。未来在规模化的科学计算中大有可为!

参考文献:

[1] G.M Kurtzer, V Sochat, and M.W. Bauer, (2017). Singularity: Scientific containers for mobility of compute. PLoS one, 12(5)

[2] https://singularity.hpcng.org/user-docs/3.8/index.html

[3] http://blog.zxh.site/2018/05/15/Singularity/

[4] https://blog.csdn.net/eo63y6pKI42Ilxr/article/details/84207403


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 583614868@qq.com

文章标题:Singularity简介

文章字数:1.6k

本文作者:钟帅豪

发布时间:2021-08-29, 17:55:55

最后更新:2021-08-29, 18:26:06

原始链接:http://jhshz520.github.io/2021/08/29/Singularity简介/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏