pytorch/test/cpp/jit
Yanan Cao 890b52e09f Reduce instability in runCleanUpPasses by reordering passes. (#41891)
Summary:
Currently constant pooling runs before const propagation, which can create more constants that need pooling. This can get in the way of serialization/deserialization stability because each time user serializes and deserializes a module, runCleanUpPasses is called upon it. Doing so multiple times would lead to different saved module.

This PR moves constant pooling after const propagation, which may slow down const propagation a little bit, but would otherwise side-step aforementioned problem.

test_constant_insertion in test_jit.py is also updated because after fixing the pass ordering, the number of constants is no longer a constant and it is extremely difficult to get the exact number with the current convoluted test structure. So for now, I changed the test to check only that CSE doesn't change number of "prim::constant" rather than comparing against a known number. Also left a TODO to improve this test.

ConstantPropagation pass is replaced by ConstantPropagationImmutableTypes because the latter is used in runCleanUpPasses. If not replaced, the former would create new CSE opportunities by folding more constants. This voids the purpose of the test case.

Pull Request resolved: https://github.com/pytorch/pytorch/pull/41891

Reviewed By: colesbury

Differential Revision: D22701540

Pulled By: gmagogsfm

fbshipit-source-id: 8e60dbdcc54a93dac111d81b8d88fb39387224f5
2020-07-24 11:39:20 -07:00
..
__init__.py remediation of S205607 2020-07-17 17:19:47 -07:00
CMakeLists.txt Reduce instability in runCleanUpPasses by reordering passes. (#41891) 2020-07-24 11:39:20 -07:00
gtest.cpp
README.md
test_alias_analysis.cpp
test_argument_spec.cpp
test_autodiff.cpp
test_backend.cpp [JIT] Add out-of-source-tree to_backend tests (#41145) 2020-07-14 10:57:04 -07:00
test_base.cpp
test_base.h
test_class_import.cpp Generalize constant_table from tensor only to ivalue (#40718) 2020-07-09 09:09:40 -07:00
test_class_parser.cpp
test_class_type.cpp
test_cleanup_passes.cpp Reduce instability in runCleanUpPasses by reordering passes. (#41891) 2020-07-24 11:39:20 -07:00
test_code_template.cpp
test_constant_pooling.cpp [JIT] Teach IRPrinter and IRParser to handle 'requires_grad' and 'device' as a part of type info. (#41507) 2020-07-17 10:27:04 -07:00
test_create_autodiff_subgraphs.cpp
test_custom_class.cpp
test_custom_operators.cpp
test_dce.cpp
test_fuser.cpp
test_gpu.cpp [nvFuser] Working towards reductions, codegen improvements (#40864) 2020-07-06 14:52:49 -07:00
test_graph_executor.cpp
test_inliner.cpp
test_interface.cpp Generalize constant_table from tensor only to ivalue (#40718) 2020-07-09 09:09:40 -07:00
test_interpreter.cpp
test_ir.cpp
test_irparser.cpp [JIT] Teach IRPrinter and IRParser to handle 'requires_grad' and 'device' as a part of type info. (#41507) 2020-07-17 10:27:04 -07:00
test_jit_type.cpp
test_lite_interpreter.cpp add named parameters to mobile module (#41376) 2020-07-20 15:57:49 -07:00
test_lite_trainer.cpp implement lite parameter serializer (#41403) 2020-07-23 14:25:44 -07:00
test_misc.cpp RecordFunction in Dispatcher (#37587) 2020-07-17 22:20:05 -07:00
test_mobile_type_parser.cpp
test_module_api.cpp
test_peephole_optimize.cpp
test_qualified_name.cpp
test_save_load.cpp
test_schema_matching.cpp
test_subgraph_matcher.cpp
test_subgraph_rewriter.cpp
test_subgraph_utils.cpp
test_utils.cpp
test_utils.h
tests.h Reduce instability in runCleanUpPasses by reordering passes. (#41891) 2020-07-24 11:39:20 -07:00
tests_setup.py
torch_python_test.cpp

JIT C++ Tests

How to add a new test

First, create a new test file. Test files should have be placed in this directory, with a name that starts with test_, like test_foo.cpp.

Here is an example test file you can copy-paste.

#include <test/cpp/jit/test_base.h>

// Tests go in torch::jit
namespace torch {
namespace jit {

// 1. Test cases are void() functions.
// 2. They start with the prefix `test`
void testCaseOne() {
    // ...
}

void testCaseTwo() {
    // ...
}
}
}

Then, register your test in tests.h:

// Add to TH_FORALL_TESTS_CUDA instead for CUDA-requiring tests
#define TH_FORALL_TESTS(_)             \
  _(ADFormulas)                        \
  _(Attributes)                        \
  ...
  _(CaseOne)  // note that the `test` prefix is omitted.
  _(CaseTwo)

We glob all the test files together in CMakeLists.txt so that you don't have to edit it every time you add a test. Unfortunately, this means that in order to get the build to pick up your new test file, you need to re-run cmake:

python setup.py build --cmake

Why do we have two different test runners?

We have two different ways of running our cpp tests:

  1. With gtest, from a standalone binary.
  2. With Python, from TestJit.test_cpp and TestJit.test_cpp_cuda (in test/test_jit.py)

We want both because we need to test things from a pure-C++ environment and with all our various Python patch-points enabled.

How do I run the tests?

The following commands assume you are in PyTorch root.

  1. With gtest:
    # (re)build the test binary
    ninja build/bin/test_jit
    # run
    build/bin/test_jit --gtest_filter='glob_style_filter*'
    
  2. With Python:
    python test/test_jit.py TestJit.test_cpp TestJit.test_cpp_cuda