This is a repository for a computer tutorial of Probabilistic Modelling and Reasoning (2023/2024) - a University of Edinburgh master's course.
There are two notebooks provided:
- Tutorial.ipynb which contains some coding exercises (with the solutions provided in the text).
- Tutorial-completed.ipynb where the code has been filled-in for you so you can immediately run it on your machine.
To preview the Jupyter notebook we recommend using nbviewer since GitHub does not properly render it (or to preview the version with the filled-in code see this).
Before you run the experiments you will first need to setup the environment on your preferred machine. If you have previously created the pmr
conda environment for the HMM tutorials you may now only need to update the environment (see below).
We provide two environment files: environment.yml
and environment_cpuonly.yml
. If you are not going to use CUDA (i.e. GPU) for running the experiments you may want to install/update from environment_cpuonly.yml
, which will use significantly less storage (~2.5GB) than environment.yml
(~6.5GB) which additionally installs the necessary dependencies for using the GPU.
You may also want to run conda clean -t
after you've installed/updated your environment to remove the downloaded raw packages that are no longer necessary.
If you already have a pmr
conda environment on your machine simply open the terminal and navigate to the project directory and type:
conda env update --file environment_cpuonly.yml
if you are not going to use the GPU- or
conda env update --file environment.yml
if you plan to use the GPU.
If you haven't already done so, you'll need to open terminal on your machine and then follow the below instructions
- Install git (linux, macOS, windows) to access the repository if you don't have it already
- Clone the git repository on your machine or DICE by using
git clone
tool in the terminal (you can find a guide here) - Once you've cloned the repository, step into the directory by entering
cd pmr2024-vae
into the terminal - If you don’t already have it also install miniconda (linux, macOS, windows), which will allow you to manage all python dependencies per project
- You can now create the
pmr
conda environment by typingconda env create -f environment.yml
(orconda env create -f environment_cpuonly.yml
). This step may take a while to complete and since it has to download large binaries you should better be connected to a good internet connection.
Should you wish to use the DICE machines to run the notebook follow these alternative installation instructions
- Clone the git repository on your machine or DICE by using
git clone
tool in the terminal (you can find a guide here). Git should already be installed on your DICE machine. - Once you've cloned the repository, step into the directory by entering
cd pmr2024-vae
into the terminal - You may have installed miniconda for other courses (e.g. MLP), so you can use that too. If you have to install miniconda on your DICE follow the detailed explanation here
- You can now create the
pmr
conda environment by typingconda env create -f environment.yml
(orconda env create -f environment_cpuonly.yml
). This step may take a while to complete and since it has to download large binaries you should better be connected to a good internet connection.
Make sure that you run all jobs on student.compute
, i.e. when you start up a terminal type ssh student.compute
.
Also note, that due to limited resources on the DICE server, at certain times it may be very slow. If you're finding yourself in this situation - come back later, or run your jobs overnight. Each of the main experiments in this tutorial should not take longer than half an hour to complete.
You can access and run the notebook directly via this link http://colab.research.google.com/github/vsimkus/pmr2024-vae. More details can be found at https://colab.research.google.com/github/googlecolab/colabtools/blob/master/notebooks/colab-github-demo.ipynb#scrollTo=WzIRIt9d2huC.
Note that Colab is intended for interactive use, and hence it may time-out your notebook if you don't interact with it for a while (typically it prompts to confirm if you want to keep the notebook alive every couple of hours), so you will not be able to leave it unattended overnight. Also note that the Colab notebook already includes all the required dependencies, however, the versions may differ, hence the results may differ slightly but that should not be a problem for this tutorial.
Once you have the environment prepared you can start your jupyter notebook
- Activate the conda environment with
conda activate pmr
- Now you will be able to start your jupyter server by typing
jupyter notebook
, which will start the server and open a browser to access the tutorial notebook. ClickTutorial.ipynb
in the browser window. You can stop the server by pressing Ctrl+c (or Cmd+c) when you are done with it. Note that if you're running on DICE you should be nice to each other and instead runnice -n 19 jupyter notebook
to lower the priority of your job.
Before starting the jupyter server on a DICE server you must secure it with a passphrase, this is to prevent other people on the Informatics network from accessing your Jupyter server. Type the following in the terminal and follow the prompts (make sure you have activated your conda environment by typing conda activate pmr
before running the following)
bash secure-notebook-server.sh
This section details how to run the tutorial on DICE remotely without physically sitting in front of an Informatics desktop. You don't need to read this if you are using one of the machines in Appleton tower.
The description in this sections is a shorter version of the detailed steps described in the MLP course, so refer to the linked document if you need more details.
Majority of you will be connected to the University network, hence those can skip this. If instead you want to run the experiments on the DICE machines remotely from outside the University network you can follow the below steps to setup.
According to the Informatics policy you will need to connect through the Informatics VPN to be able to remotely connect to the DICE machines. See https://computing.help.inf.ed.ac.uk/openvpn for VPN setup instructions on any OS. When the guide asks you to download ovpn configuration file, choose Informatics-EdLAN-AT.ovpn
.
Once you are connected to Informatics network (or VPN), you can then in a different terminal window ssh
to the DICE machines (replace [your-student-id]
below with your student id, e.g. s1234567)
ssh -t [your-student-id]@student.ssh.inf.ed.ac.uk ssh student.compute
If you haven't already, follow the installation instructions for DICE above.
Now before starting the jupyter server you must secure it with a passphrase, this is to prevent other people on the Informatics network from accessing your Jupyter server. Type the following in the terminal and follow the prompts (make sure you have activated your conda environment by typing conda activate pmr
before running the following)
bash secure-notebook-server.sh
Having setup the passphrase we can now start up the server:
nice -n 19 jupyter notebook --no-browser
You can stop the server by pressing Ctrl+c (or Cmd+c), when you're done with it.
You should use nice
to lower the priority of your jobs when using shared resources, such as the student.compute
server.
Running the above command will give you an address with a port, e.g. http://localhost:8795
, you will need to note the port address e.g. 8795
for the next step.
Now that you have a running jupyter server, the final step is to forward the service to your local machine. For a detailed guide see this which covers all operating systems. On Linux and MacOS you should just be able to run the below command in a new terminal window
ssh -N -o ProxyCommand="ssh -q [your-student-id]@student.ssh.inf.ed.ac.uk nc student.compute 22" -L [local-port]:localhost:[remote-port] [student-id]@student.compute
where [local-port]
is a local port you want to assign it, e.g. 8889
and [remote-port]
is the port you have noted before, i.e. 8795
.
You can now navigate to http://localhost/8889
in a web browser on your local machine to access the remote Jupyter notebook. It will ask for the passphrase you have setup earlier.
Once you're done with the notebook, just press Ctrl+c (or Cmd+c) in all the terminal windows you have used until the processes are stopped and then close them.
The tutorial in this repository was authored by Vaidotas Šimkus and Michael Gutmann.