第二届先导杯-在曙光超算平台编译cp2k

本文介绍了具体的移植步骤,图文并茂地讲解了在2021年的cp2k赛题中,怎么移植cp2k8.1.0版本到曙光超算平台.

现在最新版本的cp2k已经加入了AMD GPU的支持,曙光平台是Mi50(ftx906)的。在文章的最后讲了怎么编译最新develop版本。

 

目录

第一步:下载cp2k8.1.0源码

第二步:运行toolchain安装所需的所有第三方库

2.1 第三方库介绍:

LAPACK(Linear Algebra PACKage)

ScaLAPACK

Libint

Libxc

Libxsmm

MPICH

2.2 安装过程

第三步:等待所有第三方库安装完成

3.1 如果遇到安装问题

第四步:编译最终的popt和psmp程序

编译GPU版本

成功编译cpu编译方法

遇到的问题


 

第一步:下载cp2k8.1.0源码

下载地址:https://download.csdn.net/download/kissgoodbye2012/19391454

编译参考视频:https://www.bilibili.com/video/av841812378/

第二步:运行toolchain安装所需的所有第三方库

2.1 第三方库介绍:

LAPACK(Linear Algebra PACKage)

——以Fortran编程语言写就,用于数值计算的函式集,解多元线性方程式、线性系统方程组的最小平方解、计算特征向量、用于计算矩阵QR分解的Householder转换、以及奇异值分解等问题。

ScaLAPACK

——并行分布式线性代数运算工具,是一个并行计算软件包,适用于分布式存储的 MIMD (multiple instruction, multiple data)并行计算机。它是采用消息传递机制实现处理器/进程间通信,因此使用起来和编写传统的 MPI 程序比较类似。ScaLAPACK 主要针对密集和带状线性代数系统,提供若干线性代数求解功能,如各种矩阵运算,矩阵分解,线性方程组求解,最小二乘问题,本征值问题,奇异值问题等,具有高效、可移植、可伸缩、高可靠性等优点,利用它的求解库可以开发出基于线性代数运算的并行应用程序。建立在一系列软件基础之上的,软件依赖关系如下:

其中的主要成分为:

  • BLAS (Basic Linear Algebra Subprograms),包含很多常用的线性代数运算子程序,如向量点积,矩阵和向量乘积,矩阵和矩阵乘积等;
  • LAPACK (Linear Algebra PACKage),包含一系列的程序,可以求解如线性方程组,最小二乘问题,本征值问题,奇异值问题等,通过调用 BLAS 完成大部分工作以获得高的运算性能;
  • BLACS (Basic Linear Algebra Communication Subprograms),是一个专门为线性代数运算而设计的消息传递库;
  • PBLAS (Parallel BLAS),为 ScaLAPACK 而设计的一个分布式内存 BLAS 库。

Libint

是一个用于计算分子量子力学中积分的软件堆栈。

Libxc

是一个用于密度泛函理论的交换相关泛函库。

Libxsmm

针对英特尔架构的小矩阵矩阵乘法库

MPICH

通过安装MPICH构建MPI编程环境,从而进行并行程序的开发。MPICH是MPI(Message-Passing Interface)的一个应用实现,支持最新的MPI-2接口标准,是用于并行运算的工具

2.2 安装过程

./install_cp2k_toolchain.sh --with-openmpi=install --math-mode=mkl --with-scalapack=no --with-mkl=/public/software/compiler/intel/intel-compiler-2017.5.239/mkl

注意:代码中--with-mkl=   是用来指定mkl库的位置的,这个位置可能在不同超算平台上不一样。需要你自己去找mkl库的路径,一般是在/public/software/compiler/intel/下。需要注意的是,路径要写到mkl为止,不能到它的下一级路径。

toolchain首先会从网上指定网址下载第三方库的安装包到toolchain文件夹下的build文件夹里,然后解压安装。

如上代码会安装的所有第三方库如下图所示:

 

见到Done! Now copy:就说明安装成功了。

