首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GPU版GAMESS的快速安装

GPU版GAMESS的快速安装

作者头像
用户7592569
发布2021-07-16 17:09:57
8920
发布2021-07-16 17:09:57
举报
文章被收录于专栏:量子化学量子化学

本文讲介绍如何用容器技术(Docker)快速安装GPU版GAMESS,并演示如何进行实际计算。

1. GPU版本的GAMESS

GPU版GAMESS其实是加装了量子化学计算库LibCChem的GAMESS。据介绍,LibCChem库只承担了量化计算中很耗时的部分,例如积分计算、临时数据存储等。自洽场迭代收敛等一些框架仍然由GAMESS主体控制。 LibCChem不仅有GPU加速的代码,也用Global array(GA)的共享内存机制进行并行代码编写。同时,也采用了HDF5文件存储方式,可以并行I/O以及在内存中写临时文件。总之,LibCChem利用了很多新的编程技术对GAMESS进行加速。LibCChem手册中介绍,他们对HF, MP2以及CCSD(T)计算进行了加速。

这些新的技术,意味着用户需要额外安装一些库。例如,用户需要安装HDF5,Boost(C++的一个大库),eigen(C++线性代数库)。当然GAMESS也需要Fortran编译器、数学库、并行环境等。安装这么多库是很耗费精力的,特别是在没有外部联网的情况下。

容器技术解决了上述难题。

2. 容器技术简介

开发者会尝试将一套工具完整打包并且分发给用户,让用户直接使用。这种打包就是容器技术。打包过程中,程序本身,所依赖的库,甚至是操作系统的部分组件都被打成一个包。用户拿到这个包,直接用就可以。打包可以用Docker、Singularity等工具实现。本文将介绍用Docker安装LibCChem+GAMESS。

GPU的软件环境不太容易容器化。Docker在19版本之后,加入了对Nvidia运行环境的支持,容器中的程序也可以轻松跑GPU了。但用户仍需要提前安装显卡驱动(不安装,显卡也没法用)。

用户只需关注怎么下载这个包(被称为镜像,image)以及这个包怎么用。

3. 镜像的下载与使用

安装前,用户需要满足以下条件:

  • 比较新的docker(20.10版本最佳。不能早于19)
  • Nvidia显卡(AMD显卡没有相关资料),并且知道显卡架构。
  • CUDA driver version >= 384.81 ,建议新一些的版本,我用的是455.32版本。

很多镜像被打包后,都会选择存在DockerHub里。LibCChem+GAMESS也存在这里面,是被一个叫afandiadib的开发者打包并上传的。我用的显卡是Kepler架构的GTX 780显卡,需要Kepler架构的版本,下载指令如下:

docker pull afandiadib/gamess:cuda-9.0-Kepler

如果您用的是Pascal以及Volta架构,建议从Nvidia官方镜像库中下载,Nvidia也许会专门针对不同架构进行进一步优化:

docker pull nvcr.io/hpc/gamess:17.09-r2-libcchem

如果您用的是其他架构的显卡如Ampere,Turing,可以尝试早一些架构的版本,也许能兼容。

afandiadib/gamess镜像压缩前有2.81GB,解压后足足有7.79GB。

以afandiadib/gamess为例进行讲解,如何用镜像进行计算。我们可以进入容器(container),在容器中运行GAMESS。运行如下指令:

docker run --gpus all  -it afandiadib/gamess:cuda-9.0-kepler bash

--gpus all 代表启动所有显卡,-it 代表交互式启动容器,执行容器的bash 命令,即进入容器bash。进入容器后,看到左下角,是root身份。值得注意的是,此时,容器内部与外部的文件并不互通,是完全隔离的。发布者将软件安装到了/opt下,可以在里面找到GAMESS。同时发布者将原先的rungms改为了gms-cchemgms-cpu两个指令。gms-cchem 启动GPU版本的GAMESS+LibCChem,gms-cpu 启动传统GAMESS。我们准备好输入文件TEST.inp。如果我们要用4个核心,只需执行,

gms-cchem TEST 01 4

01是版本号,只有01版本。4代表核心数。LibCChem采用MPI/OpenMP混合并行方式,建议指定NUM_OMP_THREADS,export NUM_OMP_THREADS=$N。运行后,可以执行nvidia-smi监控显卡运行状态。

除了进入容器内运行GAMESS外。我们也可以用容器内的GAMESS执行外部的输入文件。例如输入文件存在当前工作目录下,它叫TEST.inp,我们执行:

docker run --gpus all -v $(pwd):/root --rm -it afandiadib/gamess:cuda-9.0-kepler bash -c 'cd /root && gms-cchem TEST 01 4' > out

-v $(pwd):/root 表示将当前目录投射到镜像内部的/root路径中。bash -c 'cd /root && gms-cchem TEST 01 4' 表示在镜像中执行一串指令,即先进入/root ,再运行gms-cchem 。结果重定向到out文件中。

请不要被上述一连串指令与标签吓到,简单学习Docker后便可以轻松上手。

4.性能对比

GPU的加速效果比较明显的。我对比了纯GAMESS,GPU加持的LibCChem(LibCChem+GPU),以及无GPU的GAMESS+LibCChem(LibCChem+CPU)的计算总时间(wall time)。处理器是Xeon 2696V2,显卡是GTX780。HF计算的测试中,所有计算都使用八个进程,每个进程开启一个线程。MP2与CCSD(T)计算的测试中,原生GAMESS采取八个进程并行,libCChem计算采用一个进程,每个进程带8个线程。

测试结果上看,libCChem对三种类型计算都有一定的加速,对HF计算的加速最明显。显卡会减少计算时间,HF计算,减少的时间更明显。

5.讨论

5.1 LibCChem的问题

很多人用GAMESS通常是为了进行能量分解或者EFP、FMO、CIM计算等。如果上述功能依赖老版本GAMESS的ddikick并行机制,那么可能没法使用LibCChem进行加速。我测试能量分解遇到这样问题。对于HF、MP2以及CCSD(T),用一块普通显卡节省一定的计算时间还是划算的。LibCChem并没有对XC积分进行加速,这也是一点遗憾。

MP2能量计算部分,不是MPI多进程并行,需要使用者注意,尽量用多指定线程而少开启进程。

在测试中发现,LibCChem并没用完全用尽显卡的性能,显存只用了500MB左右。

5.2 Docker 容器中运行效率问题

我没有自己编译GAMESS+libCChem,因此没有对比Docker容器中运行程序的效率问题。从原理上讲,Docker不会比自己编译版本慢很多。另外如果打包镜像的人仔细搭配了编译器或软件库,那么容器中效率也许会比自己编译的效率高。IBM的一个研究文档讨论过Docker效率问题。例如下图的Linpack测试和随机内存读写测试,Docker效率跟Native运行没有区别,虚拟机KVM则慢了不少。

IBM研究文档地址:https://dominoweb.draco.res.ibm.com/reports/rc25482.pdf

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量子化学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. GPU版本的GAMESS
  • 2. 容器技术简介
  • 3. 镜像的下载与使用
  • 4.性能对比
  • 5.讨论
    • 5.1 LibCChem的问题
      • 5.2 Docker 容器中运行效率问题
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档