mirror of
https://github.com/saymrwulf/pytorch.git
synced 2026-05-15 21:00:47 +00:00
Summary: Pull Request resolved: https://github.com/pytorch/pytorch/pull/71666 When JIT autodiff is constructing a gradient computation graph, it will only add gradients for tensors that require_grad. Previously, require_grad information was **not** propagated to the subgraph that autodiff used; as a result, autodiff would calculate *all* gradients, even if requires_grad had never been set during profiling runs. In certain cases, this can lead to performance issues. For example, during training, the gradient of the input data is not needed, but is still computed. This propagates requires_grad to the subgraph passed into autodiff, so that autodiff will not compute unnecessary gradients. Test: `./bin/test_jit --gtest_filter="AutodiffRemoveUnusedGradientsTest.Linear"` Test Plan: Imported from OSS Reviewed By: eellison Differential Revision: D33725304 Pulled By: davidberard98 fbshipit-source-id: ca7ab4c9a6a26f94f93aff2d5a4135e125323ba1 (cherry picked from commit a97fe0556da1d74d04250c7cbcd1b8e9d8b41ebe) |
||
|---|---|---|
| .. | ||
| upgrader_models | ||
| __init__.py | ||
| CMakeLists.txt | ||
| README.md | ||
| script_module_v4.ptl | ||
| script_module_v5.ptl | ||
| script_module_v6.ptl | ||
| test_alias_analysis.cpp | ||
| test_argument_spec.cpp | ||
| test_autodiff.cpp | ||
| test_backend.cpp | ||
| test_backend_compiler_lib.cpp | ||
| test_backend_compiler_preprocess.cpp | ||
| test_backend_lib.cpp | ||
| test_class_import.cpp | ||
| test_class_parser.cpp | ||
| test_class_type.cpp | ||
| test_cleanup_passes.cpp | ||
| test_code_template.cpp | ||
| test_concat_opt.cpp | ||
| test_constant_pooling.cpp | ||
| test_create_autodiff_subgraphs.cpp | ||
| test_cs_debug_info_serialization.cpp | ||
| test_custom_class.cpp | ||
| test_custom_class_registrations.cpp | ||
| test_custom_class_registrations.h | ||
| test_custom_operators.cpp | ||
| test_dce.cpp | ||
| test_flatbuffer.cpp | ||
| test_fuser.cpp | ||
| test_gpu.cpp | ||
| test_gpu_shift.cpp | ||
| test_gpu_validator.h | ||
| test_graph_executor.cpp | ||
| test_graph_iterator.cpp | ||
| test_inliner.cpp | ||
| test_interface.cpp | ||
| test_interpreter.cpp | ||
| test_interpreter_async.pt | ||
| test_ir.cpp | ||
| test_irparser.cpp | ||
| test_jit_logging_levels.cpp | ||
| test_jit_type.cpp | ||
| test_lite_interpreter.cpp | ||
| test_lite_interpreter_direct.cpp | ||
| test_lite_trainer.cpp | ||
| test_load_upgraders.cpp | ||
| test_memory_dag.cpp | ||
| test_misc.cpp | ||
| test_mobile_type_parser.cpp | ||
| test_module_api.cpp | ||
| test_op_replacement.cpp | ||
| test_peephole_optimize.cpp | ||
| test_qualified_name.cpp | ||
| test_save_load.cpp | ||
| test_schema_matching.cpp | ||
| test_script_profile.cpp | ||
| test_shape_analysis.cpp | ||
| test_stack_opt.cpp | ||
| test_subgraph_matcher.cpp | ||
| test_subgraph_rewriter.cpp | ||
| test_subgraph_utils.cpp | ||
| test_union.cpp | ||
| test_upgrader_utils.cpp | ||
| test_utils.cpp | ||
| test_utils.h | ||
| tests_setup.py | ||
| torch_python_test.cpp | ||
JIT C++ Tests
Adding 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.
In general a single test suite
Add your test file to the JIT_TEST_SRCS list in test/cpp/jit/CMakeLists.txt.
A test file may look like:
#include <gtest/gtest.h>
using namespace ::torch::jit
TEST(FooTest, BarBaz) {
// ...
}
// Append '_CUDA' to the test case name will automatically filter it out if CUDA
// is not compiled.
TEST(FooTest, NeedsAGpu_CUDA) {
// ...
}
// Similarly, if only one GPU is detected, tests with `_MultiCUDA` at the end
// will not be run.
TEST(FooTest, NeedsMultipleGpus_MultiCUDA) {
// ...
}
Building and running the tests
The following commands assume you are in PyTorch root.
# ... Build PyTorch from source, e.g.
python setup.py develop
# (re)build just the binary
ninja -C build bin/test_jit
# run tests
build/bin/test_jit --gtest_filter='glob_style_filter*'