# Owner(s): ["module: autograd"] from torch.testing._internal.common_utils import TestCase, run_tests, slowTest, IS_WINDOWS import subprocess import tempfile import os import unittest PYTORCH_COLLECT_COVERAGE = bool(os.environ.get("PYTORCH_COLLECT_COVERAGE")) # This is a very simple smoke test for the functional autograd benchmarking script. class TestFunctionalAutogradBenchmark(TestCase): def _test_runner(self, model, disable_gpu=False): # Note about windows: # The temporary file is exclusively open by this process and the child process # is not allowed to open it again. As this is a simple smoke test, we choose for now # not to run this on windows and keep the code here simple. with tempfile.NamedTemporaryFile() as out_file: cmd = ['python3', '../benchmarks/functional_autograd_benchmark/functional_autograd_benchmark.py'] # Only run the warmup cmd += ['--num-iters', '0'] # Only run the vjp task (fastest one) cmd += ['--task-filter', 'vjp'] # Only run the specified model cmd += ['--model-filter', model] # Output file cmd += ['--output', out_file.name] if disable_gpu: cmd += ['--gpu', '-1'] res = subprocess.run(cmd) self.assertTrue(res.returncode == 0) # Check that something was written to the file out_file.seek(0, os.SEEK_END) self.assertTrue(out_file.tell() > 0) @unittest.skipIf(IS_WINDOWS, "NamedTemporaryFile on windows does not have all the features we need.") @unittest.skipIf(PYTORCH_COLLECT_COVERAGE, "Can deadlocks with gcov, see https://github.com/pytorch/pytorch/issues/49656") def test_fast_tasks(self): fast_tasks = ['resnet18', 'ppl_simple_reg', 'ppl_robust_reg', 'wav2letter', 'transformer', 'multiheadattn'] for task in fast_tasks: self._test_runner(task) @slowTest @unittest.skipIf(IS_WINDOWS, "NamedTemporaryFile on windows does not have all the features we need.") def test_slow_tasks(self): slow_tasks = ['fcn_resnet', 'detr'] # deepspeech is voluntarily excluded as it takes too long to run without # proper tuning of the number of threads it should use. for task in slow_tasks: # Disable GPU for slow test as the CI GPU don't have enough memory self._test_runner(task, disable_gpu=True) if __name__ == '__main__': run_tests()