第三步:等待所有第三方库安装完成

为什么要写这一步,因为第一次安装的时候确实时间太长,尤其是cmake,openmpi,libint等,需要耐心等待,且确保不会因为长时间未操作导致与超算的连接断开。

如果中间断开过一次,可能导致下载的第三方库安装包下载不完全,从而不能成功安装这个库。需要删除安装包重新开始上一步。

3.1 如果遇到安装问题

遇到这个问题的原因是你的网络不好,正常来说,toolchain会从如下网址下载第三方库的安装包

https://www.cp2k.org/static/downloads/

如果程序都从github下载了,说明网络太差了。解决方法是:需要删除build中的安装包重新开始上一步。

如果实在不行,就从上面的链接自己下载文件,然后传到build里面去。

第四步:编译最终的popt和psmp程序

如图三句代码,都是在cp2k-8.1.0的文件夹下运行的。完成后即完成了cp2k程序的编译.

编译GPU版本

1. 确认cuda正常

nvcc -V

nvcc: NVIDIA (R) Cuda compiler driver

Copyright (c) 2005-2020 NVIDIA Corporation

Built on Wed_Jul_22_19:09:09_PDT_2020

Cuda compilation tools, release 11.0, V11.0.221

Build cuda_11.0_bu.TC445_37.28845127_0

2. 下载CP2K7.1源码,在tool/toolchain目录下新建build目录,将提前下载好的第三方增强源码包及gcc的依赖包放置在该目录下

3. 执行

./install_cp2k_toolchain.sh --with-gcc=install --with-cmake=no --with-openmpi=install --with-plumed=install --with-sirius=no --with-hdf5=no --with-spfft=no --with-libvdwxc=no --with-gsl=no --enable-cuda --libint-lmax=6 --gpu-ver=V100

其中gpu-ver只有K20X, K40, K80, P100, V100,查询https://en.wikipedia.org/wiki/CUDA,选择一个和你显卡算力最接近的选项即可。

4. ELPA报错

修改install_elpa.sh文件

22 CUDA_PATH="/usr/local/cuda"

101,102行 及 127,128行

把${MATH_LDFLAGS} ${SCALAPACK_LDFLAGS} 

替换为-L'/home/codes/cp2k/gnu-cuda/cp2k-7.1/tools/toolchain/install/openblas-0.3.6/lib'  -L'/home/codes/cp2k/gnu-cuda/cp2k-7.1/tools/toolchain/install/scalapack-2.0.2/lib'

其中/home/codes/cp2k/gnu-cuda/cp2k-7.1根据情况修改

5.完成toolchain安装后,make -j 112 ARCH=local_cuda  VERSION=psmp 

6. 报错,没装numpy

 1114  yum install python-pip

 1115  pip install --upgrade pip

 1116  pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U

 1117  pip install pip -U

 1118  pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

 1119  pip install numpy

7.报错,找不到cuda.h

在arch/local_cuda.psmp中添加

CUDA_PATH="/usr/local/cuda"

8. 安装完成,执行测试

make -j 112 ARCH=local_cuda  VERSION=psmp test

结果

--------------------------------- Summary --------------------------------

Number of FAILED  tests 1337

Number of WRONG   tests 38

Number of CORRECT tests 1894

Number of NEW     tests 7

Total number of   tests 3276

GREPME 1337 38 1894 7 3276 X

成功编译cpu编译方法

