mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-07 12:21:27 +01:00
Summary: Pull Request resolved: https://github.com/pytorch/pytorch/pull/51342 There is a subtle bug with the MemoryPlanner with regard to view ops with out variant. ``` def forward(self, a: Tensor, shape: List[int]): b = a.reshape(shape) return b + b ``` In this case, if we replace reshape with the out variant, b would be managed by the MemoryPlanner and the storage of its output would have been set to nullptr right after inference by the MemoryPlanner if opts.cleanup_activations is true. Because b is a view of a, the storage of a is also set to nullptr, and this violates the API which promises that a is const. To fix this bug, I changed the MemoryPlanner so that it puts b in the unmanaged part. Test Plan: Add unit test to enforce the constness of inputs ``` buck test //caffe2/benchmarks/static_runtime:static_runtime_cpptest ``` Reviewed By: ajyu Differential Revision: D26144203 fbshipit-source-id: 2dbacccf7685d0fe0f0b1195166e0510b2069fe3
51 lines
1.1 KiB
C
51 lines
1.1 KiB
C
#pragma once
|
|
|
|
#include <torch/torch.h>
|
|
|
|
const auto list_construct_script = R"JIT(
|
|
def forward(self, a, b):
|
|
return [a, b]
|
|
)JIT";
|
|
|
|
const auto list_unpack_script = R"JIT(
|
|
def forward(self, a, b):
|
|
c = [a, b]
|
|
x, y = c
|
|
z = x + y
|
|
return z
|
|
)JIT";
|
|
|
|
const auto tuple_construct_script = R"JIT(
|
|
def forward(self, a, b):
|
|
return (a, b)
|
|
)JIT";
|
|
|
|
const auto add_script = R"JIT(
|
|
def forward(self, a, b):
|
|
return a + b
|
|
)JIT";
|
|
|
|
const auto reshape_script_1 = R"JIT(
|
|
def forward(self, a: Tensor, shape: List[int]):
|
|
b = a.reshape(shape)
|
|
return b + b
|
|
)JIT";
|
|
|
|
const auto reshape_script_2 = R"JIT(
|
|
def forward(self, a: Tensor, shape: List[int]):
|
|
b = a.transpose(0, 1)
|
|
return b.reshape(shape)
|
|
)JIT";
|
|
|
|
const auto flatten_script_1 = R"JIT(
|
|
def forward(self, a: Tensor, start_dim: int, end_dim: int):
|
|
b = torch.flatten(a, start_dim, end_dim)
|
|
return b + b
|
|
)JIT";
|
|
|
|
const auto flatten_script_2 = R"JIT(
|
|
def forward(self, a: Tensor, start_dim: int, end_dim: int):
|
|
b = a.transpose(0, 1)
|
|
return torch.flatten(b, start_dim, end_dim)
|
|
)JIT";
|