巧用Singularity, 助力科学计算

繁琐的库依赖...

没有root权限的HPC平台...

没法随意更换操作系统...

没法管控和修改即有库文件设定....

.....

以上都是各位生、化、环、材等专业从事计算模拟工作的小伙伴都能遇到的问题.

以下探讨一种便捷的完全可控的方案, 协助您避开如上各种麻烦.

由于Singularity支持跨平台, 那么, 你在自己的机器上搞完, 再拿到HPC平台, 当然是可以正常使用的呀. 

基于singularity制作东西, 需要root权限; HPC不可能给你root权限, 你自己搞一个虚拟机自己玩呗. 反正支持跨平台呀. 

在你的机器安装Singularity

这东西仅仅支持Linux. 是的, 没看错, 因为开发者就是使用HPC的, 科学计算的HPC没有人闲的蛋疼使用微软来做, 所以这东西仅仅支持Linux理所当然了.

微软用户, 有两个选择:

  1. 微软搞一个虚拟机, 安装一个Linux系统, 比如Rocky LInux 8.5, 或者Ubuntu, 你能搞定就行. 
  2. 或者, 租用一个云服务器, 内存大一些, 用完就扔掉. 

具体如何安装Linux, 请bing.com搜素找到Official Site, 下载对应的rpm或者deb包就可以了. 

https://github.com/sylabs/singularityicon-default.png?t=M3C8https://github.com/sylabs/singularity

https://github.com/sylabs/singularity/releases/tag/v3.9.8icon-default.png?t=M3C8https://github.com/sylabs/singularity/releases/tag/v3.9.8

RPM / DEB packages are provided for:

  • Ubuntu 18.04 (bionic)
  • Ubuntu 20.04 (focal)
  • RHEL/CentOS 7 (el7)
  • RHEL/CentOS/Alma/Rocky 8 (el8)

rpm -i *rpm; dpkg -i *deb这种才做, 自己看bing.com搜索搞定吧. 

一些必备的信息

singularity能开起来一个新的特殊的Linux系统, 但是该系统, 内核借用你的主机/虚拟机, 处理器, 内存, 硬盘, 网络数据, 也是借用你的主机, 但是并不会对主机的网路产生任何影响. 

相当于你开起来了一个新的系统, 却还是原来的用户名, 原来的用户数据. 是不是有点绕? 看看下面这个示例视频:

秒换系统 | Switch Linux OS Instantly_哔哩哔哩_bilibili秒换系统,网络、数据永相伴。安装多种软件不是梦。 Linux only。不支持微软。https://www.bilibili.com/video/BV1VV411W7BY再仔细捣鼓一遍, 比如你当前在你的Linux主机, 或者是在虚拟机, 系统是Rocky Linux 8.5, 以root用户执行: 

singularity build --sandbox ubuntu-18.04 docker://ubuntu:18.04

等待完毕后, 你会在当前路径得到一个文件夹, ubuntu-18.04, 在执行

singularity shell -w ubuntu-18.04

你会发现, 终端的提示符号变了, 你可以试试查询系统版本, 你会发现, 你现在是在ubuntu 18.04系统中, 不过, 内核依旧是主机的内核版本, 然后, 你依旧可以看到原来系统中的文件. 但是关键性的系统目录, 比如/opt, /usr, /mnt都是当前Ubuntu系统的. 而~root, /home, /tmp等都是原来主机系统的. 请特别留意这里. 

保持当前的终端不要退出, 继续操作: 

apt-get update -y
apt-get upgrade -y
apt-get install gnuplot

你发现什么了? 是不是, 明明我主机是Rocky Linux, 但是当前的终端怎么是在操作Ubuntu 18.04, 但是数据又是之前系统的. 不要惊讶, 这就是我说的, 秒换系统版本, 数据永相伴. 

再仔细想想这个过程吧. 领会到了吗? 

做虚拟机使用

那么, 在一个即有的Linux系统上, 只要能运行singularity, 那么, 换系统就是瞬间完成的事情了. 

Docker Hub, 提供了很多系统版本的docker镜像可以拉取. 

然后, singularity可以从docker hub拉东西呀, 上面是不是已经示例了? 

拉取一个基础系统Linux系统, 看手册吧, 我就不赘述了. 

Build a Container — SingularityCE User Guide 3.8 documentationhttps://sylabs.io/guides/3.8/user-guide/build_a_container.html然后你就用了ubuntu 18.04, 20.04等各种版本, 当然也会有centOS 7.x 8.x各种版本. 

既然都可以apt/dnf了, 那么选一个开发者推荐的系统版本, 做成sandbox, 然后在里面, 进行apt/dnf各种操作吧. 

由于这个sandbox你完全控制, 那就可以安装你想要的所有东西, 建议一个sandbox, 就专门做一个软件. 

比如搞完后, sandbox的名字是ubuntu-18.04, 做成一个单独的二进制文件, root执行

singularity build cp2k-GNU-all-plugins.exe ubuntu-18.04

然后得到一个cp2k-GNU-all-plugins.exe的二进制文件. 后面的就不用再絮叨了吧? 

作为编译平台使用

由于singularity制作的镜像, 是直接挂在/复用主机的网络、文件. 那么, 可以搞一个centOS7镜像, 里面比如配置好intel2018u4编译器套件, 比如是c7-intel2018u4.SIF. 那么采用普通用户运行

singularity shell c7-intel2018u4.SIF

你会发现, 你具有了可用的intel2018全套工具链, 然后就可以编译你要的东西了. (当然, 你可以能需要取消~/.bashrc中任何已经存在的所有设定)

那么, 你要不会举一反三的化, 我建议, 你的硕士、博士学位就不用费劲了....

你还是要会点技术的

以上, 绕了半天, 都是在合理规避HPC平台, 用户没有root授权这个事情. 

采用一个跨平台的方案, 在主机的机器上, 使用root权限制作完毕, 拿到目标机器上, 采用普通用户继续使用. 

那么, 在自己机器上操作, 相当于在一台你具有root权限的Linux机器上操作. Linux单机上如何弄, 如何编译代码, 如何安装软件, 你依旧是要会的呀. 

很显然, singularity模式, 是不支持类似于系统后台之类的应用的, 比如, 你不能搞一个vsFTPd来运行. 此类需求, 应该使用docker, 是不是? 

依旧有希望

如果你Linux单机搞不定, singularity方案, 当然搞不定的. 

但是, 你可以使用别人做好的singularity镜像或者基于此的可执行二进制文件呀. 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值