15 Star 51 Fork 81

openEuler/hpcrunner

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

HPC容器化技术

把HPC应用装进容器

1.为什么用容器技术?

  • 容器技术对分布式系统的管理至关重要
  • 开发者可以自定义软件栈
  • HPC应用也需要支持日益更新的软件栈
  • 但是HPC应用和普通的云上应用又大不相同
    • 基于MPI并行通信
    • 轻松扩展至上千节点的大规模集群
    • 性能至关重要

2.HPC应用使用容器有啥价值?

  • HPC应用通常需要深度定制:使用yum安装的包为了通用性牺牲了性能,开发者需要自定义OS基础环境和重编依赖库
  • 可组合性:开发者可以显式定义软件栈的排列组合,可重现的环境对架构扩展大有益处
  • 灵活性:容器可以在多个OS上重建、分层或者共享,可灵活部署到笔记本、云和高性能集群
  • 版本控制:容器拥有类似Git的版本控制系统,支持现有容器仓,比如Docker Hub.

3.使用Docker?

  • 安全问题
    • 集群中的资源使用通常需要由调度管理器来进行分配,例如Slurm/PBS/SGE等系统负责资源分配。调度管理器根据用户需求为每个作业分配一定的资源,实质上是利用cgroups针对每个作业进行配置实现的。而Docker镜像的启动实际上是由Docker Daemon去执行的,如此一来资源限制自然会失效。并且Docker Daemon是由 root 用户启动的,无论是为普通用户设置sudoer还是将普通用户添加到 docker 用户组中都不是一个安全的方式。
  • 缺少HPC架构的支持
    • 缺少批量整合
    • 假设资源都在本地
    • 假设应用通过TCP/IP通信
  • 包含了不必要的资源开销

4.使用Singularity吧!

Singularity拥有容器技术所包含的大多数优势,例如启动迅速、资源开销小、轻松的迁移和扩展等等。除此之外,相较于Docker这样的容器技术,针对HPC应用它还有一些独特的优势:

  • 更加轻松的环境打包迁徙:Singularity所依赖的东西都在镜像文件中,不需要再单独打包 / 导入,直接拷贝走镜像即可。没有复杂的缓存机制,并且该镜像已经过压缩,只需占用非常少的磁盘空间。开发态允许直接在笔记本上运行,优化完成后再跑在超算集群上。
  • 和现有系统无缝整合:系统用户权限、网络等均直接继承宿主机配置,并且无需进入某个镜像后再执行命令,可以直接在外部调用镜像内的指令,就像执行一个本地安装的指令一样。
  • 无需运行 daemon 进程:Singularity提供的完全是一个运行时的环境,在不使用时不需要单独的进程,不占用任何资源。不由 daemon 进程代为执行指令,资源限制和权限问题也得以解决。
  • 阿里云使用宿主模式和容器模式对singularity进行了测评,结果显示性能损失<2%,而且对GPU的支持也很好。

5.五步跑通一个HPC容器

5.1 下载HPCRunner包解压之后初始化

source ./init.sh

5.2 安装singularity

./jarvis -install go/1.18 com
./jarvis -install singularity/3.9.6 any

5.3 生成QE容器包

cd container
singularity build openeuler-kgcc9-openmpi4-qe-6.4.sif openeuler-kgcc9-openmpi4-qe-6.4.def

5.4 安装和容器同版本的MPI库

./jarvis -use templates/qe/6.4/data.qe.container.config
./jarvis -d -dp -e
source ./env.sh

5.5 运行容器(-np 后面的数字为核数,请按实际核数指定)

cd container
mpirun --allow-run-as-root -x OMP_NUM_THREADS=1 -np 96 singularity exec --pwd /hpcrunner/workloads/QE/qe-test openeuler-kgcc9-openmpi4-qe-6.4.sif /hpcrunner/q-e-qe-6.4.1/bin/pw.x -input test_3.in

欢迎贡献更多的HPC容器!

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/openeuler/hpcrunner.git
git@gitee.com:openeuler/hpcrunner.git
openeuler
hpcrunner
hpcrunner
master

搜索帮助