Ubuntu安装GPU版VASP6.4.3(含NVIDIA显卡驱动安装更新)

安装VASP之前需要具备三个条件:编译器、数据库和并行计算程序(参见官网:Installing VASP.6.X.X - VASP Wiki),本人选择如下图所示。因此只需要安装intel-oneapi-mkl和NVIDIA HPC-SDK。

一、安装intel-oneapi-mkl

下载地址:https://www.intel.cn/content/www/cn/zh/developer/tools/oneapi/base-toolkit-download.html?operatingsystem=linux&linux-install-type=offline

选择online installer或offline installer,通过wget命令下载,然后安装,安装界面自动打开,勾选协议,点击customise自定义,只勾选Math Kernel Library (MKL)

wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/9a98af19-1c68-46ce-9fdd-e249240c7c42/l_BaseKit_p_2024.2.0.634_offline.sh

sh l_BaseKit_p_2024.1.0.596.sh

安装好后,通过如下命令设置激活环境变量:

source ~/intel/oneapi/mkl/2024.2/env/vars.sh 

注意:若之前通过intel oneapi安装过CPU版本VASP,则表明已经对MKL库进行了编译(make libintel64)(参见vasp6.3.2安装包及安装步骤_vasp下载-CSDN博客)。此时若直接用编译过的MKL库,后面通过NVIDIA HPC-SDK编译VASP将会报错。由于本人安装GPU版本VASP之前,已经安装过CPU版本VASP,所以已经对MKL库进行了编译,导致编译VASP报错,而且此错误很少出现,网上也没找到相关问题,折腾了很久才发现此问题

二、安装NVIDIA HPC-SDK

安装NVIDIA之前需具备NVIDIA驱动和CUDA,一般情况下电脑已经安装了NVIDIA驱动,但没有安装CUDA。

首先查看NVIDIA驱动的版本,以及所支持的CUDA版本。

nvidia-smi

如下图所示,本人的NVIDIA驱动版本为535.183.01,CUDA最大支持的版本为12.2。若输入nvidia-smi未得到下图信息,表明驱动未安装,需要安装驱动,下文会讲如何安装驱动。若出现错误提示: nvidia-smi has failed because it couldn't communicate with the NVIDIA driver,表明安装的驱动版本与系统内核版本不一致,需要重新安装驱动或系统内核,使他们的版本匹配。

确定好驱动后,检查CUDA版本。

nvcc -V

如下图所示,本人安装的版本为12.2.140。如果此处得到的版本高于12.2,比如本人之前安装了12.5版本,高于了驱动所支持的版本,将会影响cuda的使用,需要重新安装cuda。

1. 安装NVIDIA驱动

1)禁止nouveau驱动

在安装NVIDIA驱动前需要禁止系统自带显卡驱动nouveau,首先查看nouveau驱动运行情况:

lsmod | grep nouveau

输入命令后,若无任何输出,表明nouveau驱动已被禁止,若有输出,则表明其正在工作,需要手动禁止。

sudo gedit /etc/modprobe.d/blacklist.conf

通过vi或gedit在编辑blacklist.conf文件,其文件末尾加入下面两行:

blacklist nouveau

options nouveau modeset=0

然后,更新应用更改,并重启电脑

sudo update-initramfs -u

sudo reboot

重启后,即可开始安装NVIDIA驱动。

2)安装nvidia-driver

方法一:通过系统自带的“软件和更新”界面安装。

打开软件和更新(Softwares & Updates)-> 附加驱动(Additional Drivers)-> 选择NVIDIA驱动 -> 应用更改 (Apply Changes)。该界面会自动根据电脑上的GPU显示推荐的NVIDIA显卡驱动,安装完成后需要重启电脑。

此方法最简单,但可选择往往不是最新的版本。

方法二:通过apt安装。

此方法安装的本质与方法一相同 ,但对于远程登陆的用户,无法打开“软件和更新”界面,因此可选择此方法进行安装。

首先终端输入:

ubuntu-drivers devices

输出内容与“软件和更新”界面的内容基本一致。找到系统推荐的版本。

然后通过apt安装系统推荐的版本,并重启电脑。

sudo apt install nvidia-driver-535

sudo reboot

方法三:官网下载安装。

上述两种方法安装的驱动版本往往不是最新版本,若想安装新版本,或升级版本,可采用此方法。

此方法安装/更新驱动之前,需要卸载旧的驱动。

