Closed Ishitori closed 1 year ago
This implementation was created having in mind processing big graphs using Spark capabilities, without using other additional hardware taking to the limit Intel CPUs capabilities(mkl, or even mkldnn).
Some things to take into account:
The dimensions of the tensors that are involved in the convolution are: Normalized_Adjacency(nodes_number, nodes_number) x Input_Graph(batch=nodes_number, features_number) = Input_graph_with_convolution(nodes_number, features_number)
This last matrix is dense, so depending of the number of nodes and the features you could handle more or less millions of nodes. Note that the time using a partition increases as long as your graph increases too.
I split the graph in different components and put a set of these components is different partitions using a custom RDD partitioner.That allows to perform the convolution and the forward process using n executors, thereby spliting the batch across different executors(dozens of them) to do the convolution process for much bigger graphs. Note that the weights of the neural network are synchronized every iteration.
I had in mind to publish this approach, if you have some specific case we can try. Although I would try to check this implementation with only one partition and if you have problems, we can work in it.
I will include the distribute implementation. The idea can be similar to BigGraph. The point here is to use only spark primitives ad spark graph based frameworks.
Sounds good!
Hi Emiliano,
Thanks for the great project! I am curious to try it out, but before I start experimenting with it, I am curious to learn how big the graph can be? Can it be a few million nodes? What about few hundred million?
Thanks.