本文介绍了具体的移植步骤,图文并茂地讲解了在2021年的cp2k赛题中,怎么移植cp2k8.1.0版本到曙光超算平台.
现在最新版本的cp2k已经加入了AMD GPU的支持,曙光平台是Mi50(ftx906)的。在文章的最后讲了怎么编译最新develop版本。
目录
LAPACK(Linear Algebra PACKage)
第一步:下载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