sudo apt --purge remove nvidia*
sudo apt purge nvidia*
sudo apt purge libnvidia*
sudo apt autoremove

卸载完后可通过如下命令检查卸载情况

sudo dpkg --list | grep nvidia-*

进入官网( NVIDIA GeForce 驱动程序 - N 卡驱动 | NVIDIA),根据自己显卡版本和系统版本选择合适的驱动,下载获取NVIDIA-Linux-x86_64-xxx.xx.run文件,并通过下列命令进行安装。

sudo sh NVIDIA-Linux-x86_64-xxx.xx.run -no-x-check -no-nouveau-check -no-opengl-files

本方法缺点:通过此方法安装可能会报错,需要一一解决。下载的版本可能与电脑系统所支持的版本不匹配也会安装失败。因此,需要谨慎选择此方法。

2. 安装CUDA

 安装CUDA前,安装必要的依赖库文件

sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev

进入官网 https://developer.nvidia.com/cuda-toolkit-archive,选择合适的版本(前面已提到,通过nvidia-smi查看系统所支持的最大版本),本人系统最大支持12.2版本,所以选择下载CUDA Toolkit 12.2.2版本。

选择好版本后,获得下载和安装命令

wget https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda_12.2.2_535.104.05_linux.run
sudo sh cuda_12.2.2_535.104.05_linux.run

运行命令后,进入安装界面,选择“continue",然后输入”accept"

然后将“Driver”选项去掉,因为前面已经安装好了驱动。然后选择“Install"开始安装。

安装完成后,在.bashrc中设置环境变量

export PATH=$PATH:/usr/local/cuda/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64

source ~/.bashrc后,即可通过nvcc -V检查cuda版本信息。

3. 安装HPC-SDK

进入官网(https://developer.nvidia.com/nvidia-hpc-sdk-releases)下载HPC-SDK安装包。根据cuda版本,选择hpc-sdk版本,本人cuda版本为12.2,因此选择了hpc sdk 23.9。

通过命令,下载、解压并安装

wget https://developer.download.nvidia.com/hpc-sdk/23.9/nvhpc_2023_239_Linux_x86_64_cuda_12.2.tar.gz
tar xpzf nvhpc_2023_239_Linux_x86_64_cuda_12.2.tar.gz
nvhpc_2023_239_Linux_x86_64_cuda_12.2/install

进入安装界面,选择“3 Auto install”,然后输入安装目录,本人安装在个人用户目录里,开始安装。

安装完成后,在.bashrc中设置环境变量:

export PATH=/home/wliu/Applications/nvidia/hpc_sdk/Linux_x86_64/23.9/comm_libs/mpi/bin:$PATH
export PATH=/home/wliu/Applications/nvidia/hpc_sdk/Linux_x86_64/23.9/compilers/bin:$PATH

检查安装及变量设置是否正确(mpicc, mpif90, nvfortran为后面编译VASP时要用到的编译器) 

三、安装VASP

 1. 修改配置文件

由于我们选择使用intel-oneapi-mkl和NVIDIA HPC-SDK进行安装,因此我们选择的编译文件为:makefile.include.nvhpc_ompi_mkl_omp_acc。

1)进入vasp文件夹,将编译文件复制出来。

cp arch/makefile.include.nvhpc_ompi_mkl_omp_acc makefile.include

2)修改编译文件

a. 首先,修改cuda版本,本人的版本为12.2。根据GPU版本修改-gpu后面的参数,本人是RTX4090,更改为cc89,cc90

b. 然后,第60行,由于本人是AMD EPYC 9xx4系列的CPU,所以将-tp host改成了-tp znver4,如果是Intel的CPU,不需要更改。

c. 接下来是HPC-SDK的路径,先在终端内输入

which nvfortran | awk -F /compilers/bin/nvfortran '{ print $$1 }'

查看输出路径是否正确,若正确便不需要更改hpc-sdk路径,若不正确,可以通过68-70行手动设置hpc-sdk路径。

d. 接下来是数据库文件目录(MKLROOT),可通过如下命令查看

echo $MKLROOT

若无输出,表明第一步安装的intel-oneapi-mkl未激活,需要重新激活 source ~/intel/oneapi/mkl/2024.2/env/vars.sh, 激活后,MKLROOT ?= 后面可空着,或者更改为正常的路径,如下图所示。由于我们完全采用MKL提供的数据库,不单独设置scaLAPACK,因此将88、89行注释掉。

