HPC平台计算软件依赖, Singularity超级简单

发布于:2022-12-27 ⋅ 阅读:(322) ⋅ 点赞:(0)

传统传统 

如上图所示, 做科学计算, 安装各种软件, 经常遭遇依赖问题.

可能是各计算软件/代码, 过多侧重于能否解决问题, 依赖优化方面考量的较少. 再或者是各种矩阵运算、数学近似, 在不同MPI版本以及不同版本数学库之间有些许差异, 导致计算结果可能有明显的差异, 即所谓差之毫厘, 谬之千里.

为了保证计算软件/代码能顺利安装和运行, 保证数据可重复性, 一般建议按照软件/代码作者所测试的平台和工具链版本来进行安装部署, 否则极有可能安装失败, 或者算出来结果不对.

绝大多数情况下, HPC的用户是没有管理权限的, 顶多也只能在$HOME里面折腾, 而且绝大多数情形下, HPC是几乎不会对外联网的, 所以, git, wget都基本会无法使用的. 少数情况下, HPC管理员会搭理你, 但是会说, 我只负责HPC平台运行, 不负责用户的具体运算软件.

用户摆弄自己的专业代码都很头疼了, 哪有功夫去摆弄Linux? 况且市面上的Linux教程, 基本针对Linux系统管理员或者运维, 哪有针对做科学计算应该具备什么样的Linux技能的教科书呀? 

所谓鸟格私房菜这种教程, 做科研计算的小伙伴, 看了也是白看. 

Singularity方案

下图描述一种解决方案. 

这里, 把每一个App的特殊依赖和App直接打包为一个可执行的二进制文件. 解决一切烦恼.

这种模式下, 用户的App不再和系统的各种库打交道, 而直接和内核沟通. 细节如图片文字所述. 

 Singularity是什么

Singularity is a free, cross-platform and open-source computer program that performs operating-system-level virtualization. One of the main uses of Singularity is to bring containers and reproducibility to scientific computing and the high-performance computing world. https://en.wikipedia.org/wiki/Singularity_(software)https://en.wikipedia.org/wiki/Singularity_(software)

跨平台意味着, 在A机器处理完毕的软件镜像包, 在你的机器上可以可以顺利的运行呀. 

比如我已经处理了很多科学计算软件的singularity二进制版本, 你可以自己取用呀. 传送门如下: 
https://pan.baidu.com/s/1r7PduYXqjn3kpS-ie0H8NQ?pwd=aknchttps://gitee.com/link?target=https%3A%2F%2Fpan.baidu.com%2Fs%2F1r7PduYXqjn3kpS-ie0H8NQ%3Fpwd%3Daknc

谁在使用/Who are using Singularity 

  • Texas Advanced Computing Center 

    Oak Ridge Leadership Computing Facility 

    Purdue University 

    National Institutes of Health HPC 

    UFIT Research Computing at the University of Florida 

    San Diego Supercomputing Center 

    Lawrence Berkeley National Laboratory 

    University of Chicago 

    Argonne National Lab

    … the list is growing…

​​​​​​​虚拟化效率低下??? 开玩笑!!!

什么? !!!!

那么你认为这么多知名实验室超算用户都是傻子吗?

各种Linux平台上跑docker虚拟化的互联网公司都是傻子吗?

建议摒弃基于微软平台下的虚拟机性能认知. 

补充一个对比图, 来自华为openEuler sig-HPC分享讨论:

​​​​​​​ 

运行计算示例

case 1, run parallel VASP/ 运行VASP

传统模式

  1. 安装Intel编译器套件,
  2. 拿到VASP源码, 修改配置文件,
  3. 使用intel编辑器编译vasp源码, 得到二进制文件,
  4. 配置二进制文件, 启用MPI, 避免和其他版本冲突(一个HPC平台上, 不仅仅只有一个版本的编译器吧? 不仅仅只有一个版本的OpenMPI吧? 既有MPI未必满足你的要求吧? )
  5. 运行 
    mpirun -np 4 vasp_std

Singularity模式

  1. 下载制作好的文件, 比如是vasp6-hpc4you.exe, 放到$HOME/bin
  2. 运行
    vasp6-hpc4you.exe 4 vasp_std
  3. 注意, 你无需在机器上安装任何MPI或者关照任何已经存在的MPI版本.

case 2,  run ORCA/ 运行ORCA

传统模式

  1. 1.安装特定版本gcc,

    2.源码编译安装特定版本的openMPI,

    3.下载ORCA,

    4.配置ORCA和对应的openMPI版本, 避免和其他版本openMPI冲突, 合理屏蔽系统MPI. 可能要涉及到编辑~/.bashrc文件或者配置module文件, 并学会如何激活这种设定. 

    5.运行 

    orca InputFile > OutputFile

Singularity模式  

  1. 下载制作好的文件, 比如是orca5-hpc4you.exe, 放到$HOME/bin
  2. 运行
    orca5-hpc4you.exe InputFile > OutputFile
  3. 注意, 你无需在机器上安装任何MPI, 也无需关照任何已经存在的MPI设定.

case 3,  run g09/ 运行g09

传统模式

  1. 拿到g09软件包, 解压到指定目录
  2. 根据手册, 设定用户组和组权限(很多小伙伴在这一步就卡住了)
  3. 配置g09, 设定g09root以及编写g09初始化脚本(99%的硕士博士新生搞不定的)
  4. 启用g09脚本, 比如放在~/.bashrc中 (99%的硕士博士新生搞不定的, 找不到~/.bashrc,更不晓得怎么把脚本放里面, 因为不会vi)
  5. 运行计算
    g09 InputFile.com &

Singularity模式

  1. 下载制作好的文件, 比如是g09-hpc4you.exe, 放到$HOME/bin
  2. 运行
    g09-hpc4you.exe InputFile &
  3. 注意, 你无需在机器上做任何设定哦.

可镜像化的科学计算软件

可以通过singularity来处理为单个可执行文件的科学计算软件, 并不限于以上提到的几个例子. 

处理支持CPU, 内存等计算资源外, 支持GPU以及各种加速卡也是毋庸置疑的. 当然也支持OPA, InfiniBand等HPC平台的高速网络了. 

在编译制作二进制的时候, 注意处理器指令集的选择, 应该就可以全平台适用了吧? 

我是个计算机外行, 编译参数这个层面不懂. 

我自己测试, 我制作的二进制文件, 在Intel处理器上都可以工作. 如果编译限定了支持AVX512指令集, 那么只有在支持该指令集的处理器上可以使用. 因为手里没有AMD EYPC平台的处理器, 无法测试在Intel平台指定AVX2指令集处理得到的二进制文件, 能否在AMD平台上顺利运行? 

后记

或许docker也能做同样的事情. 

但是我作为一个计算机外行, 实在是看不懂docker手册. 那玩意写的太专业了, 本人智力水平有限, 实在无法理解. 

反而是看了singularity手册之后, 直接感慨, Thank God! 这才是为科学计算定做的解决方案. 简单明了. 

我这种计算机外行, 看了手册10分钟, 就在主机的Ubuntu 20.04主机上, 顺利跑了一个centOS8.4了. 

docker太专业了, 太高端了, 不适合没有计算机基础的做计算的小伙伴使用. 仅个人见解.