Repository containing scaffolding for a Python 3-based data science project with GPU acceleration using the PyTorch ecosystem.
Simply follow the instructions to create a new project repository from this template.
Project organization is based on ideas from Good Enough Practices for Scientific Computing.
- Put each project in its own directory, which is named after the project.
- Put external scripts or compiled programs in the
bin
directory. - Put raw data and metadata in a
data
directory. - Put text documents associated with the project in the
doc
directory. - Put all Docker related files in the
docker
directory. - Install the Conda environment into an
env
directory. - Put all notebooks in the
notebooks
directory. - Put files generated during cleanup and analysis in a
results
directory. - Put project source code in the
src
directory. - Name all files to reflect their content or function.
Installing the NVIDIA CUDA Toolkit manually is only required if your project needs to use the nvcc
compiler.
Note that even if you have not written any custom CUDA code that needs to be compiled with nvcc
, if your project
uses packages such as PyTorch Geometric that include custom
CUDA extensions for PyTorch then you will need nvcc
installed in order to build these packages.
If you don't need nvcc
, then you can skip this section as conda
will install a cudatoolkit
package
which includes all the necessary runtime CUDA dependencies (but not the nvcc
compiler).
You will need to have the appropriate version of the NVIDIA CUDA Toolkit installed on your workstation. For PyTorch you should install NVIDIA CUDA Toolkit 10.1 (documentation).
After installing the appropriate version of the NVIDIA CUDA Toolkit you will need to set the following environment variables.
$ export CUDA_HOME=/usr/local/cuda-10.1
$ export PATH=$CUDA_HOME/bin:$PATH
$ export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
Ibex users do not neet to install NVIDIA CUDA Toolkit as the relevant versions have already been
made available on Ibex by the Ibex Systems team. Users simply need to load the appropriate version
using the module
tool.
$ module load cuda/10.1.243
After adding any necessary dependencies that should be downloaded via conda
to the
environment.yml
file and any dependencies that should be downloaded via pip
to the
requirements.txt
file you create the Conda environment in a sub-directory ./env
of your project
directory by running the following commands.
export ENV_PREFIX=$PWD/env
conda env create --prefix $ENV_PREFIX --file environment.yml --force
Once the new environment has been created you can activate the environment with the following command.
conda activate $ENV_PREFIX
Note that the ENV_PREFIX
directory is not under version control as it can always be re-created as
necessary.
If you wish to use any JupyterLab extensions included in the environment.yml
and requirements.txt
files then you need to activate the environment and rebuild the JupyterLab application using the
following commands to source the postBuild
script.
conda activate $ENV_PREFIX # optional if environment already active
. postBuild
For your convenience these commands have been combined in a shell script ./bin/create-conda-env.sh
.
Running the shell script will set the Horovod build variables correctly, create the Conda environment,
activate the Conda environment, and built JupyterLab with any additional extensions. The script should
be run from the project root directory as follows.
follows.
./bin/create-conda-env.sh
The list of explicit dependencies for the project are listed in the environment.yml
file. To see
the full lost of packages installed into the environment run the following command.
conda list --prefix $ENV_PREFIX
If you add (remove) dependencies to (from) the environment.yml
file or the requirements.txt
file
after the environment has already been created, then you can re-create the environment with the
following command.
$ conda env create --prefix $ENV_PREFIX --file environment.yml --force
In order to build Docker images for your project and run containers with GPU acceleration you will need to install Docker, Docker Compose and the NVIDIA Docker runtime.
Detailed instructions for using Docker to build and image and launch containers can be found in
the docker/README.md
.