-
Notifications
You must be signed in to change notification settings - Fork 558
快速开始
Siran Yang edited this page May 10, 2021
·
7 revisions
本节将详细介绍如何使用Euler和TensorFlow进行GraphSage模型训练。GraphSage是由Stanford提出的一种Inductive的图学习方法,具有GCN模型的良好性质,同时在实际使用中可以扩展到十亿顶点的大规模图。
首先需要准备Euler引擎可以读取的图数据,这里我们以PPI(Protein-Protein Interactions)数据集作为例子,提供一个预处理脚本:
apt-get update && apt-get install -y curl
curl -k -O https://raw.githubusercontent.com/alibaba/euler/1.0/examples/ppi_data.py
pip install networkx==1.11 sklearn
python ppi_data.py
上面的命令会在当前目录下生成一个ppi目录,其中包含构建好的PPI图数据。
在训练集上训练一个半监督的GraphSage模型:
python -m tf_euler \
--data_dir ppi \
--max_id 56944 --feature_idx 1 --feature_dim 50 --label_idx 0 --label_dim 121 \
--model graphsage_supervised --mode train
上面的命令会在当前目录下生成一个ckpt目录,其中包含训练好的TensorFlow模型。
在测试集上评估模型的效果:
python -m tf_euler \
--data_dir ppi --id_file ppi/ppi_test.id \
--max_id 56944 --feature_idx 1 --feature_dim 50 --label_idx 0 --label_dim 121 \
--model graphsage_supervised --mode evaluate
使用Euler算法包默认参数训练得到的模型在测试集上的mirco-F1 score大概在0.6左右。
导出顶点的embedding:
python -m tf_euler \
--data_dir ppi \
--max_id 56944 --feature_idx 1 --feature_dim 50 --label_idx 0 --label_dim 121 \
--model graphsage_supervised --mode save_embedding
上面的命令会在当下目录下的ckpt目录中生成一个embedding.npy文件和一个id.txt文件,分别表示图中所有顶点的embedding和id。
Euler所生成的embedding可以根据用户的实际需要在后续流程中使用。这里给出一个利用Faiss进行相似性检索的例子:
import faiss
import numpy as np
embedding = np.load('ckpt/embedding.npy')
index = faiss.IndexFlatIP(256)
index.add(embedding)
print(index.search(embedding[:5], 4))
Euler算法包及其底层的图查询引擎支持分布式的模型训练,用户需要在原始的训练命令上加入四个参数--ps_hosts
、--worker_hosts
、--job_name
、--task_index
指定分布式角色。使用分布式训练时,数据需要进行分片,并放置在HDFS上。这里提供一个示例脚本在本机的1998至2001端口上启动两个ps和两个worker进行分布式训练。
bash tf_euler/scripts/dist_tf_euler.sh \
--data_dir hdfs://host:port/data \
--euler_zk_addr zk.host.com:port --euler_zk_path /path/for/euler \
--max_id 56944 --feature_idx 1 --feature_dim 50 --label_idx 0 --label_dim 121 \
--model graphsage_supervised --mode train
上面的命令会在/tmp/log.{woker,ps}.{0,1}
文件中打印日志。