PyTorch MergeBot
463df86ce8
Revert "[pt2] add SymInt support for linalg.vander ( #102469 )"
...
This reverts commit 05717895aa .
Reverted https://github.com/pytorch/pytorch/pull/102469 on behalf of https://github.com/clee2000 due to broke test_aotdispatch on linux ex 05717895aa https://github.com/pytorch/pytorch/actions/runs/5125654882/jobs/9219389448 , shows up as green on pr due to bug with keep-going flag and reruns ([comment](https://github.com/pytorch/pytorch/pull/102469#issuecomment-1569041604 ))
2023-05-30 20:24:26 +00:00
Nikita Karetnikov
05717895aa
[pt2] add SymInt support for linalg.vander ( #102469 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/102469
Approved by: https://github.com/Skylion007 , https://github.com/lezcano
2023-05-30 19:50:16 +00:00
Nikita Karetnikov
b1b76f614d
[pt2] add SymInt support for linalg.tensorsolve ( #102466 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/102466
Approved by: https://github.com/Skylion007 , https://github.com/lezcano
2023-05-30 19:50:15 +00:00
Nikita Karetnikov
0ba81ce8fe
[pt2] add SymInt support for linalg.tensorinv ( #102465 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/102465
Approved by: https://github.com/Skylion007 , https://github.com/lezcano
2023-05-30 19:50:14 +00:00
Nikita Karetnikov
995ac703cd
[pt2] add SymInt support for linalg.pinv ( #102367 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/102367
Approved by: https://github.com/lezcano
2023-05-27 11:10:47 +00:00
PyTorch MergeBot
da3aba1e46
Revert "[pt2] add SymInt support for linalg.pinv ( #102367 )"
...
This reverts commit 0d5b74da0c .
Reverted https://github.com/pytorch/pytorch/pull/102367 on behalf of https://github.com/kit1980 due to Broke slow tests https://github.com/pytorch/pytorch/actions/runs/5095190248/jobs/9160028124 ([comment](https://github.com/pytorch/pytorch/pull/102367#issuecomment-1565104562 ))
2023-05-27 00:33:42 +00:00
Nikita Karetnikov
0d5b74da0c
[pt2] add SymInt support for linalg.pinv ( #102367 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/102367
Approved by: https://github.com/lezcano
2023-05-26 15:20:34 +00:00
vfdev-5
e3d97b6213
[inductor] Added smooth_l1_loss refs ( #102077 )
...
Added `smooth_l1_loss` to refs + tests
Pull Request resolved: https://github.com/pytorch/pytorch/pull/102077
Approved by: https://github.com/lezcano , https://github.com/ngimel
2023-05-24 15:07:08 +00:00
Edward Z. Yang
3318a832b3
Tighten FakeTensor reentrancy asserts, add debugging ( #102091 )
...
When investigating failures in https://github.com/pytorch/pytorch/pull/100017 I realized that we were reentering FakeTensorMode even though there was already one on the stack. Although we have attempted assert for these cases in the past, e.g., as in https://github.com/pytorch/pytorch/pull/97186 it seems that the existing protections were insufficient.
In this particular case, the reapplication of FakeTensorMode was due to an interaction with NotImplemented multiple dispatch handling. If proxy tensor mode detects an unrecognized tensor type (this includes FakeTensor, if it is not tracked with a proxy), it will return NotImplemented to give this tensor a chance to unpack itself into proxyable operation. However, this is never the right thing for FakeTensor, where no unpacking is possible. However, today, FakeTensor attempts to reapply the FakeTensorMode, resulting in FakeTensorMode being twice on the stack.
This PR does a number of things:
* It adds an assert in `FakeTensorMode.__torch_dispatch__` that you must not already have this mode on the stack, this is ALWAYS an error
* It modifies `FakeTensor.__torch_dispatch__` to return `NotImplemented` if the mode is already active. This prevents us from readding the mode on the stack
* It adds a new logging artifact `not_implemented` which you can use to get debug logs about all of the times a `__torch_dispatch__` handler returned NotImplemented and why it did so. Your subclass has to manually opt into this logging, but I inserted the necessary logs for ProxyTensorMode and FakeTensor(Mode)
* `with fake_mode` now no-ops if the fake mode is already on the stack, which is what users want anyway
* I am BREAKING pre-autograd tracing, because it is currently doing something weird with the original C++ mode stack. Brian is going to follow up with a fix next week.
Signed-off-by: Edward Z. Yang <ezyang@meta.com>
Pull Request resolved: https://github.com/pytorch/pytorch/pull/102091
Approved by: https://github.com/thiagocrepaldi , https://github.com/eellison , https://github.com/wanchaol , https://github.com/bdhirsh
2023-05-24 05:37:51 +00:00
Nikita Karetnikov
e79d9b9938
[pt2] add SymInt support for linalg.matrix_power ( #101940 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/101940
Approved by: https://github.com/lezcano , https://github.com/ezyang
2023-05-24 00:21:52 +00:00
Nikita Karetnikov
42b974e8f7
[pt2] add meta for linalg_lu_solve ( #101836 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/101836
Approved by: https://github.com/lezcano
2023-05-24 00:21:50 +00:00
Khushi
1aaf0396eb
[reland][opinfo] empty_strided ( #101782 )
...
Follows #100223
Previous PR: #100890
Pull Request resolved: https://github.com/pytorch/pytorch/pull/101782
Approved by: https://github.com/ezyang
2023-05-19 03:06:29 +00:00
drisspg
6f13d6892a
Add meta support for multinomial ( #101324 )
...
# Summary
Found this when trying to compile the text gen loop of nanogpt here: b33289942b/torchbenchmark/models/nanogpt_generate/model.py (L322)
Pull Request resolved: https://github.com/pytorch/pytorch/pull/101324
Approved by: https://github.com/ngimel
2023-05-19 00:04:26 +00:00
Angela Yi
72a73ef67b
Add aten.searchsorted.Tensor meta kernel ( #101637 )
...
Test Plan: CI
Differential Revision: D45933187
Pull Request resolved: https://github.com/pytorch/pytorch/pull/101637
Approved by: https://github.com/ezyang
2023-05-18 06:55:11 +00:00
PyTorch MergeBot
dfac4364c4
Revert "[opinfo] empty_strided ( #100890 )"
...
This reverts commit 01c7106580 .
Reverted https://github.com/pytorch/pytorch/pull/100890 on behalf of https://github.com/PaliC due to broke test_ops.py slow test ([comment](https://github.com/pytorch/pytorch/pull/100890#issuecomment-1551903975 ))
2023-05-17 19:00:15 +00:00
ydwu4
326a4cc815
Support map autograd and pytree in/out. ( #101633 )
...
Rebased https://github.com/pytorch/pytorch/pull/100494 and added dummy AOTConfig.
This PR adds autograd and pytree support for map operator.
Implementation-wise:
1. We temporarily make two HigherOrderOperators, "map" and "map_impl":
- "map" is user-facing. Currently, it unwraps the pytrees in inputs and create a flat_fn for it. Dynamo currently cannot deal with pytree.tree_flatten and pytree.tree_unflatten, we therefore make it a HigherOrderOperator to trigger dynamo logic of handling HigherOrderOperators.
- "map_impl" is the actual operator that works with the rest of torch subsystems such as functionalization, make_fx. It accepts flattend arguments, and a num_mapped_args integer denoting how many of the flattend arguments need to mapped i.e. their first dimension will be unstacked.
2. We create the forward and backward graph in autograd key and call torch.autograd.Function. Currently, the backward graph is recomputation-based and we need to partition the joint graph in the future to be more efficient.
Example traced graphs for map operators:
### Case 1: simple f and autograd
```python
def f(x, y):
return x + y
def g(xs, y):
out = control_flow.map(f, xs, y)
return torch.autograd.grad(out, (xs, y), torch.ones_like(out))
gm = make_fx(g, tracing_mode="symbolic")(torch.ones(3, 4, 5, requires_grad=True), torch.ones(5, requires_grad=True))
# gm.print_readable() produces following:
class g(torch.nn.Module):
def forward(self, xs_1: f32[3, s1, s2], y_1: f32[s2]):
# No stacktrace found for following nodes
body_graph_0 = self.body_graph_0
map_impl = torch.ops.map_impl(body_graph_0, 1, xs_1, y_1); body_graph_0 = None
getitem: f32[3, s1, s2] = map_impl[0]; map_impl = None
ones_like: f32[3, s1, s2] = torch.ops.aten.ones_like.default(getitem, pin_memory = False)
is_same_size = torch.ops.aten.is_same_size.default(getitem, ones_like); getitem = None
body_graph_1 = self.body_graph_1
map_impl_1 = torch.ops.map_impl(body_graph_1, 2, xs_1, ones_like, y_1); body_graph_1 = xs_1 = ones_like = None
getitem_1 = map_impl_1[0]
getitem_2: f32[3, s1, s2] = map_impl_1[1]
getitem_3: f32[3, s2] = map_impl_1[2]; map_impl_1 = None
sum_1: f32[1, s2] = torch.ops.aten.sum.dim_IntList(getitem_3, [0], True); getitem_3 = None
sym_size: Sym(s2) = torch.ops.aten.sym_size(y_1, 0); y_1 = None
view: f32[s2] = torch.ops.aten.view.default(sum_1, [sym_size]); sum_1 = sym_size = None
return (getitem_2, view)
class <lambda>(torch.nn.Module):
def forward(self, arg0_1, arg1_1: f32[s1, s2], arg2_1: f32[s2]):
# No stacktrace found for following nodes
add: f32[s1, s2] = torch.ops.aten.add.Tensor(arg1_1, arg2_1); arg1_1 = arg2_1 = None
return [add]
class <lambda>(torch.nn.Module):
def forward(self, arg0_1, arg1_1: f32[s1, s2], arg2_1: f32[s1, s2], arg3_1: f32[s2]):
# No stacktrace found for following nodes
add: f32[s1, s2] = torch.ops.aten.add.Tensor(arg1_1, arg3_1); arg1_1 = None
is_same_size = torch.ops.aten.is_same_size.default(add, arg2_1); add = None
sum_1: f32[1, s2] = torch.ops.aten.sum.dim_IntList(arg2_1, [0], True)
sym_size: Sym(s2) = torch.ops.aten.sym_size(arg3_1, 0); arg3_1 = None
view: f32[s2] = torch.ops.aten.view.default(sum_1, [sym_size]); sum_1 = sym_size = None
return [None, arg2_1, view]
```
### Case 2: list input/output f and autograd
```python
def f(x, y):
return [x[0].cos() + y.sin(), x[1].sin() * y.cos()]
def g(xs, y):
out = control_flow.map(f, xs, y)
flat_out, _ = pytree.tree_flatten(out)
flat_inp, _ = pytree.tree_flatten((xs, y))
requires_grad_inp = [inp for inp in flat_inp if inp.requires_grad]
return torch.autograd.grad(flat_out, requires_grad_inp, [torch.ones_like(out) for out in flat_out])
gm = make_fx(g, tracing_mode="symbolic")(
[torch.ones(3, 4, 5), torch.ones(3, 4, 5, requires_grad=True)],
torch.ones(5, requires_grad=True))
# gm.print_readable() produces following:
class g(torch.nn.Module):
def forward(self, xs, y):
xs_1: f32[3, s1, s2], xs_2: f32[3, s1, s2], y_1: f32[s2], = fx_pytree.tree_flatten_spec([xs, y], self._in_spec)
# No stacktrace found for following nodes
body_graph_0 = self.body_graph_0
map_impl = torch.ops.map_impl(body_graph_0, 2, xs_1, xs_2, y_1); body_graph_0 = None
getitem: f32[3, s1, s2] = map_impl[0]
getitem_1: f32[3, s1, s2] = map_impl[1]; map_impl = None
ones_like: f32[3, s1, s2] = torch.ops.aten.ones_like.default(getitem, pin_memory = False)
ones_like_1: f32[3, s1, s2] = torch.ops.aten.ones_like.default(getitem_1, pin_memory = False)
is_same_size = torch.ops.aten.is_same_size.default(getitem, ones_like); getitem = None
is_same_size_1 = torch.ops.aten.is_same_size.default(getitem_1, ones_like_1); getitem_1 = None
body_graph_1 = self.body_graph_1
map_impl_1 = torch.ops.map_impl(body_graph_1, 4, xs_1, xs_2, ones_like, ones_like_1, y_1); body_graph_1 = xs_1 = xs_2 = ones_like = ones_like_1 = None
getitem_2 = map_impl_1[0]
getitem_3 = map_impl_1[1]
getitem_4: f32[3, s1, s2] = map_impl_1[2]
getitem_5: f32[3, s2] = map_impl_1[3]; map_impl_1 = None
sum_1: f32[1, s2] = torch.ops.aten.sum.dim_IntList(getitem_5, [0], True); getitem_5 = None
sym_size: Sym(s2) = torch.ops.aten.sym_size(y_1, 0); y_1 = None
view: f32[s2] = torch.ops.aten.view.default(sum_1, [sym_size]); sum_1 = sym_size = None
return pytree.tree_unflatten([getitem_4, view], self._out_spec)
class <lambda>(torch.nn.Module):
def forward(self, arg0_1, arg1_1: f32[s1, s2], arg2_1: f32[s1, s2], arg3_1: f32[s2]):
# No stacktrace found for following nodes
cos: f32[s1, s2] = torch.ops.aten.cos.default(arg1_1); arg1_1 = None
sin: f32[s2] = torch.ops.aten.sin.default(arg3_1)
add: f32[s1, s2] = torch.ops.aten.add.Tensor(cos, sin); cos = sin = None
sin_1: f32[s1, s2] = torch.ops.aten.sin.default(arg2_1); arg2_1 = None
cos_1: f32[s2] = torch.ops.aten.cos.default(arg3_1); arg3_1 = None
mul: f32[s1, s2] = torch.ops.aten.mul.Tensor(sin_1, cos_1); sin_1 = cos_1 = None
return [add, mul]
class <lambda>(torch.nn.Module):
def forward(self, arg0_1, arg1_1: f32[s1, s2], arg2_1: f32[s1, s2], arg3_1: f32[s1, s2], arg4_1: f32[s1, s2], arg5_1: f32[s2]):
# No stacktrace found for following nodes
cos: f32[s1, s2] = torch.ops.aten.cos.default(arg1_1); arg1_1 = None
sin: f32[s2] = torch.ops.aten.sin.default(arg5_1)
add: f32[s1, s2] = torch.ops.aten.add.Tensor(cos, sin); cos = sin = None
sin_1: f32[s1, s2] = torch.ops.aten.sin.default(arg2_1)
cos_1: f32[s2] = torch.ops.aten.cos.default(arg5_1)
mul: f32[s1, s2] = torch.ops.aten.mul.Tensor(sin_1, cos_1)
is_same_size = torch.ops.aten.is_same_size.default(add, arg3_1); add = None
is_same_size_1 = torch.ops.aten.is_same_size.default(mul, arg4_1); mul = None
mul_1: f32[s1, s2] = torch.ops.aten.mul.Tensor(arg4_1, sin_1); sin_1 = None
mul_2: f32[s1, s2] = torch.ops.aten.mul.Tensor(arg4_1, cos_1); arg4_1 = cos_1 = None
sum_1: f32[1, s2] = torch.ops.aten.sum.dim_IntList(mul_1, [0], True); mul_1 = None
sym_size: Sym(s2) = torch.ops.aten.sym_size(arg5_1, 0)
view: f32[s2] = torch.ops.aten.view.default(sum_1, [sym_size]); sum_1 = None
#
sin_2: f32[s2] = torch.ops.aten.sin.default(arg5_1)
neg: f32[s2] = torch.ops.aten.neg.default(sin_2); sin_2 = None
mul_3: f32[s2] = torch.ops.aten.mul.Tensor(view, neg); view = neg = None
cos_2: f32[s1, s2] = torch.ops.aten.cos.default(arg2_1); arg2_1 = None
mul_4: f32[s1, s2] = torch.ops.aten.mul.Tensor(mul_2, cos_2); mul_2 = cos_2 = None
sum_2: f32[1, s2] = torch.ops.aten.sum.dim_IntList(arg3_1, [0], True); arg3_1 = None
view_1: f32[s2] = torch.ops.aten.view.default(sum_2, [sym_size]); sum_2 = sym_size = None
cos_3: f32[s2] = torch.ops.aten.cos.default(arg5_1); arg5_1 = None
mul_5: f32[s2] = torch.ops.aten.mul.Tensor(view_1, cos_3); view_1 = cos_3 = None
add_1: f32[s2] = torch.ops.aten.add.Tensor(mul_3, mul_5); mul_3 = mul_5 = None
return [None, None, mul_4, add_1]
```
Pull Request resolved: https://github.com/pytorch/pytorch/pull/101633
Approved by: https://github.com/zou3519
2023-05-17 16:52:26 +00:00
PyTorch MergeBot
e69198b043
Revert "Support map autograd and pytree in/out ( #100494 )"
...
This reverts commit b8fa41be9d .
Reverted https://github.com/pytorch/pytorch/pull/100494 on behalf of https://github.com/PaliC due to breaking tests on trunk, please check hud.pytorch.org for the broken tests ([comment](https://github.com/pytorch/pytorch/pull/100494#issuecomment-1550454835 ))
2023-05-16 22:50:18 +00:00
ydwu4
b8fa41be9d
Support map autograd and pytree in/out ( #100494 )
...
This PR adds autograd and pytree support for map operator.
Implementation-wise:
1. We temporarily make two HigherOrderOperators, "map" and "map_impl":
- "map" is user-facing. Currently, it unwraps the pytrees in inputs and create a flat_fn for it. Dynamo currently cannot deal with pytree.tree_flatten and pytree.tree_unflatten, we therefore make it a HigherOrderOperator to trigger dynamo logic of handling HigherOrderOperators.
- "map_impl" is the actual operator that works with the rest of torch subsystems such as functionalization, make_fx. It accepts flattend arguments, and a num_mapped_args integer denoting how many of the flattend arguments need to mapped i.e. their first dimension will be unstacked.
2. We create the forward and backward graph in autograd key and call torch.autograd.Function. Currently, the backward graph is recomputation-based and we need to partition the joint graph in the future to be more efficient.
Example traced graphs for map operators:
### Case 1: simple f and autograd
```python
def f(x, y):
return x + y
def g(xs, y):
out = control_flow.map(f, xs, y)
return torch.autograd.grad(out, (xs, y), torch.ones_like(out))
gm = make_fx(g, tracing_mode="symbolic")(torch.ones(3, 4, 5, requires_grad=True), torch.ones(5, requires_grad=True))
# gm.print_readable() produces following:
class g(torch.nn.Module):
def forward(self, xs_1: f32[3, s1, s2], y_1: f32[s2]):
# No stacktrace found for following nodes
body_graph_0 = self.body_graph_0
map_impl = torch.ops.map_impl(body_graph_0, 1, xs_1, y_1); body_graph_0 = None
getitem: f32[3, s1, s2] = map_impl[0]; map_impl = None
ones_like: f32[3, s1, s2] = torch.ops.aten.ones_like.default(getitem, pin_memory = False)
is_same_size = torch.ops.aten.is_same_size.default(getitem, ones_like); getitem = None
body_graph_1 = self.body_graph_1
map_impl_1 = torch.ops.map_impl(body_graph_1, 2, xs_1, ones_like, y_1); body_graph_1 = xs_1 = ones_like = None
getitem_1 = map_impl_1[0]
getitem_2: f32[3, s1, s2] = map_impl_1[1]
getitem_3: f32[3, s2] = map_impl_1[2]; map_impl_1 = None
sum_1: f32[1, s2] = torch.ops.aten.sum.dim_IntList(getitem_3, [0], True); getitem_3 = None
sym_size: Sym(s2) = torch.ops.aten.sym_size(y_1, 0); y_1 = None
view: f32[s2] = torch.ops.aten.view.default(sum_1, [sym_size]); sum_1 = sym_size = None
return (getitem_2, view)
class <lambda>(torch.nn.Module):
def forward(self, arg0_1, arg1_1: f32[s1, s2], arg2_1: f32[s2]):
# No stacktrace found for following nodes
add: f32[s1, s2] = torch.ops.aten.add.Tensor(arg1_1, arg2_1); arg1_1 = arg2_1 = None
return [add]
class <lambda>(torch.nn.Module):
def forward(self, arg0_1, arg1_1: f32[s1, s2], arg2_1: f32[s1, s2], arg3_1: f32[s2]):
# No stacktrace found for following nodes
add: f32[s1, s2] = torch.ops.aten.add.Tensor(arg1_1, arg3_1); arg1_1 = None
is_same_size = torch.ops.aten.is_same_size.default(add, arg2_1); add = None
sum_1: f32[1, s2] = torch.ops.aten.sum.dim_IntList(arg2_1, [0], True)
sym_size: Sym(s2) = torch.ops.aten.sym_size(arg3_1, 0); arg3_1 = None
view: f32[s2] = torch.ops.aten.view.default(sum_1, [sym_size]); sum_1 = sym_size = None
return [None, arg2_1, view]
```
### Case 2: list input/output f and autograd
```python
def f(x, y):
return [x[0].cos() + y.sin(), x[1].sin() * y.cos()]
def g(xs, y):
out = control_flow.map(f, xs, y)
flat_out, _ = pytree.tree_flatten(out)
flat_inp, _ = pytree.tree_flatten((xs, y))
requires_grad_inp = [inp for inp in flat_inp if inp.requires_grad]
return torch.autograd.grad(flat_out, requires_grad_inp, [torch.ones_like(out) for out in flat_out])
gm = make_fx(g, tracing_mode="symbolic")(
[torch.ones(3, 4, 5), torch.ones(3, 4, 5, requires_grad=True)],
torch.ones(5, requires_grad=True))
# gm.print_readable() produces following:
class g(torch.nn.Module):
def forward(self, xs, y):
xs_1: f32[3, s1, s2], xs_2: f32[3, s1, s2], y_1: f32[s2], = fx_pytree.tree_flatten_spec([xs, y], self._in_spec)
# No stacktrace found for following nodes
body_graph_0 = self.body_graph_0
map_impl = torch.ops.map_impl(body_graph_0, 2, xs_1, xs_2, y_1); body_graph_0 = None
getitem: f32[3, s1, s2] = map_impl[0]
getitem_1: f32[3, s1, s2] = map_impl[1]; map_impl = None
ones_like: f32[3, s1, s2] = torch.ops.aten.ones_like.default(getitem, pin_memory = False)
ones_like_1: f32[3, s1, s2] = torch.ops.aten.ones_like.default(getitem_1, pin_memory = False)
is_same_size = torch.ops.aten.is_same_size.default(getitem, ones_like); getitem = None
is_same_size_1 = torch.ops.aten.is_same_size.default(getitem_1, ones_like_1); getitem_1 = None
body_graph_1 = self.body_graph_1
map_impl_1 = torch.ops.map_impl(body_graph_1, 4, xs_1, xs_2, ones_like, ones_like_1, y_1); body_graph_1 = xs_1 = xs_2 = ones_like = ones_like_1 = None
getitem_2 = map_impl_1[0]
getitem_3 = map_impl_1[1]
getitem_4: f32[3, s1, s2] = map_impl_1[2]
getitem_5: f32[3, s2] = map_impl_1[3]; map_impl_1 = None
sum_1: f32[1, s2] = torch.ops.aten.sum.dim_IntList(getitem_5, [0], True); getitem_5 = None
sym_size: Sym(s2) = torch.ops.aten.sym_size(y_1, 0); y_1 = None
view: f32[s2] = torch.ops.aten.view.default(sum_1, [sym_size]); sum_1 = sym_size = None
return pytree.tree_unflatten([getitem_4, view], self._out_spec)
class <lambda>(torch.nn.Module):
def forward(self, arg0_1, arg1_1: f32[s1, s2], arg2_1: f32[s1, s2], arg3_1: f32[s2]):
# No stacktrace found for following nodes
cos: f32[s1, s2] = torch.ops.aten.cos.default(arg1_1); arg1_1 = None
sin: f32[s2] = torch.ops.aten.sin.default(arg3_1)
add: f32[s1, s2] = torch.ops.aten.add.Tensor(cos, sin); cos = sin = None
sin_1: f32[s1, s2] = torch.ops.aten.sin.default(arg2_1); arg2_1 = None
cos_1: f32[s2] = torch.ops.aten.cos.default(arg3_1); arg3_1 = None
mul: f32[s1, s2] = torch.ops.aten.mul.Tensor(sin_1, cos_1); sin_1 = cos_1 = None
return [add, mul]
class <lambda>(torch.nn.Module):
def forward(self, arg0_1, arg1_1: f32[s1, s2], arg2_1: f32[s1, s2], arg3_1: f32[s1, s2], arg4_1: f32[s1, s2], arg5_1: f32[s2]):
# No stacktrace found for following nodes
cos: f32[s1, s2] = torch.ops.aten.cos.default(arg1_1); arg1_1 = None
sin: f32[s2] = torch.ops.aten.sin.default(arg5_1)
add: f32[s1, s2] = torch.ops.aten.add.Tensor(cos, sin); cos = sin = None
sin_1: f32[s1, s2] = torch.ops.aten.sin.default(arg2_1)
cos_1: f32[s2] = torch.ops.aten.cos.default(arg5_1)
mul: f32[s1, s2] = torch.ops.aten.mul.Tensor(sin_1, cos_1)
is_same_size = torch.ops.aten.is_same_size.default(add, arg3_1); add = None
is_same_size_1 = torch.ops.aten.is_same_size.default(mul, arg4_1); mul = None
mul_1: f32[s1, s2] = torch.ops.aten.mul.Tensor(arg4_1, sin_1); sin_1 = None
mul_2: f32[s1, s2] = torch.ops.aten.mul.Tensor(arg4_1, cos_1); arg4_1 = cos_1 = None
sum_1: f32[1, s2] = torch.ops.aten.sum.dim_IntList(mul_1, [0], True); mul_1 = None
sym_size: Sym(s2) = torch.ops.aten.sym_size(arg5_1, 0)
view: f32[s2] = torch.ops.aten.view.default(sum_1, [sym_size]); sum_1 = None
#
sin_2: f32[s2] = torch.ops.aten.sin.default(arg5_1)
neg: f32[s2] = torch.ops.aten.neg.default(sin_2); sin_2 = None
mul_3: f32[s2] = torch.ops.aten.mul.Tensor(view, neg); view = neg = None
cos_2: f32[s1, s2] = torch.ops.aten.cos.default(arg2_1); arg2_1 = None
mul_4: f32[s1, s2] = torch.ops.aten.mul.Tensor(mul_2, cos_2); mul_2 = cos_2 = None
sum_2: f32[1, s2] = torch.ops.aten.sum.dim_IntList(arg3_1, [0], True); arg3_1 = None
view_1: f32[s2] = torch.ops.aten.view.default(sum_2, [sym_size]); sum_2 = sym_size = None
cos_3: f32[s2] = torch.ops.aten.cos.default(arg5_1); arg5_1 = None
mul_5: f32[s2] = torch.ops.aten.mul.Tensor(view_1, cos_3); view_1 = cos_3 = None
add_1: f32[s2] = torch.ops.aten.add.Tensor(mul_3, mul_5); mul_3 = mul_5 = None
return [None, None, mul_4, add_1]
```
Pull Request resolved: https://github.com/pytorch/pytorch/pull/100494
Approved by: https://github.com/zou3519
2023-05-16 22:05:11 +00:00
Nikita Karetnikov
42e65a2587
[pt2] add meta for linalg_lu_factor_ex ( #101375 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/101375
Approved by: https://github.com/lezcano
2023-05-16 20:56:54 +00:00
Khushi
01c7106580
[opinfo] empty_strided ( #100890 )
...
Follows: #100223
Pull Request resolved: https://github.com/pytorch/pytorch/pull/100890
Approved by: https://github.com/ezyang
2023-05-15 23:39:39 +00:00
Nikita Karetnikov
9eb1748b2b
[pt2] add meta and SymInt support for linalg_lu ( #101372 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/101372
Approved by: https://github.com/lezcano , https://github.com/albanD
2023-05-15 20:25:00 +00:00
Nikita Karetnikov
ac4cc63ae2
[pt2] add meta for linalg_ldl_solve ( #101367 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/101367
Approved by: https://github.com/lezcano
2023-05-15 20:25:00 +00:00
Nikita Karetnikov
7dd8e08817
[pt2] add meta for linalg_ldl_factor_ex ( #101362 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/101362
Approved by: https://github.com/lezcano
2023-05-15 02:56:49 +00:00
Nikita Karetnikov
a8964d6377
[pt2] add meta and SymInt support for linalg_householder_product ( #101315 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/101315
Approved by: https://github.com/lezcano
2023-05-15 02:56:49 +00:00
Nikita Karetnikov
6abde61f8e
[pt2] add meta function for _linalg_eigh ( #100964 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/100964
Approved by: https://github.com/ezyang
2023-05-10 15:45:15 +00:00
Khushi
51fe53e619
[opinfo] item ( #100313 )
...
Follows #100223
Pull Request resolved: https://github.com/pytorch/pytorch/pull/100313
Approved by: https://github.com/ezyang
2023-05-10 11:32:45 +00:00
Nikita Karetnikov
1e591a8b64
[pt2] add meta function for solve_triangular ( #100829 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/100829
Approved by: https://github.com/ezyang
2023-05-08 13:48:15 +00:00
Nikita Karetnikov
266c84e3ab
[pt2] add meta function for linalg_qr ( #100714 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/100714
Approved by: https://github.com/ezyang , https://github.com/lezcano
2023-05-06 15:04:02 +00:00
Nikita Karetnikov
37f1be041a
[pt2] enable svd in fake_tensor ( #100130 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/100130
Approved by: https://github.com/ezyang , https://github.com/lezcano
2023-05-05 06:27:59 +00:00
Michael Voznesensky
fe3ecfe0cf
Add AotAutogradFallbackTests to dynamic suite ( #100454 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/100454
Approved by: https://github.com/ezyang
2023-05-04 04:28:45 +00:00
Nikita Karetnikov
e87ed2a88d
[primTorch] add ref for polar ( #100345 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/100345
Approved by: https://github.com/ezyang
2023-05-04 01:37:02 +00:00
Nikita Karetnikov
279f3cd0a6
[pt2] add SymInt support for dsplit, hsplit, vsplit ( #100352 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/100352
Approved by: https://github.com/Skylion007 , https://github.com/ezyang
2023-05-02 18:51:03 +00:00
Nikita Karetnikov
41361538a9
[pt2] add SymInt support for tensordot and inner ( #100356 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/100356
Approved by: https://github.com/ezyang
2023-05-02 14:42:50 +00:00
Brian Hirsh
62fad315c1
fix per-dispatchkey-mode caching bug ( #98030 )
...
The bug was that: if you want to move a mode to the autograd key, we need to use the "functionality" key for it (AutogradFunctionality). But when we do that, we need to clear any PythonDispatcher caches for every op for **every** autograd key (since you could run autograd ops with both cpu and cuda tensors underneath the mode, which both may have been cached).
I didn't add a test, since this ends up getting indirectly tests by export in the PR. If someone would prefer a direct test I can add one.
Pull Request resolved: https://github.com/pytorch/pytorch/pull/98030
Approved by: https://github.com/ezyang
2023-04-25 21:58:14 +00:00
Aaron Gokaslan
e2a3817dfd
[BE] Enable C419 rule for any all shortcircuiting ( #99890 )
...
Apparently https://github.com/pytorch/pytorch/pull/78142 made torch.JIT allow for simple generator expressions which allows us to enable rules that replace unnecessary list comprehensions with generators in any/all. This was originally part of #99280 but I split it off into this PR so that it can be easily reverted should anything break.
Pull Request resolved: https://github.com/pytorch/pytorch/pull/99890
Approved by: https://github.com/justinchuby , https://github.com/kit1980 , https://github.com/malfet
2023-04-25 15:02:13 +00:00
Nikita Karetnikov
fbb0ff10a4
[pt2] add SymInt support for trapezoid ops ( #99281 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/99281
Approved by: https://github.com/ezyang
2023-04-25 00:44:25 +00:00
Wanchao Liang
ff7d5b62d4
Improve ProxyTensor tensor_tree list/tuple handling ( #99897 )
...
This PR improves the list/tuple handling by merging the logic into
`wrap_with_proxy` directly, and set_meta when we find the current
proxy is a fx.Proxy. This also solves the problem that even `fused_adam`
have `val`, some corresponding `getitem` calls followed after `fused_adam` don't have val
Pull Request resolved: https://github.com/pytorch/pytorch/pull/99897
Approved by: https://github.com/ezyang
2023-04-24 22:50:02 +00:00
Michael Voznesensky
4c2892944f
Guard static shapes alongside tensors, instead of from shape_env, in dynamic_shapes=True ( #99566 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/99566
Approved by: https://github.com/ezyang
2023-04-22 16:46:52 +00:00
Edward Z. Yang
10c938abef
Handle meta['val'] for tuple of lists. ( #99724 )
...
Fixes https://github.com/pytorch/pytorch/issues/99356
Signed-off-by: Edward Z. Yang <ezyang@meta.com>
Pull Request resolved: https://github.com/pytorch/pytorch/pull/99724
Approved by: https://github.com/wanchaol
2023-04-21 22:33:21 +00:00
Elias Ellison
638feec4e3
Turn on meta converter for complex ( #98869 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/98869
Approved by: https://github.com/ngimel
2023-04-20 16:42:38 +00:00
Richard Zou
44b09bf673
Reland "Simple Custom Operator API, V0 ( #98440 )" ( #99416 )
...
See the original PR (#98440 ) for the description. It broke internal
builds due to proxy_tensor.py not importing torch._dynamo, which is
being fixed in the previous PR in the stack.
Pull Request resolved: https://github.com/pytorch/pytorch/pull/99416
Approved by: https://github.com/soulitzer , https://github.com/bdhirsh
2023-04-18 23:48:33 +00:00
PyTorch MergeBot
f497031df9
Revert "Simple Custom Operator API, V0 ( #98440 )"
...
This reverts commit 0157b2d722 .
Reverted https://github.com/pytorch/pytorch/pull/98440 on behalf of https://github.com/DanilBaibak due to Break internal build
2023-04-18 13:04:27 +00:00
Nikita Karetnikov
106ccf4a2a
[pt2] add meta function for linalg.cross ( #99279 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/99279
Approved by: https://github.com/ezyang
2023-04-17 21:21:45 +00:00
Nikita Karetnikov
6f7b434f7b
[pt2] add SymInt support for column_stack ( #99276 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/99276
Approved by: https://github.com/ezyang
2023-04-17 21:21:45 +00:00
PyTorch MergeBot
08dd4ad0b9
Revert "[pt2] add SymInt support for column_stack ( #99276 )"
...
This reverts commit 775dd869d0 .
Reverted https://github.com/pytorch/pytorch/pull/99276 on behalf of https://github.com/ezyang due to reverting this one too for safety
2023-04-17 19:37:58 +00:00
PyTorch MergeBot
f957334c2b
Revert "[pt2] add meta function for linalg.cross ( #99279 )"
...
This reverts commit efc3887ea5 .
Reverted https://github.com/pytorch/pytorch/pull/99279 on behalf of https://github.com/ezyang due to Apparently this is breaking inductor on master? So weird
2023-04-17 19:33:16 +00:00
Tugsbayasgalan Manlaibaatar
7401f0f8ce
Add unbacked symbool support ( #98877 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/98877
Approved by: https://github.com/ezyang
2023-04-17 17:45:10 +00:00
Richard Zou
0157b2d722
Simple Custom Operator API, V0 ( #98440 )
...
This PR introduces CustomOp, a wrapper around a dispatcher operator that allows
users to define custom operators. It adds the skeleton for CustomOp and
some very simple behavior: as of this PR:
- one can create a CustomOp for an operator that does not have inplace or aliasing
- give it CPU/CUDA and Meta implementations
- and trace it into a graph via make_fx.
The design follows
https://docs.google.com/document/d/19Uc5OUCA187q9BZggJb70RT2ZoSTDoG5QQkJkZwd25M/edit
Concretely, we implement the following things mentioned in the doc in this PR:
- Entrypoint 1 (CustomOp.define, creating a new custom operator)
- impl (to define device-specific code) and impl_meta (to define meta
formulas)
The goal for the short term is to get the code to a state where it can be trialed
by the export folks. On top of this PR, the blockers are:
- adding Entrypoint 3 (CustomOp.from_existing)
- adding a way to do data-dependent shape formulas
These will come in future PRs since this one is getting long.
Things that will come in the longer-near-term (before 2.1):
- adding the other entrypoints mentioned in the doc (2 & 3)
- more safety checks and better error messages
- support for views and mutation
- support for defining autograd formulas
- support for functionalization
- making this API public (it's private right now).
Test Plan:
- added a new test case, TestCustomOp. It mostly tests a bunch of error
cases.
- added OpInfos for custom operators and hooked these up to
test_proxy_tensor to test that they work with make_fx. These custom
operators were based off of the ones in the autograd_function_db.
Pull Request resolved: https://github.com/pytorch/pytorch/pull/98440
Approved by: https://github.com/ezyang
2023-04-17 12:17:32 +00:00
Nikita Karetnikov
efc3887ea5
[pt2] add meta function for linalg.cross ( #99279 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/99279
Approved by: https://github.com/ezyang
2023-04-17 03:05:20 +00:00
Nikita Karetnikov
775dd869d0
[pt2] add SymInt support for column_stack ( #99276 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/99276
Approved by: https://github.com/ezyang
2023-04-17 03:05:20 +00:00