GithubHelp home page GithubHelp logo

关于数据分片的问题 about euler HOT 17 OPEN

alibaba avatar alibaba commented on May 3, 2024
关于数据分片的问题

from euler.

Comments (17)

yangsiran avatar yangsiran commented on May 3, 2024 1

@zhuoyw 这里改为partition数需要大于或等于shard的个数应该合适一点。engine数默认是等于shard数,所以有了上面那句文档。

from euler.

yangsiran avatar yangsiran commented on May 3, 2024

tf_euler.initialize_shared_graph可以认为是同时启动了一个server和一个client。目前euler在训练时将数据全量的加载到内存中。所以当单台机器的内存有限时,需要将数据切分到多个shard中。数据分片是直接被放到不同的文件上的,此时每个shard只加载一部分的数据分片,即一部分的文件。而文件系统更多的只是作为一个共享的持久存储。

from euler.

VoVAllen avatar VoVAllen commented on May 3, 2024

非常感谢!所以在什么阶段会把内存中的数据回写到hdfs中呢?

from euler.

VoVAllen avatar VoVAllen commented on May 3, 2024

还有就是worker和shard是绑定的吗?还是只有Graph Engine和shard是绑定的?

from euler.

VoVAllen avatar VoVAllen commented on May 3, 2024

另外在训练中,如果两个graph engine对应同一个shard,在更新embedding的时候,如何保持两个engine的同步?

from euler.

yangsiran avatar yangsiran commented on May 3, 2024

if not euler_ops.initialize_shared_graph(
directory=flags_obj.data_dir,
zk_addr=flags_obj.euler_zk_addr,
zk_path=flags_obj.euler_zk_path,
shard_idx=flags_obj.task_index,
shard_num=len(flags_obj.worker_hosts),
global_sampler_type='node'):
raise RuntimeError('Failed to initialize graph.')

在目前的训练代码的设置中是一个worker对应一个engine对应一个shard的,并且都是固定的。但是用户也可以自己进行更灵活的异构部署,让多个engine加入同一个shard,此时同一个shard的多个engine之间host相同的数据。

目前这个版本的图是静态的,所以没有数据回写到HDFS中的逻辑。而Embedding的更新也是在训练引擎里面的。

from euler.

VoVAllen avatar VoVAllen commented on May 3, 2024

多谢,所以其实是多个engine都是同一个shard的reference,真正数据还是在shard里的是吗?还有您提到的训练引擎指的是Graph Engine还是Shard还是Worker?

from euler.

yangsiran avatar yangsiran commented on May 3, 2024

训练引擎指worker(TensorFlow)。数据其实就是直接存储在图引擎里面了,同一个shard下面的图引擎其实是互为备份,负载均衡的。

from euler.

VoVAllen avatar VoVAllen commented on May 3, 2024

所以shard里的数据是静态固定的?计算出的Embedding并不会回写到shard中对吗?

from euler.

yangsiran avatar yangsiran commented on May 3, 2024

目前是这样的,动态图/可写图正在开发中。

from euler.

VoVAllen avatar VoVAllen commented on May 3, 2024

那请问在ScalableGCN中,历史Node Embedding是存在parameter server中的吗?这里node embedding如果单机存不下是否会做sharding呢?

from euler.

yangsiran avatar yangsiran commented on May 3, 2024

是的,这个地方用TensorFlow的partitioned variable就可以解决了。

参考#2 (comment)

from euler.

VoVAllen avatar VoVAllen commented on May 3, 2024

非常感谢!

from euler.

zhuoyw avatar zhuoyw commented on May 3, 2024

euler/tf_euler/python/run_loop.py

Lines 317 to 324 in 46ca9c5

if not euler_ops.initialize_shared_graph(
directory=flags_obj.data_dir,
zk_addr=flags_obj.euler_zk_addr,
zk_path=flags_obj.euler_zk_path,
shard_idx=flags_obj.task_index,
shard_num=len(flags_obj.worker_hosts),
global_sampler_type='node'):
raise RuntimeError('Failed to initialize graph.')
在目前的训练代码的设置中是一个worker对应一个engine对应一个shard的,并且都是固定的。但是用户也可以自己进行更灵活的异构部署,让多个engine加入同一个shard,此时同一个shard的多个engine之间host相同的数据。

目前这个版本的图是静态的,所以没有数据回写到HDFS中的逻辑。而Embedding的更新也是在训练引擎里面的。

"让多个engine加入同一个shard"是否和https://github.com/alibaba/euler/wiki/%E6%95%B0%E6%8D%AE%E5%87%86%E5%A4%87#%E6%95%B0%E6%8D%AE%E5%88%86%E7%89%87 中“分片数需要大于或等于图引擎实例的个数”矛盾?

from euler.

yangsiran avatar yangsiran commented on May 3, 2024

@zhuoyw 在euler中,partition(分片)是数据的一个配置,shard是一个部署的配置,两个配置是独立的。如果partition的数量小于shard的数量,那么就会有一些shard中没有数据了。 『让多个engine加入同一个shard』也是一个部署的配置。

from euler.

zhuoyw avatar zhuoyw commented on May 3, 2024

@zhuoyw 在euler中,partition(分片)是数据的一个配置,shard是一个部署的配置,两个配置是独立的。如果partition的数量小于shard的数量,那么就会有一些shard中没有数据了。 『让多个engine加入同一个shard』也是一个部署的配置。

那么partition数大于shard数,engine数大于shard数。“分片数需要大于或等于图引擎实例的个数”(partition数大于engine数)这个还是不太对吧?

from euler.

zhuoyw avatar zhuoyw commented on May 3, 2024

懂了。非常感谢!

from euler.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.