计算化学公社

 找回密码 Forget password
 注册 Register
Views: 8678|回复 Reply: 10
打印 Print 上一主题 Last thread 下一主题 Next thread

[VASP] 在AMD机器上安装DFT计算软件VASP.6.2.0简明教程

[复制链接 Copy URL]

1

帖子

0

威望

36

eV
积分
37

Level 2 能力者

本帖最后由 DeeliN 于 2022-6-10 17:01 编辑

本文先前已在Bilibili发表
1. 背景介绍

VASP是最流行的密度泛函理论(DFT)计算软件之一,在凝聚态物理和计算化学领域应用广泛。
英特尔处理器在超算领域一家独大的时代已经过去,各大高校和超算中心有不少新购的计算工作站都是采用AMD的CPU来搭建的。
然而,VASP在开发阶段就主要考虑英特尔平台,官网的安装教程也重点聚焦英特尔处理器,针对AMD处理器的教程尚未更新。
此前,AMD的CPU上很难编译出可以正常运行的VASP,更别提效率问题了。
在AMD的CPU上可以使用AMD自家的编译器AOCC和数学库AOCL以提高运行效率,然而网上少有此类教程。
本文将尽量简化编译复杂度,争取花最少的时间编译出在运行Ubuntu20.04的AMD的CPU上高效的VASP程序,其他Linux操作系统以及其他AMD的CPU请类推。

如果您有兴趣,请花几分钟时间细读。

本文主要参考AMD开发者页面VASP安装教程,开始之前,要特别感谢AMD技术团队的指导以及对编译脚本的自动化,才让我们可以这么方便地完成安装。
spack常用命令简述spack文档

2. 几个小命令
在计算工作站上安装时,建议使用root用户,运行时则切换回普通用户。
  1. sudo -i
复制代码
2.1. 安装spack包管理软件
spack 类似 Environment Modules,是环境管理软件,是软件安装和管理的神器,我们要借助它完成快速安装。
先将它安装到某个路径,比如/opt/spack:
  1. export SPACK_ROOT=/opt/spack
  2. git clone -c feature.manyFiles=true https://github.com/spack/spack.git ${SPACK_ROOT}
  3. source ${SPACK_ROOT}/share/spack/setup-env.sh
  4. spack --help
复制代码
2.2. 安装AOCC编译器套装
AOCC 是 AMD 针对自家 CPU 着力优化的编译器,对标 GCC 和英特尔的 oneAPI中的编译器组合。
  1. # 最新版的是3.2.0,如有更新请考虑更改数字
  2. spack install -v aocc@3.2.0 +license-agreed
复制代码
将弹出协议文档,用 ZZ 命令关闭即可。
aocc@3.2.0 添加到编译器列表中:
  1. spack cd -i aocc@3.2.0
  2. spack compiler add $PWD
  3. # 检查 aocc@3.2.0 是否在列表中
  4. spack compilers
复制代码
3. 安装 VASP.6.2.0注意VASP是受版权保护的,把vasp.6.2.0.tgz安装包放到~路径下,安装程序后续将尝试寻找并读取。
请勿做任何修改,否则后续检查文件完整性将失败导致安装受阻。
先加载 aocc@3.2.0,确保后续编译均基于此编译器,而不是系统默认的其他编译器。
  1. spack load aocc@3.2.0
  2. # 16 个核并行就够了,再多有可能反而导致安装受阻
  3. # 我的机器是 EPYC7742,基于zen2架构,如果你的机器是zen3,则修改为zen3
  4. spack -d install -v -j 16 vasp@6.2.0 +scalapack +openmp %aocc@3.2.0 target=zen2 ^amdfftw@3.1 ^amdblis@3.1 threads=openmp ^amdlibflame@3.1 ^amdscalapack@3.1 ^openmpi@4.1.1 fabrics=auto
