提供两种安装方式:
- 利用Docker构建镜像
- 利用conda安装环境
- 首先利用Docker构建YiTu_GNN运行的虚拟环境,Docker的安装请参考。如下我们构建了一个叫做
YiTu_GNN
的镜像,之后的所有实验都是在该镜像上完成的。
cd YiTu_GNN/docker
docker build -f Dockerfile -t YiTu_GNN .
- 启动docker容器:
docker run --gpus all -e NCCL_SOCKET_IFNAME=eno1 --rm -dit --shm-size="5g" --network=host --name YiTu_GNN YiTu_GNN /bin/bash
- --gpus all:表示使用所有gpu
- -e NCCL_SOCKET_IFNAME=eno1: 设置需要使用的网卡
- --shm-size="5g": 设置共享内存大小
- --network=host: 使用主机的网络
- docker容器内安装YiTu_GNN:
# 1. 将YiTu_GNN复制到docker
docker cp YiTu_GNN YiTu_GNN:/home
# 2. 进入容器
docker exec -it YiTu_GNN bash
cd /home/YiTu_GNN
# 3. 安装YiTu_GNN
python setup.py install
- 安装cmake:
version=3.18
build=0
mkdir ~/temp
cd ~/temp
wget https://cmake.org/files/v$version/cmake-$version.$build-Linux-x86_64.sh
sudo mkdir /opt/cmake
sudo sh cmake-$version.$build-Linux-x86_64.sh --prefix=/opt/cmake --skip-license
sudo ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake
cd ~
rm -rf ~/temp
- 安装conda:
export LANG=C.UTF-8 LC_ALL=C.UTF-8
export PATH=/opt/conda/bin:$PATH
apt-get update --fix-missing && \
apt-get install -y wget bzip2 ca-certificates curl git && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda.sh && \
/bin/bash ~/miniconda.sh -b -p /opt/conda && \
rm ~/miniconda.sh && \
/opt/conda/bin/conda clean -ya && \
ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \
echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc && \
echo "conda activate base" >> ~/.bashrc
export TINI_VERSION=v0.16.1
source ~/.bashrc
- 安装相关依赖包:
conda create -n YiTu_GNN python=3.7.5
conda activate YiTu_GNN
conda install -y astunparse numpy ninja pyyaml mkl \
mkl-include setuptools cffi \
typing_extensions future six \
requests dataclasses \
pytest nose cython scipy \
networkx matplotlib nltk \
tqdm pandas scikit-learn && \
conda install -y -c pytorch magma-cuda102
# 单机依赖包
apt-get update && apt-get install -y --no-install-recommends \
libboost-all-dev \
libgoogle-perftools-dev \
protobuf-compiler && \
rm -rf /var/lib/apt/lists/*
- 编译安装pytorch:
mkdir ~/temp
cd ~/temp
# 下载能够支持多版本参数的PyTorch源码
git clone --recursive https://github.com/Ningsir/pytorch.git -b multi-version
cd pytorch
# if you are updating an existing checkout
git submodule sync
git submodule update --init --recursive
# 编译安装PyTorch
export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}
USE_NINJA=OFF python setup.py install --cmake
cd ~
rm -rf ~/temp
可能出现的问题:报错缺少valgrind.h文件
解决办法:cd third_party/valgrind && git checkout VALGRIND_3_18_0
- 安装dgl:
conda install -y -c dglteam dgl-cuda10.2=0.7.1
- 安装YiTu_GNN
python setup.py install
进入根目录下的 examples/YiTu_GNN/NDP 目录
#编译有ndp的图算法
cmake .
make
#编译无ndp的图算法
cd nondp
make
cd ..
#编译图格式转换工具
cd tools
make
cd ..
cd /home/data
git clone https://github.com/kimiyoung/planetoid.git
python example/YiTu_GNN/single/data_process.py --data_path /home/data/planetoid/data --dataset citeseer
python example/YiTu_GNN/single/data_process.py --data_path /home/data/planetoid/data --dataset cora
python example/YiTu_GNN/single/data_process.py --data_path /home/data/planetoid/data --dataset pubmed
-
数据集格式 (
vnum
表示顶点个数)adj.npz
: 图邻接矩阵,大小为(vnum, vnum)
,保存为scipy.sparse
coo matrix 格式。labels.npy
: vertex label 大小为(vnum,)
,保存为numpy.array
格式。test.npy
,train.npy
,val.npy
: boolean array 大小为(vnum,)
,保存为numpy.array
。feat.npy
(可选): feature of vertex 大小为(vnum, feat-size)
,保存为numpy.array
. 若为提供,则可以随机生成。
-
数据集下载和格式转换
mkdir reddit curl --output reddit/reddit.zip https://data.dgl.ai/dataset/reddit.zip unzip -d reddit reddit/reddit.zip python examples/YiTu_GNN/NDP/data/dgl2NDP.py --dataset reddit --out-dir /home/reddit
-
生成子图
-
hash partition
python YiTu_GNN/NDP/partition/hash.py --num-hops 2 --partition 1 --dataset /home/reddit
-
dg-based partition
python YiTu_GNN/NDP/partition/dg.py --num-hops 2 --partition 1 --dataset /home/reddit
-
.el 格式:每行两个整数,代表一条边的源节点和目的节点
0 1
0 3
2 3
1 2
.wel 格式:每行三个整数,代表一条边的源节点、目的节点、边权值
0 1 26
0 3 33
2 3 40
1 2 10
YiTu_GP 读取二进制的 CSR 图格式,这样的格式读取速度更快,且节省空间。转换方法如下:
进入根目录下的 examples/YiTu_GNN/NDP 目录
#.el 文件转成 .bcsr 文件
tools/converter path_to_Graph.el
#.wel 文件转成 .bcsr 文件 + .bcsrw 文件
tools/converter path_to_Graph.wel
python example/YiTu_GNN/single/gcn/main.py --data_path /home/data/planetoid/data --dataset citeseer --dim 3703 --classes 6
python example/YiTu_GNN/single/gcn/main.py --data_path /home/data/planetoid/data --dataset cora --dim 1433 --classes 7
python example/YiTu_GNN/single/gcn/main.py --data_path /home/data/planetoid/data --dataset pubmed --dim 500 --classes 3
进入根目录下的 examples/YiTu_GNN/NDP 目录
nondp/bfs-w --input bcsrgraph_path --source 1
nondp/cc-w --input bcsrgraph_path --source 1
nondp/pr-w --input bcsrgraph_path
nondp/sssp-w --input bcsrgraph_path --source 1
nondp/bc-w --input bcsrgraph_path --source 1
- Graph Server运行
- NDP Store Server
python examples/YiTu_GNN/NDP/server/NDP_server.py --dataset /home/reddit --num-workers [1]
- Trainer运行 进入根目录下的 examples/YiTu_GNN/NDP 目录
- Graph Convolutional Network (GCN)
python demo.py --YiTu_GNN 1 --method gcn --dataset /home/reddit --gpu [0] --feat-size 602
- Graph Isomorphism Network (GIN)
python demo.py --YiTu_GNN 1 --method gin --dataset /home/reddit --gpu [0] --feat-size 602
python demo.py --YiTu_GNN 0 --method bfs --input bcsrgraph_path --source 1
python demo.py --YiTu_GNN 0 --method cc --input bcsrgraph_path --source 1
python demo.py --YiTu_GNN 0 --method pr --input bcsrgraph_path
python demo.py --YiTu_GNN 0 --method sssp --input bcsrgraph_path --source 1
python demo.py --YiTu_GNN 0 --method sswp --input bcsrgraph_path --source 1
python demo.py --YiTu_GNN 0 --method bc --input bcsrgraph_path --source 1