Closed PeterSH6 closed 3 years ago
使用Causal Logging来保存Lineage
这篇文章主要讨论两种Dataflow的情况:一种是Deterministic,一个节点只会收到一个源发来的,因此计算顺序是可以通过Lineage重现的;另一种是NonDeterministic,一个节点会收到多个发来的信息,这个时候A,B,C均向D发送信息,D收到的消息运行的动作顺序是不确定的, 恢复的时候需要恢复这个顺序。
对于Deterministic来说,只需要在local store里面存自己的和下游的Lineage和data pointer就可以了。一个节点的fail完全可以由上游节点恢复。在机器学习训练任务中,应该是deterministic的,但是每个op都需要保存,所以需要保存所有的gradient。最后实际上就是apply上去,虽然很快,但是要存的东西很多。
对于Nondeterministic的情况,由下图可以看到,C是Nondeterministic的节点,他会存自己的lineage和下游节点的Lineage(用于恢复下游节点),同时他需要把这所有的信息forward给下游节点,防止C自己挂了的时候,没法恢复这些顺序。这些顺序没法从上游节点恢复
PDF: https://cs-people.bu.edu/liagos/material/sosp19.pdf Talk: https://www.youtube.com/watch?v=ANSxtucbMzg