Installation#
Requirements#
The python packages that Forcepho requires are listed in requirements.txt.
Additional packages that may be necessary (especially for CUDA and MPI) are
listed in optional-requirements.txt.
In addition, for GPU and multiprocessing capability the python packages will require CUDA and MPI installations (known to work with CUDA 10.1 and open-MPI). You will also need an HDF5 installation. These are often available on computing clusters as modules.
Currently Forcepho is tested to work only with V100 Nvidia GPUs
Conda install#
The easiest way to install is to create a conda environment, using the supplied
environment.yml file.
git clone git@github.com:bd-j/forcepho.git
cd forcepho
conda env create -f environment.yml
conda activate force
python -m pip install .
Clusters#
cannon#
slurm script directives, also load these modules before installing:
module purge
module load git/2.17.0-fasrc01
module load intel/19.0.5-fasrc01 openmpi/4.0.1-fasrc01 hdf5/1.10.5-fasrc01
module load cuda/11.4.2-fasrc01 # HeLmod latest
module load Anaconda3/5.0.1-fasrc01 # HeLmod w/o hdf5, matplotlib
source activate force
to update
git pull
module purge
module load intel/19.0.5-fasrc01
module load cuda/11.4.2-fasrc01 hdf5/1.10.5-fasrc01
module load Anaconda3/5.0.1-fasrc01
source activate force
python -m pip install .
lux#
install is easiest with a Miniconda download
module load cuda11.2 hdf5/1.10.6 gcc openmpi git slurm
conda env create -f environment.yml
source activate force
python -m pip install .
Note that to install mpi4py you should use pip (not conda) and you may have to hide a linker that comes with miniconda
mv $HOME/miniconda3/envs/force/compiler_compat/ld $HOME/miniconda3/envs/force/compiler_compat/ld_old
python -m pip install --no-cache-dir mpi4py
For running slurm scripts just have this in the jobfile:
module purge
module load cuda11.2 hdf5/1.10.6 openmpi
source activate force
To update forcepho:
git pull
module purge
module load cuda11.2 hdf5/1.10.6 openmpi slurm git
source activate force
python -m pip install .
GPU details#
lux#
The user can start an MPS server
# Start MPS Daemon on both GPUs on this node
export CUDA_VISIBLE_DEVICES=0,1 # Select both GPUS
export CUDA_MPS_PIPE_DIRECTORY=/tmp/nvidia-mps # Select a location that’s accessible to the given $UID
export CUDA_MPS_LOG_DIRECTORY=/tmp/nvidia-log # Select a location that’s accessible to the given $UID
nvidia-cuda-mps-control -d # Start the daemon.
cannon#
From the odyssey docs: While on GPU node, you can run nvidia-smi to get information about the assigned GPU
Not sure if it’s necessary or how to enable MPS server.
ascent/summit#
MPS and Profiling
On ascent one enables MPS with
-alloc_flags "gpumps"
output.%h.%p
use ::KernelName:<int> where <int> is the index of the kernel invocation that you want to profile
# detailed profiling of the kernel
jsrun -n1 -g1 -a1 nvprof --analysis-metrics -o /gpfs/wolf/gen126/scratch/bdjohnson/large_prof_metrics%h.%p.nvvp python run_patch_gpu_test_simple.py
# FLOP count
jsrun -n1 -g1 -a1 nvprof --kernels ::EvaluateProposal:1 --metrics flop_count_sp python run_patch_gpu_test_simple.py