Yinggang Wang

Results 24 comments of Yinggang Wang

初步判断是 view 定制算错 stride 的原因,关闭 view 再执行 `ONEFLOW_DISABLE_VIEW=1 python test.py` 结果是正确的。 @small1945 oneflow-inc/oneteam#472 可以在这个 issue 里了解一下 view 机制是什么,会有利于你查这个问题。

> 如果不跳过会有什么后果吗 不跳过的话就把已经配好 sbp 的 module 也修改了,比如上面例子里,如果直接用 `m.to_global(placement, S0)` 的话,那 self.param 也变成了 S0。

> 这里是不是还有额外的一个假设: > > 如果 module 里有 local 和 global tensor, `module.to_global(skip_global_tensor=true)`, `module.to_global(only_apply_local=true)`, `module.local_to_global()`, local to global 参数里的 Placement,和原本 module 里的 global tensor 的 Placement 要一致?(只是 sbp 有可能不同) 这里应该不用处理,因为原本 module...

python/oneflow/test/modules/test_global_nms.py:56 看起来是 nms 算法中小概率下的数据精度问题,本地 4 卡 8 卡均未复现,重跑一下。

如果把 a.grad 在 python 中增加引用计数后,再打印的话 id 就固定了,估计问题在 C++ Tensor 和 py_ptr 的绑定处理中 ```python import oneflow as flow a = flow.ones(2, 3).requires_grad_() b = flow.ones(2, 3).requires_grad_() c = a + b...

### 原因 此问题是目前 C++ Tensor 对象和 PyTensorObject 的引用关系有缺陷造成的: ```cpp class Tensor { ...; PyObject* py_obj_; }; struct PyTensorObject { ...; std::shared_ptr data; }; ``` 其指针绑定和解绑的时机为: - CppTensor 被返回到 Python 端时,PyTensorObject...

> > PyTensorObject 尝试析构时,Tensor.owns_pyobj_ 置为 true,表示持有权交还给 CppTensor,PyTensorObject.data 置空,解除对 CppTensor 的引用,PyTensorObject 的引用计数+1,不对 PyTensorObject 做内存上的析构 > > 看起来就是缓存了一个 PyTensorObject 到 CppTensor 上? 是的,之前这一步是做一个双向的清除,导致了解绑,但实际上应该在 python 和 cpp 都析构时才做解绑

这个应该是相关的算子不支持 broadcast,可以把C++错误栈打出来看看

原因是 torch 的 diagonal 操作是个 view op: ```python import torch as torch_original print("torch test:") inputs = torch_original.rand(3, 3) y = inputs.diagonal(0) print(y.is_contiguous()) # False print(y.shape) # torch.Size([3]) print(y.stride() # (4,)...