Understand the FrameworkΒΆ
The framework of GraphVite is composed of two parts, a core library and a Python wrapper.
The Python wrapper can be found in python/graphvite/
. It provides an auto wrapper for
classes in the core library, as well as implementation for applications and datasets.
The core library is implemented with C++11 and CUDA, and binded to Python using
pybind11. It covers implementation of all computation-related classes in GraphVite,
such as graphs, solvers and optimizers. All these ingredients are packaged as classes,
similar to the Python interface. The source code can be found in include/
and
src/
.
In the C++ implementation, there is something different from Python. The graphs and solvers are templaterized by the underlying data types, and the length of embedding vectors. This design enables dynamic data type in Python interface, as well as maximal compile-time optimization.
The C++ interface is highly abstracted to faciliate further development on GraphVite. Generally, by inheriting from the core interface, we can implement new graph embedding instances without caring about any scheduling detail.
The source code is organized as follows.
include/base/*
implements basic data structures
include/core/*
implements optimizers, and core interface of graphs and solvers
include/instance/*
implements instances of graphs and solvers
include/instance/gpu/*
implements GPU training & evaluation routines
include/instance/model/*
implements forward & backward propagation of models
include/util/*
implements basic utils
include/bind.h
implements Python bindings
src/graphvite.cu
instantiates all Python classes