Open TheFinalHydra opened 4 years ago
1:全部都是以邻接表形式存储在内存中 2: idsplit op和 merge op 在分布式模式下才会被插入Euler的计算图中,这部分逻辑在euler/parser/目录下,由compiler调用optimizer的过程中生成。 3: 使用dag调度的一个好处是,可以使用一些计算图优化算法:比如对于一个节点,需要获取其neighbor和特征时,原来模式需要调用两次rpc,现在可以被融合进一次rpc调用;同时这种情况下split方法原来会调用两次,现在会被dag优化器中的公共子表达式消除给优化掉。 目前Euler内部实际上已经支持了图分割模式的查询,假如用户把一个图分割为多个社团,并假设一个节点的所有信息查询都可以在这个社团中获取到,那么dag优化器会把尽可能多的算子打包成一个整体,一次rpc就可以吧信息获取得到。但这只是个试验性功能,目前还没有实际上生产
当然,Euler自己的dag执行引擎也更加轻量,所以相对于Euler1,计算图完全依赖tensorflow构建,性能也会相应提升。
可以顺着这个路径看GQL complier部分的代码: https://github.com/alibaba/euler/blob/master/euler/parser/compiler.h#L119 https://github.com/alibaba/euler/blob/master/euler/parser/optimizer.cc#L214 https://github.com/alibaba/euler/blob/master/euler/parser/optimizer.cc#L116 https://github.com/alibaba/euler/blob/master/euler/core/dag_def/dag_def.cc#L343 https://github.com/alibaba/euler/blob/master/euler/core/dag_def/dag_def.cc#L128
感谢这么详细的回复!
那就是说各个点/边的features也是直接存到了点/边的类中,而不是分开存储的吗,我看json2partdat.py的代码似乎也就是把每个点和边的所有属性直接打平了依次serialize到文件中。 第三点听起来挺好的,类似于把几个op给batch到一个rpc里面了
代码路径厉害了,非常感谢!
想请教关于euler 2.0的几个问题
看了文档和一点点代码之后有些疑问,不知道是否愿意帮忙答疑一下,谢谢!