# Setting up an environment
We use a [this Docker software container](https://hub.docker.com/layers/deeplearnphysics/larcv2/ub20.04-cuda11.1-cudnn8-pytorch1.9.0-larndsim/images/sha256-531e5a9c7ec30b2d64e9a7173859b8658ba85ead929523b24ec4f9430c7af5d6?context=explore)! To run this container...
* If you work on a linux system, we recommend [Singularity](https://singularity.hpcng.org/)
* If you work on OSX/Windows, we recommend [Docker](https://www.docker.com/)
* If you wanna learn just a little extra for better usability, we highly recommend [Podman](https://podman.io/)!
## Supported GPUS
* Turing (RTX 2000) architectures
* Volta architectures (e.g. V100)
* Ampere architectures (e.g. RTX3000 series, A100)
## Currently unspported GPUs
* Kepler architecture (e.g. K40/K80)
* Pascal architecture (e.g. GTX 1000 series, P100, Titan Xp)
## Singularity
First, if you haven't, you can pull and convert the docker image as follows:
```
singularity pull docker://deeplearnphysics/larcv2:ub20.04-cuda11.1-cudnn8-pytorch1.9.0-larndsim
```
... then you should see a file named `larcv2_ub20.04-cuda11.1-cudnn8-pytorch1.9.0-larndsim.sif`. Thats your image file!
To run a singularity container, try:
```
singularity exec --nv larcv2_ub20.04-cuda11.1-cudnn8-pytorch1.9.0-larndsim bash
```
Using Singularity, it's almost like you log (ssh) into another machine. You might wonder: "wait, what happened to my file system?? do I have to copy data files into a container?" You don't have to! First of all, your very own home area is mounted. Try `cd $HOME`. You can also mount more directories from your machine into a container using`--bind` option.
## Docker
In case of a docker, you will be essentially running a container as a root user. So you want to be careful about file permissions: you have rights to do anything within a container as a super user, but files you created in the mounted space from your host machine will remain as root-owned files :(
As a result, a common issue happens when you log out and try to remove files by `sudo rm` as you might accidentally remove files you did not mean to. That would be a disaster.
To avoid this, let's first create a directory dedicated for working inside the container. After done working in a container, we can just remove the work directory.
```
cd $HOME
mkdir workshop_area
```
Now let's run docker. This isn't the best-practice flags to run a docker, but hopefully least hassle for the workshop.
```
docker run -it --rm --net=host --mount type=bind,source=$HOME/workshop_area,target=/workshop_area --entrypoint=bash deeplearnphysics/larcv2:ub20.04-cuda11.1-cudnn8-pytorch1.9.0-larndsim
cd /workshop_area
```
Now you can work in this area. For instance, to start a jupyter session:
```
jupyter lab --allow-root
```