An Out-of-the-Box Application for Reproducible Graph Collaborative Filtering extending the Elliot Framework
This is the official implementation of the paper An Out-of-the-Box Application for Reproducible Graph Collaborative Filtering extending the Elliot Framework, accepted as demo paper at UMAP 2023.
Authors: Daniele Malitesta*, Claudio Pomo*, Vito Walter Anelli, Tommaso Di Noia, Antonio Ferrara
* Corresponding authors.
Here you may find our public Docker image: https://hub.docker.com/r/sisinflabpoliba/demo-graph.
- Abstract
- Pre-requisites
- Installation
- Implemented Models
- Demo Datasets
- Running Examples
- Video Tutorial
- Contacts
Graph convolutional networks (GCNs) are taking over collaborative filtering-based recommendation. Their message-passing schema effectively distills the collaborative signal throughout the user-item graph by propagating informative content from neighbor to ego nodes. In this demonstration, we show how to run complete experimental pipelines with six state-of-the-art graph recommendation models in Elliot (i.e., our framework for recommender system evaluation). We seek to highlight four main features, namely: (i) we support reproducibility in PyTorch Geometric (i.e., the library we use to implement the baselines); (ii) reproduced graph models span across various GCN families; (iii) we allow to easily run ablation studies on the number of explored hops; (iv) we prepare a Docker image to provide a self-consistent ecosystem for the running of experiments. Codes, datasets, and a video tutorial to install and launch the application are accessible at https://github.com/sisinflab/Graph-Demo.
Before installing and running our application, please make sure you have the proper NVIDIA drivers installed on your local machine. One of the possible ways to check it (on Ubuntu 18.04) is to run the command:
nvidia-smi
If everything works smoothly, you should have a similar output:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.129.06 Driver Version: 470.129.06 CUDA Version: 11.4 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla T4 Off | 00000001:00:00.0 Off | 0 |
| N/A 40C P0 28W / 70W | 0MiB / 15109MiB | 4% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
These are the following steps to install our application (tested on Ubuntu 18.04):
Reference link: https://docs.docker.com/engine/install/ubuntu/
Commands:
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Reference link: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#setting-up-nvidia-container-toolkit
Commands:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker
sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
Expected output:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.51.06 Driver Version: 450.51.06 CUDA Version: 11.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla T4 On | 00000000:00:1E.0 Off | 0 |
| N/A 34C P8 9W / 70W | 0MiB / 15109MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
Reference link: https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-22-04
Commands:
mkdir -p ~/.docker/cli-plugins/
curl -SL https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
chmod +x ~/.docker/cli-plugins/docker-compose
docker compose version
Expected output:
Docker Compose version v2.6.0
Models | Title | Authors | Year | Conference | Link DOI |
---|---|---|---|---|---|
NGCF | Neural Graph Collaborative Filtering | Wang et al. | 2019 | SIGIR | https://dl.acm.org/doi/10.1145/3331184.3331267 |
DGCF | Disentangled Graph Collaborative Filtering | Wang et al. | 2020 | SIGIR | https://dl.acm.org/doi/abs/10.1145/3397271.3401137 |
LightGCN | LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation | He et al. | 2020 | SIGIR | https://dl.acm.org/doi/10.1145/3397271.3401063 |
SGL | Self-supervised graph learning for recommendation | Wu et al. | 2021 | SIGIR | https://doi.org/10.1145/3404835.3462862 |
UltraGCN | UltraGCN: Ultra Simplification of Graph Convolutional Networks for Recommendation | Mao et al. | 2021 | CIKM | https://dl.acm.org/doi/10.1145/3459637.3482291 |
GFCF | How Powerful is Graph Convolution for Recommendation? | Shen et al. | 2021 | CIKM | https://dl.acm.org/doi/abs/10.1145/3459637.3482264 |
Datasets | Users | Items | Interactions | Official Link | Download Link |
---|---|---|---|---|---|
Gowalla | 29,858 | 40,981 | 1,027,370 | https://snap.stanford.edu/data/loc-gowalla.html | link |
Yelp 2018 | 31,668 | 38,048 | 1,561,406 | https://www.yelp.com/dataset | link |
Amazon Book | 52,643 | 91,599 | 2,984,108 | https://jmcauley.ucsd.edu/data/amazon/ | link |
Here, we provide two possible examples to run and test our application.
First, let us clone this GitHub repository so that we can access to the YAML docker compose file.
git clone https://github.com/sisinflab/Graph-Demo.git
cd Graph-Demo/
sudo docker compose run demo-graph
Then, select:
- Model:
ngcf
- Dataset:
gowalla
sudo docker compose run demo-graph
Then, select:
- Model:
gfcf
- Dataset:
gowalla
If you need a practical guide to install and launch our application, click on the image below to go to the video tutorial on YouTube.
Video link: https://www.youtube.com/watch?v=_Bpgf4wnwIU
- Daniele Malitesta (daniele.malitesta@poliba.it)
- Claudio Pomo (claudio.pomo@poliba.it)
- Vito Walter Anelli (vitowalter.anelli@poliba.it)
- Tommaso Di Noia (tommaso.dinoia@poliba.it)
- Antonio Ferrara (antonio.ferrara@poliba.it)