上次说到反应力场的计算比较慢,在 lammps 中 ReaxFF 想要加速只能通过 KOKKOS 和 OMP。这还需要预先安装好的并行编译器。我们这一篇文就先说 Ubuntu 20.04.3 LTS 系统上如何安装和使用 NIVIDIA 的 CUDA。

我们在查看Kokkos包的安装时注意到几个前提:

  1. Kokkos requires using a compiler that supports the c++14 standard. (这个容易达到)
  2. To build with Kokkos support for NVIDIA GPUs, the NVIDIA CUDA toolkit software version 9.0 or later must be installed on your system. (这个桃子的小机器做不到,它的 GPU 是 AMD 的)
  3. To build with Kokkos the HIPCC compiler from the AMD ROCm software version 3.5 or later is required. (这个很不幸桃子的小机器也做不到,Deepin 系统并没有直接受到支持,需要伪装成 Ubuntu 系统才可以安装,但是桃子研究了研究感觉风险过大得不偿失)

所以,以下安装步骤是在实验室的小机器 Ubuntu 20.04.3 LTS 系统上进行的,GPU 是 NVIDIA 的。

首先安装 NVIDIA CUDA toolkit

以下步骤参考一些网友的博客以及 NVIDIA 官方的安装说明。

确认 GPU 是否支持 CUDA

1ca7ac8b53d91399c93d736b53e7b07a.png

Quadro 系列用于专业可视化(听起来仿佛比不上 Tesla 系列用于技术与科学计算?总之),到 NVIDIA 官网查看我们的 GPU 是否满足要求,Quadro K620 确实在支持 CUDA 的列表中。

查看系统是否满足要求

Ubuntu 20.04.3 LTS 肯定是行的。

确认系统是否安装 gcc

0d5ed96ae58de62ba402147d8e5482bf.png

确认系统内核符合要求:

419b680c87f54544be2c546494b69f8c.png

选择安装方式

现在可以开始 CUDA 了。CUDA 有多种安装方法,我们这里选择 runfile 方式进行安装(这里参考了一位网友博客里推荐用这个方法的)。

停用 Nouveau

查看 Nouveau 驱动,发现正在运行:

f91cadeeeeeecfe5b89328ca2a9f74a8.png

创建 /etc/modprobe.d/blacklist-nouveau.conf 文件并写上以下两行:

blacklist nouveau
options nouveau modeset=0

然后运行以下命令:

1e1407981f7f18268a622f311d3cd333.png

然后重启。

下载 CUDA

wget https://developer.download.nvidia.com/compute/cuda/11.5.1/local_installers/cuda_11.5.1_495.29.05_linux.run

安装 CUDA

sudo sh cuda_11.5.1_495.29.05_linux.run

这个命令要等好久才有反应(不过也可能是这个机器 28 个核被师兄占了 26 个计算的原因?),然后问是否接受上面的条款:

68038216d747e679ff5424a7c55c8a82.png

当然 accept,

3af2da26f55189ae0d96fed9854b3771.png

接下来 Install

如果没有报错就可以直接进行下一项了。

不过,如果你和我遇到一样的情况的话:

53480f1a9772bdba014f66a077b2cc7f.png

报错说驱动装不上,可能的原因是停用 Nouveau 后没有重启。

如果还有其他可能,可以手动重装一下驱动,参考网友博文1博文2

插播掉坑记录

因为之前疏忽了没有重启,而且也没有意识到停用 Nouveau 之后重启的必要性,所以按照上面提到的博文操作了以下手动安装驱动的流程。

下载对应 GPU 型号的驱动

网址:https://www.nvidia.cn/Download/index.aspx?lang=cn

没有桌面的话,可以在命令行由 wget 命令下载。

卸载旧驱动
sudo apt-get --purge remove nvidia-*
安装新驱动
sudo sh NVIDIA-Linux-x86_64-470.86.run

8be1806700461cc2d45b3d3c74a4eec7.png

由于不太懂,先按照别人已成功的案例安装了再说,所以选 Continue installation,

409743dee8daaacf4397f773a26db045.png

我找到了之前安装出错的真正原因,停用 Nouveau 后需要重启。。。

重启电脑,验证是否已禁用 nouveau:

b5a9fe8b5043ffe0e2eda83a94fab20d.png

什么也没有,成功停掉了。然后重新安装新驱动:

bbbdad065b6e63f9ab32251f9b433a70.png

这回很顺利,下面全选yes(要看清楚有的默认选项是no):

69f3fc6d9dac6e6342b3fa25b4520471.png

b071b11ca1f97bdac472ecabaf97c56e.png

9f38e9d0470358915ccd43d74799b420.png

查看是否安装成功

ad3a1cb16e5222e5094347f13cadbbfa.png

终于安装成功

彻底删除旧的 CUDA,如果有的话:

sudo apt autoremove cuda
sudo apt --purge remove "*cublas*" "cuda*"

安装新的 CUDA:

f480e000288f63e960ad9729a6d9d111.png

搞定!

添加 path

按照上图的提示在 ~/.bashrc 添加路径:

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

刷新一下:

source ~/.bashrc

检查是否安装完成

23676246ac530c1097289ed8e3431d1c.png

大功告成~~

再在 lammps 中安装 GPU 包

lib/gpu 目录下首先编译 GPU library

修改文件 Makefile.linux:

CUDA_HOME = /usr/local/cuda-11.5
CUDA_ARCH = -arch=sm_50

上面一行是 CUDA 的路径。下面的 sm_50 是由 Compute Capability 决定的。NVIDIA 官网上有一些类似下面这样的表格:

feaef7de1790276de460d0a3e428b17d.png

计算能力 7.5 就应该是sm_75。

其他项可以看情况改,比如 CUDA_PRECISION 决定了 GPU 计算的精度。

更改完执行:

make -f Makefile.linux -j 24

如果再次修改,则编译前还需执行 make -f Makefile.linux clean

如果有必要,还需要修改文件 Makefile.lammps.standard(Makefile.linux 最上面 EXTRAMAKE 的值):

CUDA_HOME=/usr/local/cuda-11.5

src 目录安装 GPU 包

make yes-gpu

如果安装后又重新编译了 GPU library,则这里需要先 make no-gpu然后再重新 make yes-gpu

重新编译 lammps

make clean-all
make peachrl -j 24

试一试

mpirun -np 8 lmp_peachrl -in in.flow.couette

8eca8d83f1c5402e82e0ae5a26dc6f83.png

mpirun -np 8 lmp_peachrl -sf gpu -pk gpu 1 -in in.flow.couette

a677bbb0dc2e4c15a95640e49721d822.png

mpirun -np 8 lmp_peachrl -sf gpu -pk gpu 2 -in in.flow.couette

这回 error 了。

0ce9a99e79174fbd84148b9d3d980b41.png

大概是我们的这台小机器只能支持 1 块 GPU?而且,这 1 块 GPU 的加速还看起来非常地不给力,完全比不上没有 GPU 加速的效率,这可能是 lammps example 自带的 in.flow.couette 例子太简单了,完全没有必要用 GPU 来自讨苦吃。

总结

通过 GPU 包的成功安装,确认了 CUDA 已经装好,我们离反应力场的加速又进一步了。