diff --git a/setup.py b/setup.py index 53f754a5d..85b7efc80 100644 --- a/setup.py +++ b/setup.py @@ -19,8 +19,10 @@ print(f'Python {sys.version_info.major}.{sys.version_info.minor} detected.') if sys.version_info[:2] < (3, 11): import pkg_resources + # setuptools 66+ no longer supports Python 3.7, newer runtimes work with any recent version. + setuptools_req = 'setuptools>=45, <66' if sys.version_info[:2] < (3, 8) else 'setuptools>=45' try: - pkg_resources.require(['pip>=18', 'setuptools>=45, <66']) + pkg_resources.require(['pip>=18', setuptools_req]) except (pkg_resources.VersionConflict, pkg_resources.DistributionNotFound): print( '\033[93mTry update pip/setuptools versions, for example, ' diff --git a/superbench/runner/runner.py b/superbench/runner/runner.py index a5ac13cbb..e80ece005 100644 --- a/superbench/runner/runner.py +++ b/superbench/runner/runner.py @@ -154,8 +154,11 @@ def __get_mode_command(self, benchmark_name, mode, timeout=None): elif mode.name == 'torch.distributed': # TODO: replace with torch.distributed.run in v1.9 # TODO: only supports node_num=1 and node_num=all currently + # For single-node runs use torchrun's standalone rendezvous, which binds a random free + # port instead of the fixed default (29500). This avoids transient EADDRINUSE failures + # when consecutive distributed benchmarks reuse the same rendezvous port. torch_dist_params = ( - '' if 'node_num' in mode and mode.node_num == 1 else + '--standalone ' if 'node_num' in mode and mode.node_num == 1 else '--nnodes=$NNODES --node_rank=$NODE_RANK --master_addr=$MASTER_ADDR --master_port=$MASTER_PORT ' ) diff --git a/tests/runner/test_runner.py b/tests/runner/test_runner.py index fd45ae0a8..2280a5fc7 100644 --- a/tests/runner/test_runner.py +++ b/tests/runner/test_runner.py @@ -141,6 +141,7 @@ def test_get_mode_command(self): 'expected_command': ( 'torchrun ' '--no_python --nproc_per_node=8 ' + '--standalone ' f'sb exec --output-dir {self.sb_output_dir} -c sb.config.yaml -C superbench.enable=foo ' 'superbench.benchmarks.foo.parameters.distributed_impl=ddp ' 'superbench.benchmarks.foo.parameters.distributed_backend=nccl'