In 2013 we bought five servers each with 4 K20 GPUs inside. Since then they have been used but not maintained. Since we have newer GPUs (consult page GTX 1080 Ti) usage has dropped off somewhat. So I'm taking the opportunity to redo them using latest Nvidia, CentOS and application software. After all, it provides 23 teraflops GPU compute capacity (dpfp).
We'll add the Nvidia development and tools packages to our golden image node. Followed by compilations of Amber, Gromacs, Lammps and Namd. Join the node to our scheduler environment. Then we'll build the node into a massively parallel database server using mapd
(running sql on gpus, that should be fun).
Test it all out. Then decide when to image the other servers.
We will place all software in /usr/local
keeping it out of the CHROOT when vnfs is build (which is CentOS 7.2 anyways). We will add the tarball unpacking to the post imaging script for installation. How to build provision server OpenHPC 1.3.1, how to build Warewulf Golden Image. Keep the packages synced (other than kernel) between 7.2 CHROOT and 7.5 compute node.
Upon an 7.2 image you need to
Installation
# ifdown eth1, hook up public network, ifup eth1 # route add default gw 129.133.52.1 systemctl start iptables # 7.5 yum update kernel kernel-tools kernel-tools-libs yum install kernel-devel kernel-headers (remove old headers after reboot) yum install gcc gcc-gfortran gcc-c++ # CHROOT done yum install tcl tcl-devel # CHROOT done # /etc/modprobe.d/blacklist-nouveau.conf (new file by nvidia) # reboot before driver installation # CHROOT done blacklist nouveau options nouveau modeset=0 # new kernel initramfs, load dracut --force reboot # download runfiles from https://developer.nvidia.com/cuda-downloads # files in /usr/local/src sh cuda_9.2.148_396.37_linux.run Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 396.26? (y)es/(n)o/(q)uit: n Install the CUDA 9.2 Toolkit? (y)es/(n)o/(q)uit: y Enter Toolkit Location [ default is /usr/local/cuda-9.2 ]: Do you want to install a symbolic link at /usr/local/cuda? (y)es/(n)o/(q)uit: y Install the CUDA 9.2 Samples? (y)es/(n)o/(q)uit: n # nvidia driver ./cuda_name_of_runfile -silent -driver # Device files/dev/nvidia* exist with 0666 permissions? # They were not /usr/local/src/nvidia-modprobe.sh # backup [root@n37 src]# rpm -qf /usr/lib/libGL.so file /usr/lib/libGL.so is not owned by any package cp /usr/lib/libGL.so.1.7.0 /usr/lib/libGL.so.1.7.0-nvidia cp /usr/lib64/libGl.so.1.7.0 /usr/lib64/libGL.so.1.7.0-nvidia [root@n37 src]# ls /etc/X11/xorg.conf ls: cannot access /etc/X11/xorg.conf: No such file or directory [root@n37 src]# find /usr/local/cuda-9.2 -name nvidia-xconfig* [root@n37 src]# [root@n37 src]# scp n78:/etc/X11/xorg.conf /etc/X11/ # CHROOT done # for mapd graphics support needs to be enabled nvidia-smi --gom=0 # have left persistence and exclusivity at defaults for now reboot
For the user environment
Verification
[root@n37 cuda-9.2]# /usr/local/cuda/extras/demo_suite/deviceQuery /usr/local/cuda/extras/demo_suite/deviceQuery Starting... CUDA Device Query (Runtime API) version (CUDART static linking) Detected 4 CUDA Capable device(s) Device 0: "Tesla K20m" CUDA Driver Version / Runtime Version 9.2 / 9.2 CUDA Capability Major/Minor version number: 3.5 ... > Peer access from Tesla K20m (GPU0) -> Tesla K20m (GPU1) : Yes > Peer access from Tesla K20m (GPU0) -> Tesla K20m (GPU2) : No > Peer access from Tesla K20m (GPU0) -> Tesla K20m (GPU3) : No > Peer access from Tesla K20m (GPU1) -> Tesla K20m (GPU0) : Yes > Peer access from Tesla K20m (GPU1) -> Tesla K20m (GPU2) : No > Peer access from Tesla K20m (GPU1) -> Tesla K20m (GPU3) : No > Peer access from Tesla K20m (GPU2) -> Tesla K20m (GPU0) : No > Peer access from Tesla K20m (GPU2) -> Tesla K20m (GPU1) : No > Peer access from Tesla K20m (GPU2) -> Tesla K20m (GPU3) : Yes > Peer access from Tesla K20m (GPU3) -> Tesla K20m (GPU0) : No > Peer access from Tesla K20m (GPU3) -> Tesla K20m (GPU1) : No > Peer access from Tesla K20m (GPU3) -> Tesla K20m (GPU2) : Yes deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 9.2, CUDA Runtime Version = 9.2, NumDevs = 4, Device0 = Tesla K20m, Device1 = Tesla K20m, Device2 = Tesla K20m, Device3 = Tesla K20m Result = PASS
BandWithTest
[root@n37 cuda-9.2]# /usr/local/cuda/extras/demo_suite/bandwidthTest [CUDA Bandwidth Test] - Starting... Running on... Device 0: Tesla K20m Quick Mode Host to Device Bandwidth, 1 Device(s) PINNED Memory Transfers Transfer Size (Bytes) Bandwidth(MB/s) 33554432 6181.3 Device to Host Bandwidth, 1 Device(s) PINNED Memory Transfers Transfer Size (Bytes) Bandwidth(MB/s) 33554432 6530.0 Device to Device Bandwidth, 1 Device(s) PINNED Memory Transfers Transfer Size (Bytes) Bandwidth(MB/s) 33554432 137200.1 Result = PASS
Finish
Requirements
# centos7 yum -y install tcsh make \ gcc gcc-gfortran gcc-c++ \ which flex bison patch bc \ libXt-devel libXext-devel \ perl perl-ExtUtils-MakeMaker util-linux wget \ bzip2 bzip2-devel zlib-devel tar
# As root check requirements # CHROOT done rpm -qa | grep ^flex rpm -qa | grep ^tcsh rpm -qa | grep ^zlib rpm -qa | grep ^zlib-devel rpm -qa | grep ^bzip2 rpm -qa | grep ^bzip2-devel rpm -qa | grep ^bzip rpm -qa | grep ^bzip-devel rpm -qa | grep ^libXt rpm -qa | grep ^libXext rpm -qa | grep ^libXdmcp rpm -qa | grep ^tkinter # weird one need python 2.6.6_something rpm -qa | grep ^openmpi rpm -qa | grep ^perl | egrep "^perl-5|^perl-ExtUtils-MakeMaker" # both rpm -qa | grep ^patch rpm -qa | grep ^bison # As root install missing # CHROOT done # CHROOT done
Compilations
# as regular user # amber16 dir will be created cd /usr/local tar xvfj /share/apps/src/n33/AmberTools17.tar.bz2 tar xvfj /share/apps/src/n33/Amber16.tar.bz2 export AMBERHOME=/usr/local/amber16 cd $AMBERHOME # to preserve existing work flows export PATH=/share/apps/CENTOS6/python/2.7.9/bin:$PATH export LD_LIBRARY_PATH=/share/apps/CENTOS6/python/2.7.9/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=/share/apps/CENTOS6/openmpi/1.8.4/lib/:$LD_LIBRARY_PATH export PATH=/share/apps/CENTOS6/openmpi/1.8.4/bin:$PATH # use gnu, Y to patches, Y to miniconda # bundled netcdf, fftw ./configure gnu | tee -a amber16-install.log 2>&1 source /usr/local/amber16/amber.sh make install | tee -a amber16-install.log 2>&1 Installation of Amber16 (serial) is complete at Wed Aug 22 10:12:55 EDT 2018. ./configure -mpi gnu | tee -a amber16-install.log 2>&1 source /usr/local/amber16/amber.sh make install | tee -a amber16-install.log 2>&1 Installation of Amber16 (parallel) is complete at Wed Aug 22 10:36:45 EDT 2018. export PATH=/usr/local/cuda/bin:/usr/local/cuda/jre/bin:/usr/local/cuda/nvvm/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/jre/lib:$LD_LIBRARY_PATH # $AMBERHOME/AmberTools/src/configure2 # edit and bypass cuda test for 9.0 -> 9.2 version # please be sure to verify any results against known outcomes export CUDA_HOME=/usr/local/cuda ./configure -cuda gnu | tee -a amber16-install.log 2>&1 source /usr/local/amber16/amber.sh make install | tee -a amber16-install.log 2>&1 Installation of pmemd.cuda complete ./configure -mpi -cuda gnu | tee -a amber16-install.log 2>&1 source /usr/local/amber16/amber.sh make install | tee -a amber16-install.log 2>&1 Installation of pmemd.cuda.MPI complete [hmeij@n37 amber16]$ ls -l bin/pmemd* -rwxr-xr-x 1 hmeij its 3097968 Aug 22 10:12 bin/pmemd lrwxrwxrwx 1 hmeij its 15 Aug 22 15:19 bin/pmemd.cuda -> \ pmemd.cuda_SPFP -rwxr-xr-x 1 hmeij its 38851928 Aug 22 15:25 bin/pmemd.cuda_DPFP -rwxr-xr-x 1 hmeij its 39436704 Aug 22 16:04 bin/pmemd.cuda_DPFP.MPI lrwxrwxrwx 1 hmeij its 19 Aug 22 15:57 bin/pmemd.cuda.MPI -> \ pmemd.cuda_SPFP.MPI -rwxr-xr-x 1 hmeij its 32950848 Aug 22 15:19 bin/pmemd.cuda_SPFP -rwxr-xr-x 1 hmeij its 33531456 Aug 22 15:57 bin/pmemd.cuda_SPFP.MPI -rwxr-xr-x 1 hmeij its 33405504 Aug 22 15:31 bin/pmemd.cuda_SPXP -rwxr-xr-x 1 hmeij its 33990208 Aug 22 16:10 bin/pmemd.cuda_SPXP.MPI -rwxr-xr-x 1 hmeij its 3647784 Aug 22 10:36 bin/pmemd.MPI
Tests
Although the 9.2 cuda compiled Amber passed all tests please double check your results.
export DO_PARALLEL="mpirun -np 8" make test >> amber16-test.log 2>&1
Finish
As root install
Download and extract source. Using same environment as Amber compilation.
cd gromacs-2018/ mkdir build cd build which mpicc mpicxx /share/apps/CENTOS6/openmpi/1.8.4/bin/mpicc /share/apps/CENTOS6/openmpi/1.8.4/bin/mpicxx CC=mpicc CXX=mpicxx \ /share/apps/CENTOS7/cmake/3.12.1/bin/cmake .. \ -DCMAKE_INSTALL_PREFIX=/usr/local/gromacs-2018 \ -DGMX_BUILD_OWN_FFTW=ON -DGMX_MPI=ON -DGMX_GPU=ON CC=mpicc CXX=mpicxx make CC=mpicc CXX=mpicxx make install
As root install
For Lammps-22Aug18 I followed the top installation instructions at this page
The only difference in my approach was
Good thing we're doing this now, future versions of CUDA will not support the K20s anymore. In fact on that web site they are not mentioned, only the K40/K80 gpus. So we'll see what testing reveals. Please double check results against previous runs. Compile as regular user and stage lmp_mpi in /usr/local/lammps-22Aug18/
[hmeij@n37 src]$ ll /usr/local/lammps-22Aug18/ total 104356 -rwxr-xr-x 1 hmeij its 35739800 Aug 23 08:49 lmp_mpi-double-double-with-gpu -rwxr-xr-x 1 hmeij its 35555672 Aug 23 09:11 lmp_mpi-single-double-with-gpu -rwxr-xr-x 1 hmeij its 35559552 Aug 23 09:53 lmp_mpi-single-single-with-gpu
useradd -U mapd # mapd.repo [mapd-ce-cuda] name=mapd ce - cuda baseurl=https://releases.mapd.com/ce/yum/stable/cuda gpgcheck=1 gpgkey=https://releases.mapd.com/GPG-KEY-mapd yum install \ copy-jdk-configs java-1.8.0-openjdk-headless \ javapackages-tools libxslt \ lksctp-tools python-javapackages \ python-lxml tzdata-java nfs-utils psmisc lm_sensors # CHROOT done yum install mapd # n37:/usr/local/src # User specific aliases and functions export MAPD_USER=mapd export MAPD_GROUP=mapd export MAPD_STORAGE=/var/lib/mapd export MAPD_PATH=/opt/mapd # The $MAPD_STORAGE directory must be dedicated to MapD
To do another node, the steps are
Finished rebuilding n33-n37 based on n37 example. — Henk 2018/10/11 10:04