一、合成训练数据
foo@bar:CLIC-GCN$ python NetCreator.py batch local 10
参数解释:python NetCreator.py [paradigm] [scale] [amount]
paradigm
: 合成的 Logical Plan 的计算模式,str 类型,可选项: [‘batch’, 'linear', 'streaming']scale
: 数据规模,str 类型,可选项: ['local', 'small', 'medium', 'large']amount
: 合成的数据量,int 类型
二、训练 GCN 模型
foo@bar:CLIC-GCN$ python train.py -b 16 -emb 512 -e 4096 -lr 0.0001
参数解释参见 python train.py --help
该命令运行流程:
- 在
./data/
目录下搜索operator_embedding.ebd
文件,即预训练好的 operator_embedding 模型,若不存在则重新合成数据并训练; - 合成后的 Logical Plan 数据保存在
./data/Logical Plans/generated
目录下,每个文件表示一个 Logical Plan,以 Pickle 序列化的格式保存; - (增量式)构造
NetDataset
将上述合成的数据集处理为受pytorch_geometric
支持的格式并聚合至./data/Logical Plans/processed/myData.pt
文件中 - 使用
NetDataset
作为训练数据集来训练 GCN 模型,每次训练过程都保存为 tf_event 文件用于 TensorBoard 的可视化并包装入一个目录中保存在./log/
路径下
operator.py, platforms.py
中描述了所有运算符和计算平台的元信息,用于后续合成数据。
platform.py
手动定义了所有计算平台,每个计算平台的信息包括支持的计算模式、是否为分布式、计算规模等。
operator.py
手动定义了所有运算符,每个运算符包括计算模式、被支持的计算平台(Platform
类)等信息,并在文件末尾按照计算模式分类;
由 generator.py, NetCreator.py
组成。
generator.py
文件中分别定义了 批处理、流处理、机器学习、图计算的有限状态自动机。
该自动机可根据传入的状态转移概率合成不同规模的 Pipeline 形式的 Logical Plan。
该 Pipeline 中仅包含输入、输出参数数量均为 1 的运算符。
NetCreator.py
是合成数据的重要文件,其利用 generator.py
文件中的自动机合成不同形状、规模、计算模式的 Logical Plan。
以机器学习的 MLFSM 为例,其首先合成了不同长度的 Pipeline(代码中称为 PathNet
),然后使用多输入或多输出的运算符作为 Juncture 来链接两条 Pipeline,以此构建一个带分支的 Net。根据 (输入、输出)参数数量的不同,代码中将由(2,1)运算符作为 juncture 的 Net 称为 UpforkNet,(1,2)的为 DownforkNet。
若重复上述过程,同时融合 PathNet, UpforkNet 和 DownforkNet,便可以合成结构更加复杂的 Logical Plan。
该文件使用 skip-gram 算法训练运算符的 embedding。 为了得到运算符间的关系,代码中将合成的 Logical Plan 的拓扑排序序列看作是运算符的“语句”。
GCN 的重要组件,用于读取所有合成的 Physical Plan,并将其转为受 pytorch_geometric 支持的格式。 转换过程包括:
- 反序列化 Logical Plan 文件为
network.DiGraph
; - 将图的每个节点编码为特征向量(可使用 onehot 或 embedding)存储在内存
- 将每条边存储为 COO 格式的对象,和节点一起,创建为一个
Data
对象保存 - 聚合所有
Data
对象并保存
就是构造了个基础的 GCN 网络。