复制代码
会自动安装amdfftw@3.1, amdblis@3.1, amdlibflame@3.1 和 amdscalapack,总计将耗时一个小时左右,请耐心等待。
如果出现如下错误,不能正常安装:
  1. ==> [2022-04-17-15:47:30.194861] amdblis: Executing phase: 'build'
  2. ==> [2022-04-17-15:47:30.196223] 'make' '-j16'
  3. Generating monolithic blis.hPython path configuration:
  4.   PYTHONHOME = '/usr'
  5.   PYTHONPATH = (not set)
  6.   program name = 'python'
  7.   isolated = 0
  8.   environment = 1
  9.   user site = 1
  10.   import site = 1
  11.   sys._base_executable = '/usr/local/miniconda39/bin/python'
  12.   sys.base_prefix = '/usr'
  13.   sys.base_exec_prefix = '/usr'
  14.   sys.platlibdir = 'lib'
  15.   sys.executable = '/usr/local/miniconda39/bin/python'
  16.   sys.prefix = '/usr'
  17.   sys.exec_prefix = '/usr'
  18.   sys.path = [
  19.     '/usr/lib/python39.zip',
  20.     '/usr/lib/python3.9',
  21.     '/usr/lib/python3.9/lib-dynload',
  22.   ]
  23. Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
  24. Python runtime state: core initialized
  25. ModuleNotFoundError: No module named 'encodings'
复制代码
解决方案如下:- 将 spack 升级到最新版 0.18.0.dev
  1. cd /opt/spack
  2. git pull
复制代码
- 打开 ~/.spack/packages.yaml 文件以编辑
  1. spack config edit packages
复制代码
- 删除 Python 包的信息,vi 命令行模式用上下箭头移动光标到特定行,dd 删除即可,最后 :wq 保存;重新安装
  1. <div># 加载相应的数学库</div><div>spack load aocc@3.2 amdfftw@3.1 amdblis@3.1 amdlibflame@3.1 amdscalapack@3.1 openmpi@4.1.1</div><div># 开始安装 VASP</div><div>spack -d install -v -j 16 vasp@6.2.0 +scalapack +openmp %aocc@3.2.0 target=zen2 ^amdfftw@3.1 ^amdblis@3.1 threads=openmp ^amdlibflame@3.1 ^amdscalapack@3.1 ^openmpi@4.1.1 fabrics=auto</div>
复制代码

- 最后,应当可以看到安装成功的提示:
  1. vasp: Successfully installed vasp-6.2.0-***
复制代码

4. 测试
4.1. 环境设置
加载 vasp.6.2.0 和 aocc.3.2.0 并检查链接的动态库
  1. spack load vasp@6.2.0 %aocc@3.2.0
  2. ldd /opt/spack/opt/spack/linux-ubuntu20.04-zen2/aocc-3.2.0/vasp-6.2.0-yopqxc7troimc2lr7wntxffwm5gp7cy4/bin/vasp_std
