import torch import torch_mlir import npcomp from npcomp.compiler.pytorch.backend import refjit, frontend_lowering from npcomp.compiler.utils import logging import test_utils logging.enable() torch.manual_seed(0) input = torch.rand(2, 3) mb = torch_mlir.ModuleBuilder() with mb.capture_function("cos", [input]) as f: result = torch.cos(input) f.returns([result]) backend = iree.IreeNpcompBackend() jit_module = backend.load( backend.compile(frontend_lowering.lower_module(mb.module))) logging.debug(f"Executing jit_module.cos") test_utils.compare_outputs(torch.cos, jit_module.cos, input) # This fails because ModuleBuilder represents torch.cos with a constant: # https://github.com/llvm/mlir-npcomp/issues/135 test_utils.compare_outputs(torch.cos, jit_module.cos, input + 1)
from npcomp.compiler.pytorch.backend import refjit, frontend_lowering from npcomp.compiler.utils import logging import test_utils logging.enable() lhs = torch.ones((4, 6, 1)) rhs = torch.ones((1, 1, 3)) * 0.6 bias = torch.ones((1, 1, 3)) * 0.2 threshold = torch.tensor((0.75, 0.25, 0.10)) def mul_maximum(lhs, rhs, threshold, bias): return torch.maximum(lhs * rhs, threshold) + bias mb = torch_mlir.ModuleBuilder() with mb.capture_function("mul_maximum", [lhs, rhs, threshold, bias]) as f: result = mul_maximum(lhs, rhs, threshold, bias) f.returns([result]) backend = iree.IreeNpcompBackend() jit_module = backend.load( backend.compile(frontend_lowering.lower_module(mb.module))) test_utils.compare_outputs(mul_maximum, jit_module.mul_maximum, lhs, rhs, threshold, bias) test_utils.compare_outputs(mul_maximum, jit_module.mul_maximum, lhs + 1, rhs + 2, threshold, bias)
class TestModule(torch.nn.Module): def __init__(self): super().__init__() def forward(self, x): return torch.tanh(x) test_module = TestModule() class_annotator = torch_mlir.ClassAnnotator() recursivescriptmodule = torch.jit.script(test_module) torch.jit.save(recursivescriptmodule, '/tmp/foo.pt') class_annotator.exportNone(recursivescriptmodule._c._type()) class_annotator.exportPath(recursivescriptmodule._c._type(), ['forward']) class_annotator.annotateArgs(recursivescriptmodule._c._type(), ['forward'], [None, ([2, 3, -1], torch.float32, True)]) # TODO: Automatically handle unpacking Python class RecursiveScriptModule into the underlying ScriptModule. mb.import_module(recursivescriptmodule._c, class_annotator) #mb.module.operation.print() backend = iree.IreeNpcompBackend() compiled = backend.compile(frontend_lowering.lower_object_graph(mb.module)) jit_module = backend.load(compiled) torch.manual_seed(0) input = torch.rand(2, 3, 1) test_utils.compare_outputs(test_module.forward, jit_module.forward, input)
# -*- Python -*- # This file is licensed under a pytorch-style license # See frontends/pytorch/LICENSE for license information. import torch import torch_mlir import npcomp from npcomp.compiler.pytorch.backend import refjit from npcomp.compiler.utils import logging import test_utils logging.enable() torch.manual_seed(0) lhs = torch.rand(2, 3) rhs = torch.rand(3, 4) mb = torch_mlir.ModuleBuilder() with mb.capture_function("mm", [lhs, rhs]) as f: result = torch.mm(lhs, rhs) f.returns([result]) backend = refjit.CompilerBackend() jit_module = backend.load(backend.compile(mb.module)) test_utils.compare_outputs(torch.mm, jit_module.mm, lhs, rhs) test_utils.compare_outputs(torch.mm, jit_module.mm, lhs + 1, rhs - 1)
import torch_mlir import npcomp from npcomp.compiler.pytorch.backend import refjit, frontend_lowering from npcomp.compiler.utils import logging import test_utils logging.enable() torch.manual_seed(0) arg0 = torch.ones(2, 2) arg1 = torch.ones(2, 2) def fun(a, b): return a.div_(b) mb = torch_mlir.ModuleBuilder() with mb.capture_function("test", [arg0, arg1]) as f: f.returns([fun(arg0, arg1)]) backend = iree.IreeNpcompBackend() jit_module = backend.load( backend.compile(frontend_lowering.lower_module(mb.module))) test_utils.compare_outputs(torch.mm, jit_module.test, arg0, arg1) test_utils.compare_outputs(torch.mm, jit_module.test, arg0 + 1, arg1 + 1)
self.s = Submodule() def forward(self, lhs, rhs): return self.s.forward(lhs, rhs) test_module = TestModule() class_annotator = torch_mlir.ClassAnnotator() recursivescriptmodule = torch.jit.script(test_module) torch.jit.save(recursivescriptmodule, '/tmp/foo.pt') class_annotator.exportNone(recursivescriptmodule._c._type()) class_annotator.exportPath(recursivescriptmodule._c._type(), ['forward']) class_annotator.annotateArgs(recursivescriptmodule._c._type(), ['forward'], [ None, ([-1, -1], torch.float32), ([-1, -1], torch.float32), ]) # TODO: Automatically handle unpacking Python class RecursiveScriptModule into the underlying ScriptModule. mb.import_module(recursivescriptmodule._c, class_annotator) #mb.module.operation.print() backend = iree.IreeNpcompBackend() compiled = backend.compile(frontend_lowering.lower_object_graph(mb.module)) jit_module = backend.load(compiled) torch.manual_seed(0) lhs = torch.rand(2, 3) rhs = torch.rand(3, 4) test_utils.compare_outputs(test_module.forward, jit_module.forward, lhs, rhs)