| # 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() |