复制代码
输出大致如下,检查每一项都有被正常连接到
  1. linux-vdso.so.1 (0x00007ffcbf7b2000)
  2. libscalapack.so => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/aocc-3.2.0/amdscalapack-3.1-hcirhglktisqarc6qkrdf5gnxmlg4jke/lib/libscalapack.so (0x000014e0e8968000)
  3. libflame.so.3 => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/aocc-3.2.0/amdlibflame-3.1-gc3bifimj3i7ulbmxcca634tfdiwbdg3/lib/libflame.so.3 (0x000014e0e7a8d000)
  4. libblis-mt.so.3 => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/aocc-3.2.0/amdblis-3.1-yixmcbvx7sep665k4t7r3vfkw65bmlul/lib/libblis-mt.so.3 (0x000014e0e7717000)
  5. libfftw3.so.3 => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/aocc-3.2.0/amdfftw-3.1-f2n3bogn46suxl6h5p7ncenjiddlxnes/lib/libfftw3.so.3 (0x000014e0e7166000)
  6. libfftw3_omp.so.3 => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/aocc-3.2.0/amdfftw-3.1-f2n3bogn46suxl6h5p7ncenjiddlxnes/lib/libfftw3_omp.so.3 (0x000014e0e715d000)
  7. libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x000014e0e6f61000)
  8. libmpi_usempif08.so.40 => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/aocc-3.2.0/openmpi-4.1.1-yt5cmjjwsgn6r6jvonybmkdcyjl5rjbo/lib/libmpi_usempif08.so.40 (0x000014e0e6f1a000)
  9. libmpi_usempi_ignore_tkr.so.40 => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/aocc-3.2.0/openmpi-4.1.1-yt5cmjjwsgn6r6jvonybmkdcyjl5rjbo/lib/libmpi_usempi_ignore_tkr.so.40 (0x000014e0e6f0e000)
  10. libmpi_mpifh.so.40 => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/aocc-3.2.0/openmpi-4.1.1-yt5cmjjwsgn6r6jvonybmkdcyjl5rjbo/lib/libmpi_mpifh.so.40 (0x000014e0e6ea3000)
  11. libmpi.so.40 => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/aocc-3.2.0/openmpi-4.1.1-yt5cmjjwsgn6r6jvonybmkdcyjl5rjbo/lib/libmpi.so.40 (0x000014e0e6c0b000)
  12. libflang.so => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/gcc-9.3.0/aocc-3.2.0-a6zip2yo4vgubg5u6i6is5ufrcighzst/lib/libflang.so (0x000014e0e67eb000)
  13. libflangrti.so => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/gcc-9.3.0/aocc-3.2.0-a6zip2yo4vgubg5u6i6is5ufrcighzst/lib/libflangrti.so (0x000014e0e67dc000)
  14. libpgmath.so => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/gcc-9.3.0/aocc-3.2.0-a6zip2yo4vgubg5u6i6is5ufrcighzst/lib/libpgmath.so (0x000014e0e639d000)
  15. libquadmath.so.0 => /lib/x86_64-linux-gnu/libquadmath.so.0 (0x000014e0e6353000)
  16. libomp.so => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/gcc-9.3.0/aocc-3.2.0-a6zip2yo4vgubg5u6i6is5ufrcighzst/lib/libomp.so (0x000014e0e6070000)
  17. libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x000014e0e5f21000)
  18. librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x000014e0e5f17000)
  19. libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x000014e0e5ef2000)
  20. libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x000014e0e5ed7000)
  21. libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x000014e0e5ce5000)
  22. libompstub.so => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/gcc-9.3.0/aocc-3.2.0-a6zip2yo4vgubg5u6i6is5ufrcighzst/lib/libompstub.so (0x000014e0e5cdc000)
  23. /lib64/ld-linux-x86-64.so.2 (0x000014e0e8f35000)
  24. libopen-rte.so.40 => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/aocc-3.2.0/openmpi-4.1.1-yt5cmjjwsgn6r6jvonybmkdcyjl5rjbo/lib/libopen-rte.so.40 (0x000014e0e5bc9000)
  25. libopen-orted-mpir.so => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/aocc-3.2.0/openmpi-4.1.1-yt5cmjjwsgn6r6jvonybmkdcyjl5rjbo/lib/libopen-orted-mpir.so (0x000014e0e5bc4000)
  26. libopen-pal.so.40 => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/aocc-3.2.0/openmpi-4.1.1-yt5cmjjwsgn6r6jvonybmkdcyjl5rjbo/lib/libopen-pal.so.40 (0x000014e0e5992000)
  27. libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x000014e0e598c000)
  28. libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x000014e0e5987000)
  29. libz.so.1 => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/aocc-3.2.0/zlib-1.2.12-2rn4z7rmbu76lguvwdxxtuvq5ekuCV4y/lib/libz.so.1 (0x000014e0e596c000)
  30. libhwloc.so.15 => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/aocc-3.2.0/hwloc-2.7.1-mhxd7qlcqkboseurq2v7p3bnlzyic5xr/lib/libhwloc.so.15 (0x000014e0e590f000)
  31. libevent_core-2.1.so.7 => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/aocc-3.2.0/libevent-2.1.12-sugha6eb5ngic3g6rvgntehh2tftwtkl/lib/libevent_core-2.1.so.7 (0x000014e0e58d7000)
  32. libevent_pthreads-2.1.so.7 => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/aocc-3.2.0/libevent-2.1.12-sugha6eb5ngic3g6rvgntehh2tftwtkl/lib/libevent_pthreads-2.1.so.7 (0x000014e0e58d2000)
  33. libpciaccess.so.0 => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/aocc-3.2.0/libpciaccess-0.16-uxbxrlcqyu2mmb7toz43b2wft4qe5q4v/lib/libpciaccess.so.0 (0x000014e0e58c5000)
  34. libxml2.so.2 => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/aocc-3.2.0/libxml2-2.9.12-smjqtjvyouf3p2gjblb5j5wxmgma3baf/lib/libxml2.so.2 (0x000014e0e574f000)
  35. libiconv.so.2 => /opt/spack/opt/spack/linux-ubuntu20.04-zen2/aocc-3.2.0/libiconv-1.16-cyeood53nsd4eoxjzukokmv3zbkwjoyq/lib/libiconv.so.2 (0x000014e0e5654000
复制代码
很好!先别急着退出root,普通用户在spack加载时会出现找不到编译器的问题,需要手动设置一下。
  1. # root用户查找机器上的编译器,注意输出显示的yaml文件路径
  2. spack compiler find # -> /root/.spack/linux/compilers.yaml
  3. # 复制到用户user1的 ~/.spack/linux/compilers.yaml 下,否则可能找不到编译器
  4. cp /root/.spack/linux/compilers.yaml /home/user1/.spack/linux/compilers.yaml
复制代码


4.2. 标准算例测试
退出 root 用户,使用普通用户进行算例测试。
在进行VASP6内置的算例测试时,先把刚编译好的vasp执行程序链接到特定路径下:

  1. # 把vasp.6.2.0.tgz压缩包放到文件夹下,如 ~/test
  2. cd ~/test
  3. tar -xvzf vasp.6.2.0.tgz
  4. cd vasp.6.2.0
  5. # 创建软链接
  6. ln -s /opt/spack/opt/spack/linux-ubuntu20.04-zen2/aocc-3.2.0/vasp-6.2.0-yopqxc7troimc2lr7wntxffwm5gp7cy4/bin/vasp_std bin/vasp_std
  7. ln -s /opt/spack/opt/spack/linux-ubuntu20.04-zen2/aocc-3.2.0/vasp-6.2.0-yopqxc7troimc2lr7wntxffwm5gp7cy4/bin/vasp_gam bin/vasp_gam
  8. ln -s /opt/spack/opt/spack/linux-ubuntu20.04-zen2/aocc-3.2.0/vasp-6.2.0-yopqxc7troimc2lr7wntxffwm5gp7cy4/bin/vasp_ncl bin/vasp_ncl

  9. # 加载 vasp.6.2.0 和 aocc.3.2
  10. spack load vasp@6.2.0 %aocc@3.2 # 初次加载需要数秒,请耐心等待
  11. which vasp_std # 检查vasp_std是否正常加载,路径是否正常
  12. which mpirun # 检查mpirun路径
  13. nohup make test > testResult.txt& # 耐心等待测试完成,大约十几分钟
复制代码
5. 不足
测试结果显示 SiC8_GW0R step GW算例出错1Error in SOLVE_NONLS, weight is negative: 13 NaN NaN,处理相应的GW计算时或许得采用其他的vasp程序。
这种方法暂时无法安装VTST(https://theory.cm.utexas.edu/vtsttools/installation.html)和VASPsol(https://github.com/henniggroup/VASPsol)等程序


6. 总结
用户不必去理会编译时极其繁杂恼人的参数设置,尤其是 MPI 与 fortran 的绑定以及 VASP 安装时 makefile.include 参数的仔细校对,可以节省大量时间。
安装的VASP与使用英特尔 oneAPI 套餐编译出来的VASP相比,一些简单算例的速度提升显著!
不同算例内部对函数的调用情况不同,采用不同编译器运行将体现不同效率。 实测有的算例使用英特尔的 oneAPI 运行效率更高,即使是在AMD的CPU上!
对于大型计算,有必要做小型测试,先跑几个电子步然后杀掉进程,对比不同编译器运行的速度。




评分 Rate

参与人数
Participants 2
eV +10 收起 理由
Reason
qinsc + 5 谢谢分享
biogon + 5

查看全部评分 View all ratings

1236

帖子

1

威望

3495

eV
积分
4751

Level 6 (一方通行)

2#
发表于 Post on 2022-6-10 19:36:57 | 只看该作者 Only view this author
这个不借助spack编是不是会很麻烦

1

帖子

0

威望

36

eV
积分
37

Level 2 能力者

3#
 楼主 Author| 发表于 Post on 2022-6-12 23:05:49 | 只看该作者 Only view this author
biogon 发表于 2022-6-10 19:36
这个不借助spack编是不是会很麻烦

传统方法要自己下载安装AOCC+AOCL,然后解压vasp压缩包修改makefile.include这个文件里的参数细节,错一个都不行。按这个教程只需要复制几条命令回车就OK了

3

帖子

0

威望

31

eV
积分
34

Level 2 能力者

4#
发表于 Post on 2023-2-18 15:34:53 | 只看该作者 Only view this author
老师您好我不管使用那个版本的vasp都会有这个错误不知道为什么

202302181534286607..png (63.66 KB, 下载次数 Times of downloads: 41)

202302181534286607..png

3

帖子

0

威望

31

eV
积分
34

Level 2 能力者

5#
发表于 Post on 2023-2-18 15:56:06 | 只看该作者 Only view this author
或者就是这个问题

202302181555589164..png (102.54 KB, 下载次数 Times of downloads: 20)

202302181555589164..png

328

帖子

0

威望

1916

eV
积分
2244

Level 5 (御坂)

6#
发表于 Post on 2023-2-18 18:24:07 | 只看该作者 Only view this author

spack,因为巨大墙的原因,很容易断网,导致相关的库文件安装不成功。

3

帖子

0

威望

31

eV
积分
34

Level 2 能力者

7#
发表于 Post on 2023-2-19 17:59:23 | 只看该作者 Only view this author
gog 发表于 2023-2-18 18:24
spack,因为巨大墙的原因,很容易断网,导致相关的库文件安装不成功。

是这样啊!但是有个问题我昨天整了一天,在相同核数相同体系下好像intel比AMD的定制版快十几倍,这是怎么回事你?尤其在大体系的情况下

328

帖子

0

威望

1916

eV
积分
2244

Level 5 (御坂)

8#
发表于 Post on 2023-2-20 08:15:33 | 只看该作者 Only view this author
雪陌忧伤 发表于 2023-2-19 17:59
是这样啊!但是有个问题我昨天整了一天,在相同核数相同体系下好像intel比AMD的定制版快十几倍,这是怎么 ...

你的AMD spack 版的vasp都没配置好,对比结果不准确,无意义吧

15

帖子

0

威望

854

eV
积分
869

Level 4 (黑子)

9#
发表于 Post on 2023-5-10 11:24:03 | 只看该作者 Only view this author
你好,编译完成之后运行该如何设置运行参数,官方文档中"mpirun -np 32 -x OMP_NUM_THREADS=4 --map-by ppr:2:l3cache:pe=4 --bind-to core -x UCX_TLS=self,sm,rc_x $vasp"这些参数该如何修改

3

帖子

0

威望

23

eV
积分
26

Level 2 能力者

10#
发表于 Post on 2023-10-12 12:27:53 | 只看该作者 Only view this author
你好,第三步运行完报出这样的错误。

202310121227463094..png (127.32 KB, 下载次数 Times of downloads: 14)

202310121227463094..png

4

帖子

0

威望

252

eV
积分
256

Level 3 能力者

11#
发表于 Post on 2024-10-5 19:17:56 | 只看该作者 Only view this author
DeeliN 发表于 2022-6-12 23:05
传统方法要自己下载安装AOCC+AOCL,然后解压vasp压缩包修改makefile.include这个文件里的参数细节,错一 ...

老师,可以问一下传统amd cpu makefile.include文件的参数吗

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-23 13:39 , Processed in 0.602545 second(s), 31 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list