完整编译文件如下(已把openmp的相关内容删除,发现去掉后计算速度快点。删除了其他不需要的部分,保留了HDF5部分,后面再试试加上HDF5编译的效果):

export MKLROOT= /home/wliu/intel/oneapi/mkl/2024.1
# Default precompiler options
CPP_OPTIONS = -DHOST=\"LinuxNV\" \
              -DMPI -DMPI_INPLACE -DMPI_BLOCK=8000 -Duse_collective \
              -DscaLAPACK \
              -DCACHE_SIZE=4000 \
              -Davoidalloc \
              -Dvasp6 \
              -Duse_bse_te \
              -Dtbdyn \
              -Dqd_emulate \
              -Dfock_dblbuf \
              -D_OPENACC \
              -DUSENCCL

CPP         = nvfortran -Mpreprocess -Mfree -Mextend -E $(CPP_OPTIONS) $*$(FUFFIX)  > $*$(SUFFIX)

# N.B.: you might need to change the cuda-version here
#       to one that comes with your NVIDIA-HPC SDK
CC          = mpicc  -acc -gpu=cc89,cc90,cuda12.2
FC          = mpif90 -acc -gpu=cc89,cc90,cuda12.2
FCL         = mpif90 -acc -gpu=cc89,cc90,cuda12.2 -c++libs

FREE        = -Mfree

FFLAGS      = -Mbackslash -Mlarge_arrays

OFLAG       = -fast

DEBUG       = -Mfree -O0 -traceback

OBJECTS     = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o

LLIBS       = -cudalib=cublas,cusolver,cufft,nccl -cuda

# Redefine the standard list of O1 and O2 objects
SOURCE_O1  := pade_fit.o minimax_dependence.o
SOURCE_O2  := pead.o

# For what used to be vasp.5.lib
CPP_LIB     = $(CPP)
FC_LIB      = $(FC)
CC_LIB      = $(CC)
CFLAGS_LIB  = -O -w
FFLAGS_LIB  = -O1 -Mfixed
FREE_LIB    = $(FREE)

OBJECTS_LIB = linpack_double.o

# For the parser library
CXX_PARS    = nvc++ --no_warnings

# When compiling on the target machine itself , change this to the
# relevant target when cross-compiling for another architecture
VASP_TARGET_CPU ?= -tp znver4
FFLAGS     += $(VASP_TARGET_CPU)

# Specify your NV HPC-SDK installation (mandatory)
#... first try to set it automatically
NVROOT      =$(shell which nvfortran | awk -F /compilers/bin/nvfortran '{ print $$1 }')

## Improves performance when using NV HPC-SDK >=21.11 and CUDA >11.2
OFLAG_IN   = -fast -Mwarperf
SOURCE_IN  := nonlr.o

# Software emulation of quadruple precsion (mandatory)
QD         ?= $(NVROOT)/compilers/extras/qd
LLIBS      += -L$(QD)/lib -lqdmod -lqd
INCS       += -I$(QD)/include/qd

# Intel MKL for FFTW, BLAS, LAPACK, and scaLAPACK
MKLROOT    ?= /home/wliu/intel/oneapi/mkl/2024.1
LLIBS_MKL   = -Mmkl -L$(MKLROOT)/lib/intel64 -lmkl_scalapack_lp64 -lmkl_blacs_openmpi_lp64
INCS       += -I$(MKLROOT)/include/fftw

LLIBS      += $(LLIBS_MKL)

# HDF5-support (optional but strongly recommended)
#CPP_OPTIONS+= -DVASP_HDF5
#HDF5_ROOT  ?= /path/to/your/hdf5/installation
#LLIBS      += -L$(HDF5_ROOT)/lib -lhdf5_fortran
#INCS       += -I$(HDF5_ROOT)/include

2. 编译VASP

make std

由于我基本上只用到标准版本,因此只编译std,若需要其他版本,使用'make all'进行编译,将在bin文件夹内得到vasp_std, vasp_gam, vasp_ncl三个版本。

3. 设置环境变量

在~/.bashrc中加入下面这行,并进行激活(source ~/.bashrc)

export PATH=$PATH:/home/wliu/DFT/vasp.4.3.2/bin

四、测试

cd进入vasp示例文件夹

mpirun -np 1 vasp_std

-np后的数量为GPU数量。一个GPU就只能为1。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值