blob: 91af29796b9d9e4db1cfe2c3af206946ef8a7d5a [file] [log] [blame]
import os
import sys
import torch
class Setup(object):
def setup(self):
raise NotImplementedError()
def shutdown(self):
raise NotImplementedError()
class FileSetup(object):
path = None
def shutdown(self):
if os.path.exists(self.path):
os.remove(self.path)
pass
class ModelWithDTypeDeviceLayoutPinMemory(FileSetup):
path = 'ones.ptl'
def setup(self):
class Model(torch.nn.Module):
def forward(self, x: int):
a = torch.ones(size=[3, x], dtype=torch.int64, layout=torch.strided, device="cpu", pin_memory=False)
return a
model = Model()
# Script the model and save
script_model = torch.jit.script(model)
script_model._save_for_lite_interpreter(self.path)
class ModelWithTensorOptional(FileSetup):
path = 'index.ptl'
def setup(self):
class Model(torch.nn.Module):
def forward(self, index):
a = torch.zeros(2, 2)
a[0][1] = 1
a[1][0] = 2
a[1][1] = 3
return a[index]
model = Model()
# Script the model and save
script_model = torch.jit.script(model)
script_model._save_for_lite_interpreter(self.path)
# gradient.scalarrayint(Tensor self, *, Scalar[] spacing, int? dim=None, int edge_order=1) -> Tensor[]
class ModelWithScalarList(FileSetup):
path = 'gradient.ptl'
def setup(self):
class Model(torch.nn.Module):
def forward(self, a: int):
values = torch.tensor([4., 1., 1., 16.], )
if a == 0:
return torch.gradient(values, spacing=torch.scalar_tensor(2., dtype=torch.float64))
elif a == 1:
return torch.gradient(values, spacing=[torch.tensor(1.).item()])
model = Model()
# Script the model and save
script_model = torch.jit.script(model)
script_model._save_for_lite_interpreter(self.path)
# upsample_linear1d.vec(Tensor input, int[]? output_size, bool align_corners, float[]? scale_factors) -> Tensor
class ModelWithFloatList(FileSetup):
path = 'upsample.ptl'
def setup(self):
model = torch.nn.Upsample(scale_factor=(2.0,), mode="linear", align_corners=False, recompute_scale_factor=True)
# Script the model and save
script_model = torch.jit.script(model)
script_model._save_for_lite_interpreter(self.path)
# index.Tensor(Tensor self, Tensor?[] indices) -> Tensor
class ModelWithListOfOptionalTensors(FileSetup):
path = 'index_Tensor.ptl'
def setup(self):
class Model(torch.nn.Module):
def forward(self, index):
values = torch.tensor([[4., 1., 1., 16.]])
return values[torch.tensor(0), index]
model = Model()
# Script the model and save
script_model = torch.jit.script(model)
script_model._save_for_lite_interpreter(self.path)
# conv2d(Tensor input, Tensor weight, Tensor? bias=None, int[2] stride=1, int[2] padding=0, int[2] dilation=1,
# int groups=1) -> Tensor
class ModelWithArrayOfInt(FileSetup):
path = 'conv2d.ptl'
def setup(self):
model = torch.nn.Conv2d(1, 2, (2, 2), stride=(1, 1), padding=(1, 1))
# Script the model and save
script_model = torch.jit.script(model)
script_model._save_for_lite_interpreter(self.path)
# add.Tensor(Tensor self, Tensor other, *, Scalar alpha=1) -> Tensor
# ones_like(Tensor self, *, ScalarType?, dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None,
# MemoryFormat? memory_format=None) -> Tensor
class ModelWithTensors(FileSetup):
path = 'add_Tensor.ptl'
def setup(self):
class Model(torch.nn.Module):
def forward(self, a):
b = torch.ones_like(a)
return a + b
model = Model()
# Script the model and save
script_model = torch.jit.script(model)
script_model._save_for_lite_interpreter(self.path)
class ModelWithStringOptional(FileSetup):
path = 'divide_Tensor.ptl'
def setup(self):
class Model(torch.nn.Module):
def forward(self, b):
a = torch.tensor(3, dtype=torch.int64)
out = torch.empty(size=[1], dtype=torch.float)
torch.div(b, a, out=out)
return [torch.div(b, a, rounding_mode='trunc'), out]
model = Model()
# Script the model and save
script_model = torch.jit.script(model)
script_model._save_for_lite_interpreter(self.path)
class ModelWithMultipleOps(FileSetup):
path = 'multiple_ops.ptl'
def setup(self):
class Model(torch.nn.Module):
def __init__(self):
super(Model, self).__init__()
self.ops = torch.nn.Sequential(
torch.nn.ReLU(),
torch.nn.Flatten(),
)
def forward(self, x):
x[1] = -2
return self.ops(x)
model = Model()
# Script the model and save
script_model = torch.jit.script(model)
script_model._save_for_lite_interpreter(self.path)
tests = [
ModelWithDTypeDeviceLayoutPinMemory(),
ModelWithTensorOptional(),
ModelWithScalarList(),
ModelWithFloatList(),
ModelWithListOfOptionalTensors(),
ModelWithArrayOfInt(),
ModelWithTensors(),
ModelWithStringOptional(),
ModelWithMultipleOps(),
]
def setup():
for test in tests:
test.setup()
def shutdown():
for test in tests:
test.shutdown()
if __name__ == "__main__":
command = sys.argv[1]
if command == "setup":
setup()
elif command == "shutdown":
shutdown()