WSL2子系统Ubuntu安装Lammps with GPU

安装WSL2子系统

首先打开Windows powershell,以管理员身份运行,输入

wsl --list --online

查看可用的Linux版本,我选的是Ubuntu
之后使用

wsl --install -d Ubuntu

安装
退出子系统后,输入wsl重新进入Ubuntu,相当于重启系统。
命令

wsl --list --verbose

可以查看已经安装的Linux版本以及wsl版本。

WSL修改位置

WSL默认安装在C盘,如果空间不够,可以迁移到其他分区。

Windows PowerShell中输入如下命令:

wsl -l --all -v

结果如下:
 NAME STATE VERSION
* Ubuntu-20.04 Running 2

导出分发版为tar文件到E盘

wsl --export Ubuntu e:\wsl-ubuntu.tar

注销当前分发版

wsl --unregister Ubuntu

重新导入并安装WSL在e:\wsl-ubuntu

wsl --import Ubuntu e:\wsl-ubuntu e:\wsl-ubuntu.tar --version 2

设置默认登陆用户为安装时用户名

ubuntu config --default-user Username

删除tar文件(可选)

del e:\wsl-ubuntu.tar

结束

安装CUDA

windows下NVIDIA驱动安装,在此页面选择对应的显卡驱动安装。
https://developer.nvidia.com/cuda-downloads
程序检查系统兼容性完成后,点击同意并继续,选择自定义(高级),如下图


点击下一步
去除勾选下图中的三项后点击下一步

去除勾选的三项LAMMPS用不到。硬盘空间够大的同学,也可以勾选
接下来选择安装位置,如果你的电脑C盘有3G以上空闲空间,可使用默认选择(本教程使用默认安装位置,如果改变了安装位置,请记住),点击下一步
接下来程序将会自动安装,安装完成后关闭程序。

安装lammps的依赖包

sudo apt update
sudo apt upgrade
sudo apt install build-essential gcc g++ make git-core gfortran mpi-default-* libfftw3* libjpeg-dev libpng-dev

在wsl安装cuda

安装英伟达cuda toolkit,参考以下命令,注意要选wsl-ubuntu那个选项:
https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=WSL-Ubuntu&target_version=2.0&target_type=deb_network

wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda

将cuda toolkit 的路径添加到环境变量

#打开profile文件,或者.bashrc文件都可以
sudo nano /etc/profile
#在profile文件末尾添加以下两行,注意cuda版本,我的是11.8
export PATH=/usr/local/cuda-11.8/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
#保存关闭文件之后采用以下命令使设置生效
source /etc/profile

之后发现使用nvcc -V命令和nvidia-smi 命令看到的显卡驱动版本都一致了,为11.6,


运行时可以使用nvidia-smi命令查看任务

编译lammps

进入lammps文件夹里的gpu文件夹,我的路径是,供参考:

cd ~/lammps/lib/gpu/

找到Makefile.linux,修改CUDA_HOME = /usr/local/cuda-11.8以及CUDA_ARCH = -arch=sm_75,第一个是cuda的版本,第二个是显卡型号对应的计算能力,参考:
https://blog.csdn.net/qyb19970829/article/details/105463480
https://en.wikipedia.org/wiki/CUDA#GPUs_supported

在该目录下进行编译

make -f Makefile.linux

进入src文件夹,选择所需要的包并进行安装,gpu包最后安装

cd ~/lammps/src/
make yes-basic
make yes-CLASS2
make yes-EXTRA-MOLECULE
make yes-KSPACE
make yes-MANYBODY
make yes-MC
make yes-MEAM
make yes-MOLECULE
make yes-QEQ
make yes-REAXFF
make yes-GPU
#查看安装的包
make package-status

结果如下:

