I developed an C++ operator which replaces index_add with a few modifications. Its first argument is modified in-place. It has the following signature:
TORCH_LIBRARY(ops, m) {
m.def("index_add(Tensor tensor1, int dim, Tensor indices, Tensor values) -> Tensor");
}
Where tensor1
is modified in-place and returned for convenience.
When using this operator, torch.compile complains that the in-place modified argument is not returned as an output. In reality it is, but it can’t know that from the signature.
RuntimeError: Some elements marked as dirty during the forward method were not returned as output. The inputs that are modified inplace must all be outputs of the Function.
How do I declare that the modified tensor is indeed an output as well?
I tried to blindly use something I saw in the pytorch source on the op signature declaration:
m.def("index_add(Tensor tensor1(a!), int dim, Tensor indices, Tensor values) -> Tensor(a!)");
but it doesn’t seem to fix the problem.