From 7446184c266bd233ae4c9b9b390ad94777dd1bf6 Mon Sep 17 00:00:00 2001 From: Vijay Prakash Dwivedi Date: Wed, 7 Oct 2020 17:45:40 +0800 Subject: [PATCH] Repo update w/ ZINC-full dataset (#46) * ZINC full data and scripts * README updates * README updates --- README.md | 5 + data/data.py | 2 +- data/molecules.py | 27 +- .../prepare_molecules_ZINC_full.ipynb | 393 ++++++++++++++++++ data/script_download_molecules.sh | 1 + environment_cpu.yml | 8 +- environment_gpu.yml | 11 +- ...lecules_graph_regression_ZINC-full_100k.sh | 124 ++++++ ...lecules_graph_regression_ZINC-full_500k.sh | 130 ++++++ ...h_regression_ZINC-full_PE_GatedGCN_500k.sh | 58 +++ 10 files changed, 738 insertions(+), 21 deletions(-) create mode 100644 data/molecules/prepare_molecules_ZINC_full.ipynb create mode 100644 scripts/ZINC-full/script_main_molecules_graph_regression_ZINC-full_100k.sh create mode 100644 scripts/ZINC-full/script_main_molecules_graph_regression_ZINC-full_500k.sh create mode 100644 scripts/ZINC-full/script_main_molecules_graph_regression_ZINC-full_PE_GatedGCN_500k.sh diff --git a/README.md b/README.md index 9c702588c..8ccd3690d 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,11 @@ ## Updates +**Oct 7, 2020** +* Repo updated to DGL 0.5.2 and PyTorch 1.6.0. Please update your environment using yml files ([CPU](./environment_cpu.yml), [GPU](./environment_gpu.yml)). +* Added [ZINC-full](./data/script_download_molecules.sh) dataset (249K molecular graphs) with [scripts](./scripts/ZINC-full/). + + **Jun 11, 2020** * Second release of the project. Major updates : + Added experimental pipeline for Weisfeiler-Lehman-GNNs operating on dense rank-2 tensors. diff --git a/data/data.py b/data/data.py index 125d33704..215274d5f 100644 --- a/data/data.py +++ b/data/data.py @@ -21,7 +21,7 @@ def LoadData(DATASET_NAME): return SuperPixDataset(DATASET_NAME) # handling for (ZINC) molecule dataset - if DATASET_NAME == 'ZINC': + if DATASET_NAME == 'ZINC' or DATASET_NAME == 'ZINC-full': return MoleculeDataset(DATASET_NAME) # handling for the TU Datasets diff --git a/data/molecules.py b/data/molecules.py index 5bcc90d9f..bfb4efef6 100644 --- a/data/molecules.py +++ b/data/molecules.py @@ -20,7 +20,7 @@ class MoleculeDGL(torch.utils.data.Dataset): - def __init__(self, data_dir, split, num_graphs): + def __init__(self, data_dir, split, num_graphs=None): self.data_dir = data_dir self.split = split self.num_graphs = num_graphs @@ -28,12 +28,13 @@ def __init__(self, data_dir, split, num_graphs): with open(data_dir + "/%s.pickle" % self.split,"rb") as f: self.data = pickle.load(f) - # loading the sampled indices from file ./zinc_molecules/.index - with open(data_dir + "/%s.index" % self.split,"r") as f: - data_idx = [list(map(int, idx)) for idx in csv.reader(f)] - self.data = [ self.data[i] for i in data_idx[0] ] - - assert len(self.data)==num_graphs, "Sample num_graphs again; available idx: train/val/test => 10k/1k/1k" + if self.num_graphs in [10000, 1000]: + # loading the sampled indices from file ./zinc_molecules/.index + with open(data_dir + "/%s.index" % self.split,"r") as f: + data_idx = [list(map(int, idx)) for idx in csv.reader(f)] + self.data = [ self.data[i] for i in data_idx[0] ] + + assert len(self.data)==num_graphs, "Sample num_graphs again; available idx: train/val/test => 10k/1k/1k" """ data is a list of Molecule dict objects with following attributes @@ -104,9 +105,15 @@ def __init__(self, name='Zinc'): data_dir='./data/molecules' - self.train = MoleculeDGL(data_dir, 'train', num_graphs=10000) - self.val = MoleculeDGL(data_dir, 'val', num_graphs=1000) - self.test = MoleculeDGL(data_dir, 'test', num_graphs=1000) + if self.name == 'ZINC-full': + data_dir='./data/molecules/zinc_full' + self.train = MoleculeDGL(data_dir, 'train', num_graphs=220011) + self.val = MoleculeDGL(data_dir, 'val', num_graphs=24445) + self.test = MoleculeDGL(data_dir, 'test', num_graphs=5000) + else: + self.train = MoleculeDGL(data_dir, 'train', num_graphs=10000) + self.val = MoleculeDGL(data_dir, 'val', num_graphs=1000) + self.test = MoleculeDGL(data_dir, 'test', num_graphs=1000) print("Time taken: {:.4f}s".format(time.time()-t0)) diff --git a/data/molecules/prepare_molecules_ZINC_full.ipynb b/data/molecules/prepare_molecules_ZINC_full.ipynb new file mode 100644 index 000000000..da9ef70fa --- /dev/null +++ b/data/molecules/prepare_molecules_ZINC_full.ipynb @@ -0,0 +1,393 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Notebook for preparing and saving MOLECULAR (ZINC full) graphs" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import torch\n", + "import pickle\n", + "import time\n", + "import os\n", + "%matplotlib inline\n", + "import matplotlib.pyplot as plt\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Download ZINC full dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "File already downloaded\n" + ] + } + ], + "source": [ + "if not os.path.isfile('molecules_zinc_full.zip'):\n", + " print('downloading..')\n", + " !curl https://www.dropbox.com/s/grhitgnuuixoxwl/molecules_zinc_full.zip?dl=1 -o molecules_zinc_full.zip -J -L -k\n", + " !unzip molecules_zinc_full.zip -d ../\n", + " # !tar -xvf molecules_zinc_full.zip -C ../\n", + "else:\n", + " print('File already downloaded')\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Convert to DGL format and save with pickle" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/home/vijay/graphdeeplearning/benchmarking-gnns\n" + ] + } + ], + "source": [ + "import os\n", + "os.chdir('../../') # go to root folder of the project\n", + "print(os.getcwd())\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using backend: pytorch\n" + ] + } + ], + "source": [ + "import pickle\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n", + "from data.molecules import MoleculeDatasetDGL \n", + "\n", + "from data.data import LoadData\n", + "from torch.utils.data import DataLoader\n", + "from data.molecules import MoleculeDataset\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "preparing 220011 graphs for the TRAIN set...\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/vijay/graphdeeplearning/benchmarking-gnns/data/molecules.py:61: UserWarning: This overload of nonzero is deprecated:\n", + "\tnonzero()\n", + "Consider using one of the following signatures instead:\n", + "\tnonzero(*, bool as_tuple) (Triggered internally at /opt/conda/conda-bld/pytorch_1595629427478/work/torch/csrc/utils/python_arg_parser.cpp:766.)\n", + " edge_list = (adj != 0).nonzero() # converting adj matrix to edge_list\n", + "/home/vijay/miniconda3/envs/benchmark_gnn_dgl_05/lib/python3.7/site-packages/dgl/base.py:45: DGLWarning: Recommend creating graphs by `dgl.graph(data)` instead of `dgl.DGLGraph(data)`.\n", + " return warnings.warn(message, category=category, stacklevel=1)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "preparing 24445 graphs for the VAL set...\n", + "preparing 5000 graphs for the TEST set...\n", + "Time taken: 4012.6295s\n" + ] + } + ], + "source": [ + "DATASET_NAME = 'ZINC-full'\n", + "dataset = MoleculeDatasetDGL(DATASET_NAME) \n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "min/max : 6 38\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "min/max : 6 38\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "min/max : 8 37\n" + ] + } + ], + "source": [ + "def plot_histo_graphs(dataset, title):\n", + " # histogram of graph sizes\n", + " graph_sizes = []\n", + " for graph in dataset:\n", + " graph_sizes.append(graph[0].number_of_nodes())\n", + " plt.figure(1)\n", + " plt.hist(graph_sizes, bins=20)\n", + " plt.title(title)\n", + " plt.show()\n", + " graph_sizes = torch.Tensor(graph_sizes)\n", + " print('min/max :',graph_sizes.min().long().item(),graph_sizes.max().long().item())\n", + " \n", + "plot_histo_graphs(dataset.train,'trainset')\n", + "plot_histo_graphs(dataset.val,'valset')\n", + "plot_histo_graphs(dataset.test,'testset')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "220011\n", + "24445\n", + "5000\n", + "(Graph(num_nodes=33, num_edges=72,\n", + " ndata_schemes={'feat': Scheme(shape=(), dtype=torch.int64)}\n", + " edata_schemes={'feat': Scheme(shape=(), dtype=torch.int64)}), tensor([3.0464]))\n", + "(Graph(num_nodes=21, num_edges=44,\n", + " ndata_schemes={'feat': Scheme(shape=(), dtype=torch.int64)}\n", + " edata_schemes={'feat': Scheme(shape=(), dtype=torch.int64)}), tensor([2.0992]))\n", + "(Graph(num_nodes=24, num_edges=52,\n", + " ndata_schemes={'feat': Scheme(shape=(), dtype=torch.int64)}\n", + " edata_schemes={'feat': Scheme(shape=(), dtype=torch.int64)}), tensor([3.1382]))\n" + ] + } + ], + "source": [ + "print(len(dataset.train))\n", + "print(len(dataset.val))\n", + "print(len(dataset.test))\n", + "\n", + "print(dataset.train[0])\n", + "print(dataset.val[0])\n", + "print(dataset.test[0])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "num_atom_type = 28\n", + "num_bond_type = 4\n" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time (sec): 133.74254989624023\n" + ] + } + ], + "source": [ + "start = time.time()\n", + "with open('data/molecules/ZINC-full.pkl','wb') as f:\n", + " pickle.dump([dataset.train,dataset.val,dataset.test,num_atom_type,num_bond_type],f)\n", + "print('Time (sec):',time.time() - start)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Test load function" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[I] Loading dataset ZINC-full...\n", + "train, test, val sizes : 220011 5000 24445\n", + "[I] Finished loading.\n", + "[I] Data load time: 151.4532s\n" + ] + } + ], + "source": [ + "DATASET_NAME = 'ZINC-full'\n", + "dataset = LoadData(DATASET_NAME)\n", + "trainset, valset, testset = dataset.train, dataset.val, dataset.test\n" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "batch_size = 10\n", + "collate = MoleculeDataset.collate\n", + "print(MoleculeDataset)\n", + "train_loader = DataLoader(trainset, batch_size=batch_size, shuffle=True, collate_fn=collate)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/data/script_download_molecules.sh b/data/script_download_molecules.sh index 6873eb690..cbbd53410 100644 --- a/data/script_download_molecules.sh +++ b/data/script_download_molecules.sh @@ -25,3 +25,4 @@ else curl https://www.dropbox.com/s/gpzovwqqsudarvq/ZINC-full.pkl?dl=1 -o ZINC-full.pkl -J -L -k fi + diff --git a/environment_cpu.yml b/environment_cpu.yml index a767476ec..511e78b6c 100644 --- a/environment_cpu.yml +++ b/environment_cpu.yml @@ -9,10 +9,10 @@ dependencies: - python=3.7.4 - python-dateutil=2.8.0 - pip=19.2.3 -- pytorch=1.3 -- torchvision==0.4.2 +- pytorch=1.6.0 +- torchvision==0.7.0 - pillow==6.1 -- dgl=0.4.2 +- dgl=0.5.2 - numpy=1.16.4 - matplotlib=3.1.0 - tensorboard=1.14.0 @@ -41,4 +41,4 @@ dependencies: - tensorflow==2.1.0 - tensorflow-estimator==2.1.0 - tensorboard==2.1.1 - - ogb==1.1.1 \ No newline at end of file + - ogb==1.2.2 \ No newline at end of file diff --git a/environment_gpu.yml b/environment_gpu.yml index 41cb4b899..ec29e49e9 100644 --- a/environment_gpu.yml +++ b/environment_gpu.yml @@ -7,16 +7,15 @@ channels: - anaconda - defaults dependencies: -- cuda10.0 -- cudatoolkit=10.0 +- cudatoolkit=10.2 - cudnn=7.6.5 - python=3.7.4 - python-dateutil=2.8.0 - pip=19.2.3 -- pytorch=1.3 -- torchvision==0.4.2 +- pytorch=1.6.0 +- torchvision==0.7.0 - pillow==6.1 -- dgl-cuda10.0=0.4.2 +- dgl-cuda10.2=0.5.2 - numpy=1.16.4 - matplotlib=3.1.0 - tensorboard=1.14.0 @@ -45,4 +44,4 @@ dependencies: - tensorflow-gpu==2.1.0 - tensorflow-estimator==2.1.0 - tensorboard==2.1.1 - - ogb==1.1.1 \ No newline at end of file + - ogb==1.2.2 \ No newline at end of file diff --git a/scripts/ZINC-full/script_main_molecules_graph_regression_ZINC-full_100k.sh b/scripts/ZINC-full/script_main_molecules_graph_regression_ZINC-full_100k.sh new file mode 100644 index 000000000..4af826fe3 --- /dev/null +++ b/scripts/ZINC-full/script_main_molecules_graph_regression_ZINC-full_100k.sh @@ -0,0 +1,124 @@ +#!/bin/bash + + +############ +# Usage +############ + +# bash script_main_molecules_graph_regression_ZINC-full_100k.sh + + + +############ +# GNNs +############ + +#MLP +#GCN +#GraphSage +#GatedGCN +#GAT +#MoNet +#GIN +#3WLGNN +#RingGNN + + + +############ +# ZINC-full - 4 RUNS +############ + +seed0=41 +seed1=95 +seed2=12 +seed3=35 +code=main_molecules_graph_regression.py +dataset=ZINC-full +out_dir=out/molecules_graph_regression/ZINC_full/ +tmux new -s benchmark -d +tmux send-keys "source activate benchmark_gnn" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --config 'configs/molecules_graph_regression_MLP_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --config 'configs/molecules_graph_regression_MLP_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --config 'configs/molecules_graph_regression_MLP_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --config 'configs/molecules_graph_regression_MLP_ZINC_100k.json' & +wait" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --config 'configs/molecules_graph_regression_GCN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --config 'configs/molecules_graph_regression_GCN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --config 'configs/molecules_graph_regression_GCN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --config 'configs/molecules_graph_regression_GCN_ZINC_100k.json' & +wait" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --config 'configs/molecules_graph_regression_GraphSage_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --config 'configs/molecules_graph_regression_GraphSage_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --config 'configs/molecules_graph_regression_GraphSage_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --config 'configs/molecules_graph_regression_GraphSage_ZINC_100k.json' & +wait" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --config 'configs/molecules_graph_regression_GatedGCN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --config 'configs/molecules_graph_regression_GatedGCN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --config 'configs/molecules_graph_regression_GatedGCN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --config 'configs/molecules_graph_regression_GatedGCN_ZINC_100k.json' & +wait" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --config 'configs/molecules_graph_regression_GAT_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --config 'configs/molecules_graph_regression_GAT_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --config 'configs/molecules_graph_regression_GAT_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --config 'configs/molecules_graph_regression_GAT_ZINC_100k.json' & +wait" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --config 'configs/molecules_graph_regression_MoNet_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --config 'configs/molecules_graph_regression_MoNet_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --config 'configs/molecules_graph_regression_MoNet_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --config 'configs/molecules_graph_regression_MoNet_ZINC_100k.json' & +wait" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --config 'configs/molecules_graph_regression_GIN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --config 'configs/molecules_graph_regression_GIN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --config 'configs/molecules_graph_regression_GIN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --config 'configs/molecules_graph_regression_GIN_ZINC_100k.json' & +wait" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --config 'configs/molecules_graph_regression_3WLGNN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --config 'configs/molecules_graph_regression_3WLGNN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --config 'configs/molecules_graph_regression_3WLGNN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --config 'configs/molecules_graph_regression_3WLGNN_ZINC_100k.json' & +wait" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --config 'configs/molecules_graph_regression_RingGNN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --config 'configs/molecules_graph_regression_RingGNN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --config 'configs/molecules_graph_regression_RingGNN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --config 'configs/molecules_graph_regression_RingGNN_ZINC_100k.json' & +wait" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --edge_feat True --config 'configs/molecules_graph_regression_GatedGCN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --edge_feat True --config 'configs/molecules_graph_regression_GatedGCN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --edge_feat True --config 'configs/molecules_graph_regression_GatedGCN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --edge_feat True --config 'configs/molecules_graph_regression_GatedGCN_ZINC_100k.json' & +wait" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --edge_feat True --config 'configs/molecules_graph_regression_3WLGNN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --edge_feat True --config 'configs/molecules_graph_regression_3WLGNN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --edge_feat True --config 'configs/molecules_graph_regression_3WLGNN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --edge_feat True --config 'configs/molecules_graph_regression_3WLGNN_ZINC_100k.json' & +wait" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --edge_feat True --config 'configs/molecules_graph_regression_RingGNN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --edge_feat True --config 'configs/molecules_graph_regression_RingGNN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --edge_feat True --config 'configs/molecules_graph_regression_RingGNN_ZINC_100k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --edge_feat True --config 'configs/molecules_graph_regression_RingGNN_ZINC_100k.json' & +wait" C-m +tmux send-keys "tmux kill-session -t benchmark" C-m + + + + + + + + + + + diff --git a/scripts/ZINC-full/script_main_molecules_graph_regression_ZINC-full_500k.sh b/scripts/ZINC-full/script_main_molecules_graph_regression_ZINC-full_500k.sh new file mode 100644 index 000000000..e15fba656 --- /dev/null +++ b/scripts/ZINC-full/script_main_molecules_graph_regression_ZINC-full_500k.sh @@ -0,0 +1,130 @@ +#!/bin/bash + + +############ +# Usage +############ + +# bash script_main_molecules_graph_regression_ZINC-full_500k.sh + + + +############ +# GNNs +############ + +#MLP +#GCN +#GraphSage +#GatedGCN +#GAT +#MoNet +#GIN +#3WLGNN +#RingGNN + + + +############ +# ZINC-full - 4 RUNS +############ + +seed0=41 +seed1=95 +seed2=12 +seed3=35 +code=main_molecules_graph_regression.py +dataset=ZINC-full +out_dir=out/molecules_graph_regression/ZINC_full/ +tmux new -s benchmark -d +tmux send-keys "source activate benchmark_gnn" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --config 'configs/molecules_graph_regression_GCN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --config 'configs/molecules_graph_regression_GCN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --config 'configs/molecules_graph_regression_GCN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --config 'configs/molecules_graph_regression_GCN_ZINC_500k.json' & +wait" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --config 'configs/molecules_graph_regression_GraphSage_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --config 'configs/molecules_graph_regression_GraphSage_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --config 'configs/molecules_graph_regression_GraphSage_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --config 'configs/molecules_graph_regression_GraphSage_ZINC_500k.json' & +wait" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --config 'configs/molecules_graph_regression_GatedGCN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --config 'configs/molecules_graph_regression_GatedGCN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --config 'configs/molecules_graph_regression_GatedGCN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --config 'configs/molecules_graph_regression_GatedGCN_ZINC_500k.json' & +wait" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --config 'configs/molecules_graph_regression_GAT_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --config 'configs/molecules_graph_regression_GAT_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --config 'configs/molecules_graph_regression_GAT_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --config 'configs/molecules_graph_regression_GAT_ZINC_500k.json' & +wait" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --config 'configs/molecules_graph_regression_MoNet_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --config 'configs/molecules_graph_regression_MoNet_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --config 'configs/molecules_graph_regression_MoNet_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --config 'configs/molecules_graph_regression_MoNet_ZINC_500k.json' & +wait" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --config 'configs/molecules_graph_regression_GIN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --config 'configs/molecules_graph_regression_GIN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --config 'configs/molecules_graph_regression_GIN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --config 'configs/molecules_graph_regression_GIN_ZINC_500k.json' & +wait" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --config 'configs/molecules_graph_regression_3WLGNN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --config 'configs/molecules_graph_regression_3WLGNN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --config 'configs/molecules_graph_regression_3WLGNN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --config 'configs/molecules_graph_regression_3WLGNN_ZINC_500k.json' & +wait" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --config 'configs/molecules_graph_regression_RingGNN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --config 'configs/molecules_graph_regression_RingGNN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --config 'configs/molecules_graph_regression_RingGNN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --config 'configs/molecules_graph_regression_RingGNN_ZINC_500k.json' & +wait" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --edge_feat True --config 'configs/molecules_graph_regression_GatedGCN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --edge_feat True --config 'configs/molecules_graph_regression_GatedGCN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --edge_feat True --config 'configs/molecules_graph_regression_GatedGCN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --edge_feat True --config 'configs/molecules_graph_regression_GatedGCN_ZINC_500k.json' & +wait" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --edge_feat True --config 'configs/molecules_graph_regression_3WLGNN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --edge_feat True --config 'configs/molecules_graph_regression_3WLGNN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --edge_feat True --config 'configs/molecules_graph_regression_3WLGNN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --edge_feat True --config 'configs/molecules_graph_regression_3WLGNN_ZINC_500k.json' & +wait" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --edge_feat True --config 'configs/molecules_graph_regression_RingGNN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --edge_feat True --config 'configs/molecules_graph_regression_RingGNN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --edge_feat True --config 'configs/molecules_graph_regression_RingGNN_ZINC_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --edge_feat True --config 'configs/molecules_graph_regression_RingGNN_ZINC_500k.json' & +wait" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --edge_feat True --init_lr 1e-4 --config 'configs/molecules_graph_regression_3WLGNN_ZINC_L8_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --edge_feat True --init_lr 1e-4 --config 'configs/molecules_graph_regression_3WLGNN_ZINC_L8_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --edge_feat True --init_lr 1e-4 --config 'configs/molecules_graph_regression_3WLGNN_ZINC_L8_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --edge_feat True --init_lr 1e-4 --config 'configs/molecules_graph_regression_3WLGNN_ZINC_L8_500k.json' & +wait" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --edge_feat True --init_lr 1e-5 --config 'configs/molecules_graph_regression_RingGNN_ZINC_L8_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --edge_feat True --init_lr 1e-5 --config 'configs/molecules_graph_regression_RingGNN_ZINC_L8_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --edge_feat True --init_lr 1e-5 --config 'configs/molecules_graph_regression_RingGNN_ZINC_L8_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --edge_feat True --init_lr 1e-5 --config 'configs/molecules_graph_regression_RingGNN_ZINC_L8_500k.json' & +wait" C-m +tmux send-keys "tmux kill-session -t benchmark" C-m + + + + + + + + + + + diff --git a/scripts/ZINC-full/script_main_molecules_graph_regression_ZINC-full_PE_GatedGCN_500k.sh b/scripts/ZINC-full/script_main_molecules_graph_regression_ZINC-full_PE_GatedGCN_500k.sh new file mode 100644 index 000000000..c32106e1b --- /dev/null +++ b/scripts/ZINC-full/script_main_molecules_graph_regression_ZINC-full_PE_GatedGCN_500k.sh @@ -0,0 +1,58 @@ +#!/bin/bash + + +############ +# Usage +############ + +# bash script_main_molecules_graph_regression_ZINC-full_PE_GatedGCN_500k.sh + + + +############ +# GNNs +############ + +#MLP +#GCN +#GraphSage +#GatedGCN +#GAT +#MoNet +#GIN +#3WLGNN +#RingGNN + + + +############ +# ZINC-full - 4 RUNS +############ + +seed0=41 +seed1=95 +seed2=12 +seed3=35 +code=main_molecules_graph_regression.py +dataset=ZINC-full +out_dir=out/molecules_graph_regression/ZINC_full/ +tmux new -s benchmark -d +tmux send-keys "source activate benchmark_gnn_dgl_05" C-m +tmux send-keys " +python $code --dataset $dataset --out_dir $out_dir --gpu_id 0 --seed $seed0 --edge_feat True --config 'configs/molecules_graph_regression_GatedGCN_ZINC_PE_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 1 --seed $seed1 --edge_feat True --config 'configs/molecules_graph_regression_GatedGCN_ZINC_PE_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 2 --seed $seed2 --edge_feat True --config 'configs/molecules_graph_regression_GatedGCN_ZINC_PE_500k.json' & +python $code --dataset $dataset --out_dir $out_dir --gpu_id 3 --seed $seed3 --edge_feat True --config 'configs/molecules_graph_regression_GatedGCN_ZINC_PE_500k.json' & +wait" C-m +# tmux send-keys "tmux kill-session -t benchmark" C-m + + + + + + + + + + +