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/60384 Currently inlining module graph will drop module hierarchy info on Python side. Here we retrieve the module hierarchy from cpp side and expose it to a new Python API on Node called `moduleHierarchy()`. Test Plan: Usage: ``` torch._C._jit_pass_inline(module.graph) torch._C._jit_pass_propagate_shapes_on_graph(module.graph) node = module.graph.findNode("quantized::conv2d_relu") 'top(' + module.original_name + ').' + node.moduleHierarchy() + '.' + node.kind() ``` Output: ``` 'top(QuantWrapper).module(FBNetHR).0(Sequential).xif0_0(ConvBNRelu).conv(ConvReLU2d).quantized::conv2d_relu' ``` Reviewed By: kimishpatel Differential Revision: D29252169 fbshipit-source-id: 74163a87f919e061e5e75dfebc4c5cdbe8489d93
56 lines
1.8 KiB
C++
56 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include <torch/csrc/jit/ir/ir.h>
|
|
#include <torch/csrc/utils/object_ptr.h>
|
|
|
|
namespace torch {
|
|
namespace jit {
|
|
|
|
constexpr size_t kModuleInstanceInfo = 2;
|
|
|
|
void initPythonIRBindings(PyObject* module);
|
|
|
|
// execute a Python function, used for Ops we can't optimize but that we want to
|
|
// optimize around
|
|
struct ConcretePythonOp : public PythonOp {
|
|
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
|
static Symbol Kind;
|
|
|
|
ConcretePythonOp(Graph* graph) : PythonOp(graph, ::c10::prim::PythonOp) {}
|
|
ConcretePythonOp* init(
|
|
THPObjectPtr&& pyobj,
|
|
const std::string& cconv,
|
|
pyobj_list&& scalar_args) {
|
|
this->pyobj = std::move(pyobj);
|
|
this->scalar_args = std::move(scalar_args);
|
|
this->cconv = cconv;
|
|
return this;
|
|
}
|
|
// The Python object which contains the implementation of this function.
|
|
// This is either a class (non-legacy) or an object (legacy). See
|
|
// TraceInterpreterState for execution semantics.
|
|
THPObjectPtr pyobj;
|
|
// The calling convention for the Python function.
|
|
// 'c' -- constant argument
|
|
// 'd' -- dynamic argument
|
|
std::string cconv;
|
|
// Scalar arguments to the Python function. Not necessarily passed to
|
|
// the function in this order; see cconv for the correct order.
|
|
std::vector<THPObjectPtr> scalar_args;
|
|
|
|
std::string name() const override;
|
|
void cloneFrom(Node* other_) override;
|
|
Node* allocNewInstance(Graph* g) override {
|
|
return new ConcretePythonOp(g);
|
|
}
|
|
// recover the autograd.Function instance, if this PythonOp's function
|
|
// was originally SomeFunction.apply
|
|
// used in ONNX for discovering symbolics
|
|
c10::optional<THPObjectPtr> autogradFunction() const override;
|
|
void writeScalars(std::ostream& out) const override;
|
|
void lint_python() const override;
|
|
};
|
|
|
|
} // namespace jit
|
|
} // namespace torch
|