//****************************************编译CPU版本cp2k     start***************************************
//第一步:上传cp2kfile2文件夹到用户目录下
//第二步:上传pypp文件夹到用户目录下
//第三步:上传cmake文件夹到用户目录下
//第四步:进入计算节点
salloc -N 1 -n 32 --gres=dcu:4 -p PilotCup
ssh a06r4n04(类似的名称)
//第五步:加载第三方库
module purge
module add compiler/devtoolset/7.3.1 mpi/hpcx/2.4.1/gcc-7.3.1 compiler/rocm/3.9.1 compiler/cmake/3.15.6 mathlib/fftw/3.3.8/single/gnu apps/anaconda3/5.2.0
//第六步:进入cp2k的toolchain目录下
cd ~/cp2kfile2/cp2k-8.1/tools/toolchain
//第七步:开始第三方库的编译
./install_cp2k_toolchain.sh --with-cmake=~/cmake --with-openmpi=/public/software/mpi/hpcx/v2.4.1/intel-2017.5.239 --math-mode=mkl --with-fftw=install --with-openblas=install --with-scalapack=install --with-libxsmm=install --with-elpa=no --with-hdf5=no --with-sirius=no --with-libvdwxc=no --with-spglib=no --with-spfft=no --with-libvori=no --with-mkl=/public/software/compiler/intel/intel-compiler-2017.5.239/mkl
//第八步:拷贝编译安装后的第三方库到cp2k目录下的arch文件夹内
cp ~/cp2kfile2/cp2k-8.1/tools/toolchain/install/arch/* ~/cp2kfile2/cp2k-8.1/arch/

source ~/cp2kfile2/cp2k-8.1/tools/toolchain/install/setup
//第九步:进入cp2k主目录下,开始编译CPU版本
cd ~/cp2kfile2/cp2k-8.1/
make -j 32 ARCH=local VERSION="psmp"

//****************************************编译CPU版本cp2k     end***************************************

//****************************************编译GPU版本cp2k     start***************************************
//第一步:拷贝local.psmp为local-hip.psmp
cp ~/cp2kfile2/cp2k-8.1/arch/local.psmp ~/cp2kfile2/cp2k-8.1/arch/local-hip.psmp
//第二步:修改local-hip.psmp
DFLAGS      = -D__ACC -D__DBCSR_ACC
LDFLAGS     = -L'/public/home/godeye2021/cp2kfile2/cp2k-8.1/exts/dbcsr-install/lib64' -Wl,-rpath='/public/home/godeye2021/cp2kfile2/cp2k-8.1/exts/dbcsr-install/lib64' -L'/public/software/compiler/rocm/rocm-3.9.1/lib' -Wl,-rpath='/public/software/compiler/rocm/rocm-3.9.1/lib' -L'/public/software/compiler/rocm/rocm-3.9.1/lib64' -Wl,-rpath='/public/software/compiler/rocm/rocm-3.9.1/lib64'
LIBS        =  -ldbcsr -ldbcsr_c -lamdhip64 -lhipblas -lrocblas
注意:将LDFLAGS 里面的两个/public/home/godeye2021/cp2kfile2写为你的路径

//第三步:重新添加模块
module purge
module add compiler/devtoolset/7.3.1 mpi/hpcx/2.4.1/gcc-7.3.1 compiler/rocm/3.9.1 mathlib/fftw/3.3.8/single/gnu compiler/intel/2017.5.239 apps/anaconda3/5.2.0 compiler/cmake/3.15.6
//第四步:编译HIP版本
make -j 32 ARCH=local-hip VERSION="psmp"

//****************************************编译GPU版本cp2k     end***************************************

//****************************************运行GPU版本cp2k     start***************************************
sbatch < HIPcp2k_runH2O256.slurm
sbatch < HIPcp2k_runH2Odft.slurm
//****************************************运行GPU版本cp2k     end***************************************

rocm-smi

遇到的问题

问题1:在官方的cp2k8.1中运行cp2k.popt -v
报错:
mbind: Invalid argument 
mbind: Invalid argument 
[1623041974.222337] [login10:48837:0]    ucp_context.c:601  UCX  WARN  device 'mlx5_1:1' is not available 
[1623041974.222466] [login10:48837:0]    ucp_context.c:601  UCX  WARN  device 'mlx5_2:1' is not available 
[1623041974.222595] [login10:48837:0]    ucp_context.c:601  UCX  WARN  device 'mlx5_3:1' is not available 
mbind: Invalid argument 
mbind: Invalid argument 
mbind: Invalid argument 
mbind: Invalid argument 
mbind: Invalid argument 
mbind: Invalid argument 
mbind: Invalid argument 
mbind: Invalid argument 
mbind: Invalid argument 
mbind: Invalid argument 
mbind: Invalid argument 
mbind: Invalid argument 
mbind: Invalid argument 
mbind: Invalid argument 
mbind: Invalid argument 
mbind: Invalid argument 
问题原因:需要在计算节点运行,而非登录节点
具体方法:使用如下代码登录计算节点
salloc -N 1 -n 32 --gres=dcu:4 -p PilotCup
ssh a06r3n10

问题2:make dbcsr的时候
报错:
Could NOT find MPI_CXX (missing: MPI_CXX_WORKS)
问题原因:没有加载环境变量
具体方法:
export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:/public/home/godeye2021/cp2kfile2/cp2k-8.1/tools/toolchain/install/libxsmm-1.16.1/lib"
export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:/public/home/godeye2021/cp2kfile2/cp2k-8.1/tools/toolchain/install/scalapack-2.1.0/lib"
export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:/public/software/mpi/hpcx/v2.4.1/intel-2017.5.239/lib"
export FYPP_EXECUTABLE=/public/home/godeye2021/pypp/fypp-3.1/bin/fypp
export ROCM_PATH=/public/software/compiler/rocm/rocm-3.9.1
export HIP_PATH=$ROCM_PATH/hip
export LLVM_PATH=$ROCM_PATH/llvm
export HIP_DEVICE_LIB_PATH=$ROCM_PATH/amdgcn/bitcode

问题3:
报错:
raise FyppFatalError(msg, self._curfile, span) from exc
SyntaxError: invalid syntax
问题原因:src只有文件夹,里面没有.F文件
具体方法:拷贝src文件夹

问题4:
报错:
找不到 -ldbcsr_c
问题原因:LDFLAGS里面不能使用~/的简写方法,需要写全地址
具体方法:
DFLAGS      = -D__ACC -D__DBCSR_ACC
LDFLAGS     = -L'/public/home/godeye2021/cp2kfile2/cp2k-8.1/exts/dbcsr-install/lib64' -Wl,-rpath='/public/home/godeye2021/cp2kfile2/cp2k-8.1/exts/dbcsr-install/lib64' -L'/public/software/compiler/rocm/rocm-3.9.1/lib' -Wl,-rpath='/public/software/compiler/rocm/rocm-3.9.1/lib' -L'/public/software/compiler/rocm/rocm-3.9.1/lib64' -Wl,-rpath='/public/software/compiler/rocm/rocm-3.9.1/lib64'
LIBS        =  -ldbcsr -ldbcsr_c -lamdhip64 -lhipblas -lrocblas

问题5:
报错:
/public/home/godeye2021/cp2ksource/exts/dbcsr/.cp2k/Makefile:229: *** "No FYPP submodule available, please read README.md on how to properly download DBCSR".  Stop.
问题原因:exts目录下dbcsr.inc中没有定义fypp的路径
具体方法:
添加如下
FYPPEXE=/public/home/godeye2021/pypp/fypp-3.1/bin/fypp

问题6:
报错:
File "/public/home/godeye2021/pypp/fypp-3.1/bin/fypp", line 711     raise FyppFatalError(msg, self._curfile, span) from exc                                                       ^ SyntaxError: invalid syntax
问题原因:build里面的src文件夹内容为空
具体方法:
拷贝src文件夹到build里面的src文件夹内

问题7:
报错:
/public/home/godeye2021/cp2ksource/exts/dbcsr/build/src/acc/dbcsr_acc_devmem.F:490:0:   #:set instances = [ ('i4', 'int_4_size',    'INTEGER(kind=int_4)'), &   Error: invalid preprocessing directive #:
问题原因:生成的src和自带的src是不同的,不能直接复制。主要原因还是cmake没有做好
具体方法:
重新cmake

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kissgoodbye2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值