传统传统
如上图所示, 做科学计算, 安装各种软件, 经常遭遇依赖问题.
可能是各计算软件/代码, 过多侧重于能否解决问题, 依赖优化方面考量的较少. 再或者是各种矩阵运算、数学近似, 在不同MPI版本以及不同版本数学库之间有些许差异, 导致计算结果可能有明显的差异, 即所谓差之毫厘, 谬之千里.
为了保证计算软件/代码能顺利安装和运行, 保证数据可重复性, 一般建议按照软件/代码作者所测试的平台和工具链版本来进行安装部署, 否则极有可能安装失败, 或者算出来结果不对.
绝大多数情况下, HPC的用户是没有管理权限的, 顶多也只能在$HOME里面折腾, 而且绝大多数情形下, HPC是几乎不会对外联网的, 所以, git, wget都基本会无法使用的. 少数情况下, HPC管理员会搭理你, 但是会说, 我只负责HPC平台运行, 不负责用户的具体运算软件.
用户摆弄自己的专业代码都很头疼了, 哪有功夫去摆弄Linux? 况且市面上的Linux教程, 基本针对Linux系统管理员或者运维, 哪有针对做科学计算应该具备什么样的Linux技能的教科书呀?
所谓鸟格私房菜这种教程, 做科研计算的小伙伴, 看了也是白看.
Singularity方案
下图描述一种解决方案.
这里, 把每一个App的特殊依赖和App直接打包为一个可执行的二进制文件. 解决一切烦恼.
这种模式下, 用户的App不再和系统的各种库打交道, 而直接和内核沟通. 细节如图片文字所述.