Installed  NO: package ADIOS
Installed  NO: package ASPHERE
Installed  NO: package ATC
Installed  NO: package AWPMD
Installed  NO: package BOCS
Installed  NO: package BODY
Installed  NO: package BROWNIAN
Installed  NO: package CG-DNA
Installed  NO: package CG-SDK
Installed YES: package CLASS2
Installed  NO: package COLLOID
Installed  NO: package COLVARS
Installed  NO: package COMPRESS
Installed  NO: package CORESHELL
Installed  NO: package DIELECTRIC
Installed  NO: package DIFFRACTION
Installed  NO: package DIPOLE
Installed  NO: package DPD-BASIC
Installed  NO: package DPD-MESO
Installed  NO: package DPD-REACT
Installed  NO: package DPD-SMOOTH
Installed  NO: package DRUDE
Installed  NO: package EFF
Installed  NO: package EXTRA-COMPUTE
Installed  NO: package EXTRA-DUMP
Installed  NO: package EXTRA-FIX
Installed YES: package EXTRA-MOLECULE
Installed  NO: package EXTRA-PAIR
Installed  NO: package FEP
Installed YES: package GPU
  src/fix_nve_asphere_gpu.cpp does not exist
  src/pair_beck_gpu.cpp does not exist
  src/pair_born_coul_long_cs_gpu.cpp does not exist
  src/pair_born_coul_wolf_cs_gpu.cpp does not exist
  src/pair_born_coul_wolf_gpu.cpp does not exist
  src/pair_colloid_gpu.cpp does not exist
  src/pair_coul_long_cs_gpu.cpp does not exist
  src/pair_dpd_gpu.cpp does not exist
  src/pair_dpd_tstat_gpu.cpp does not exist
  src/pair_gauss_gpu.cpp does not exist
  src/pair_gayberne_gpu.cpp does not exist
  src/pair_lj96_cut_gpu.cpp does not exist
  src/pair_lj_cubic_gpu.cpp does not exist
  src/pair_lj_cut_coul_debye_gpu.cpp does not exist
  src/pair_lj_cut_coul_dsf_gpu.cpp does not exist
  src/pair_lj_cut_dipole_cut_gpu.cpp does not exist
  src/pair_lj_cut_dipole_long_gpu.cpp does not exist
  src/pair_lj_expand_coul_long_gpu.cpp does not exist
  src/pair_lj_gromacs_gpu.cpp does not exist
  src/pair_lj_sdk_coul_long_gpu.cpp does not exist
  src/pair_lj_sdk_gpu.cpp does not exist
  src/pair_lj_sf_dipole_sf_gpu.cpp does not exist
  src/pair_lj_smooth_gpu.cpp does not exist
  src/pair_mie_cut_gpu.cpp does not exist
  src/pair_resquared_gpu.cpp does not exist
  src/pair_ufm_gpu.cpp does not exist
  src/pair_yukawa_colloid_gpu.cpp does not exist
  src/fix_nve_asphere_gpu.h does not exist
  src/pair_beck_gpu.h does not exist
  src/pair_born_coul_long_cs_gpu.h does not exist
  src/pair_born_coul_wolf_cs_gpu.h does not exist
  src/pair_born_coul_wolf_gpu.h does not exist
  src/pair_colloid_gpu.h does not exist
  src/pair_coul_long_cs_gpu.h does not exist
  src/pair_dpd_gpu.h does not exist
  src/pair_dpd_tstat_gpu.h does not exist
  src/pair_gauss_gpu.h does not exist
  src/pair_gayberne_gpu.h does not exist
  src/pair_lj96_cut_gpu.h does not exist
  src/pair_lj_cubic_gpu.h does not exist
  src/pair_lj_cut_coul_debye_gpu.h does not exist
  src/pair_lj_cut_coul_dsf_gpu.h does not exist
  src/pair_lj_cut_dipole_cut_gpu.h does not exist
  src/pair_lj_cut_dipole_long_gpu.h does not exist
  src/pair_lj_expand_coul_long_gpu.h does not exist
  src/pair_lj_gromacs_gpu.h does not exist
  src/pair_lj_sdk_coul_long_gpu.h does not exist
  src/pair_lj_sdk_gpu.h does not exist
  src/pair_lj_sf_dipole_sf_gpu.h does not exist
  src/pair_lj_smooth_gpu.h does not exist
  src/pair_mie_cut_gpu.h does not exist
  src/pair_resquared_gpu.h does not exist
  src/pair_ufm_gpu.h does not exist
  src/pair_yukawa_colloid_gpu.h does not exist
Installed  NO: package GRANULAR
Installed  NO: package H5MD
Installed  NO: package INTEL
Installed  NO: package INTERLAYER
Installed  NO: package KIM
Installed  NO: package KOKKOS
Installed YES: package KSPACE
Installed  NO: package LATBOLTZ
Installed  NO: package LATTE
Installed  NO: package MACHDYN
Installed  NO: package MANIFOLD
Installed YES: package MANYBODY
Installed YES: package MC
Installed  NO: package MDI
Installed YES: package MEAM
Installed  NO: package MESONT
Installed  NO: package MESSAGE
Installed  NO: package MGPT
Installed  NO: package MISC
Installed  NO: package ML-HDNNP
Installed  NO: package ML-IAP
Installed  NO: package ML-PACE
Installed  NO: package ML-QUIP
Installed  NO: package ML-RANN
Installed  NO: package ML-SNAP
Installed  NO: package MOFFF
Installed YES: package MOLECULE
Installed  NO: package MOLFILE
Installed  NO: package MPIIO
Installed  NO: package MSCG
Installed  NO: package NETCDF
Installed  NO: package OPENMP
Installed  NO: package OPT
Installed  NO: package ORIENT
Installed  NO: package PERI
Installed  NO: package PHONON
Installed  NO: package PLUGIN
Installed  NO: package PLUMED
Installed  NO: package POEMS
Installed  NO: package PTM
Installed  NO: package PYTHON
Installed YES: package QEQ
Installed  NO: package QMMM
Installed  NO: package QTB
Installed  NO: package REACTION
Installed YES: package REAXFF
Installed  NO: package REPLICA
Installed  NO: package RIGID
Installed  NO: package SCAFACOS
Installed  NO: package SHOCK
Installed  NO: package SMTBQ
Installed  NO: package SPH
Installed  NO: package SPIN
Installed  NO: package SRD
Installed  NO: package TALLY
Installed  NO: package UEF
Installed  NO: package VORONOI
Installed  NO: package VTK
Installed  NO: package YAFF

gpu下面有很多src/fix_nve_asphere_gpu.cpp does not exist,这个不用管,它是依赖于对应的包,比如fix_nve_asphere_gpu.cpp依赖于asphere包,因为没选,自然不存在。

编译lammps,这里采用16核编译。
make -j 16 mpi
当出现这一行就说明成功了:


将生成的lmp-mpi拷到usr/local/bin文件夹内,并添加此路径为环境变量。

sudo cp lmp_mpi /usr/local/bin
sudo nano /etc/profile
#在打开的profile里面添加如下一行
export PATH=/usr/local/bin:$PATH
#关闭后采用以下命令使得设置立即生效
source /etc/profile
#采用以下命令测试lmp-mpi的路径
which lmp_mpi
#输出为
/usr/local/bin/lmp_mpi

11、安装完成,测试下,跑自带的shear例子。

lmp_mpi -sf gpu -pk gpu 1 -in input_01.lammps
#或者使用cpu多线程
mpiexec -np 8 lmp_mpi -sf gpu  -pk gpu 1 -in input_01.lammps
上一篇
下一篇