Open Ldpe2G opened 2 years ago
通过一层层定位,发现是 zeros_like 在推导 sbp 时出现了和输入 tensor 不同的 sbp,在修复中。
最小复现代码(需要顺便检察 ones_like ):
import oneflow as flow
from oneflow import nn
import numpy as np
# import torch
gen = flow.Generator(device="cuda")
gen.manual_seed(123)
placement = flow.placement("cuda", {0: range(4)}, (2, 2))
B = flow.sbp.broadcast
S0 = flow.sbp.split(0)
S1 = flow.sbp.split(1)
P = flow.sbp.partial_sum
a = flow.rand(128, 3, 4, 4, placement=placement, sbp=[B, B], generator=gen)
b = flow.zeros_like(a)
print(b) # sbp=(oneflow.sbp.broadcast, oneflow.sbp.split(axis=0))
本身这个推导是有问题的么,如果没问题的话打算怎么修复
我在看推导相关的逻辑,这里推导一定要推出和 input 一样的 sbp 和 placement 的。现在的推导结果和输入的 placement 有关系(如果是其他 placement,结果的 sbp 还会变),说明中间推导一定有问题的。
我在看推导相关的逻辑,这里推导一定要推出和 input 一样的 sbp 和 placement 的。现在的推导结果和输入的 placement 有关系(如果是其他 placement,结果的 sbp 还会变),说明中间推导一定有问题的。
好的,了解了。这里是不是可以这样呢,zero like出来的结果再to_consistent一下。
我在看推导相关的逻辑,这里推导一定要推出和 input 一样的 sbp 和 placement 的。现在的推导结果和输入的 placement 有关系(如果是其他 placement,结果的 sbp 还会变),说明中间推导一定有问题的。
好的,了解了。这里是不是可以这样呢,zero like出来的结果再to_consistent一下。
临时这么做是没问题的,不过这样不是多了通信和拷贝嘛,而且不一定能 to_consistent 通
基于分支 https://github.com/Oneflow-Inc/oneflow/pull/7238 能跑通 eager global 的 2d sbp
实验分支
swin_clean_ldp_eager_consistent
脚本:
debug_with_real_data_ddp.sh
完全跑通 eager global 待解决的问题