diff --git a/pytorch_lightning/trainer/connectors/accelerator_connector.py b/pytorch_lightning/trainer/connectors/accelerator_connector.py index 8271cf9bdc742..a80a470cb6f94 100644 --- a/pytorch_lightning/trainer/connectors/accelerator_connector.py +++ b/pytorch_lightning/trainer/connectors/accelerator_connector.py @@ -277,7 +277,8 @@ def _set_devices_if_none(self) -> None: self.devices = self.num_processes def _handle_accelerator_and_strategy(self) -> None: - if self.distributed_backend is not None and self.distributed_backend in list(DistributedType): + deprecated_types = [t for t in DistributedType if t not in (DistributedType.TPU_SPAWN, DistributedType.DDP_CPU)] + if self.distributed_backend is not None and self.distributed_backend in deprecated_types: rank_zero_deprecation( f"Passing `Trainer(accelerator={self.distributed_backend!r})` has been deprecated" f" in v1.5 and will be removed in v1.7. Use `Trainer(strategy={self.distributed_backend!r})` instead." diff --git a/tests/accelerators/test_accelerator_connector.py b/tests/accelerators/test_accelerator_connector.py index 7ad93b167794d..3d56a3a44ee9f 100644 --- a/tests/accelerators/test_accelerator_connector.py +++ b/tests/accelerators/test_accelerator_connector.py @@ -68,7 +68,8 @@ def test_accelerator_choice_ddp_cpu(tmpdir, num_processes: int, num_nodes: int): @mock.patch("torch.cuda.device_count", return_value=2) @mock.patch("torch.cuda.is_available", return_value=True) def test_accelerator_choice_ddp(cuda_available_mock, device_count_mock): - trainer = Trainer(fast_dev_run=True, accelerator="ddp", gpus=1) + with pytest.deprecated_call(match=r"accelerator='ddp'\)` has been deprecated"): + trainer = Trainer(fast_dev_run=True, accelerator="ddp", gpus=1) assert isinstance(trainer.accelerator, GPUAccelerator) assert isinstance(trainer.training_type_plugin, DDPPlugin) assert isinstance(trainer.training_type_plugin.cluster_environment, LightningEnvironment) @@ -78,7 +79,8 @@ def test_accelerator_choice_ddp(cuda_available_mock, device_count_mock): @mock.patch("torch.cuda.device_count", return_value=2) @mock.patch("torch.cuda.is_available", return_value=True) def test_accelerator_choice_ddp_spawn(cuda_available_mock, device_count_mock): - trainer = Trainer(fast_dev_run=True, accelerator="ddp_spawn", gpus=1) + with pytest.deprecated_call(match=r"accelerator='ddp_spawn'\)` has been deprecated"): + trainer = Trainer(fast_dev_run=True, accelerator="ddp_spawn", gpus=1) assert isinstance(trainer.accelerator, GPUAccelerator) assert isinstance(trainer.training_type_plugin, DDPSpawnPlugin) assert isinstance(trainer.training_type_plugin.cluster_environment, LightningEnvironment) @@ -105,7 +107,7 @@ def on_fit_start(self, trainer, pl_module): assert isinstance(trainer.training_type_plugin, DDPPlugin) assert isinstance(trainer.training_type_plugin.cluster_environment, SLURMEnvironment) assert trainer.training_type_plugin.cluster_environment.local_rank() == 1 - assert trainer.training_type_plugin.task_idx == 1 + assert trainer.training_type_plugin.local_rank == 1 raise SystemExit() model = BoringModel() @@ -137,7 +139,7 @@ def on_fit_start(self, trainer, pl_module): assert isinstance(trainer.training_type_plugin, DDP2Plugin) assert isinstance(trainer.training_type_plugin.cluster_environment, SLURMEnvironment) assert trainer.training_type_plugin.cluster_environment.local_rank() == 1 - assert trainer.training_type_plugin.task_idx == 1 + assert trainer.training_type_plugin.local_rank == 1 raise SystemExit() model = BoringModel() @@ -168,7 +170,7 @@ def on_fit_start(self, trainer, pl_module): assert isinstance(trainer.training_type_plugin, DDPPlugin) assert isinstance(trainer.training_type_plugin.cluster_environment, TorchElasticEnvironment) assert trainer.training_type_plugin.cluster_environment.local_rank() == 1 - assert trainer.training_type_plugin.task_idx == 1 + assert trainer.training_type_plugin.local_rank == 1 raise SystemExit() model = BoringModel() @@ -199,7 +201,7 @@ def on_fit_start(self, trainer, pl_module): assert isinstance(trainer.training_type_plugin, DDP2Plugin) assert isinstance(trainer.training_type_plugin.cluster_environment, TorchElasticEnvironment) assert trainer.training_type_plugin.cluster_environment.local_rank() == 1 - assert trainer.training_type_plugin.task_idx == 1 + assert trainer.training_type_plugin.local_rank == 1 raise SystemExit() model = BoringModel() @@ -221,7 +223,7 @@ def on_fit_start(self, trainer, pl_module): assert isinstance(trainer.training_type_plugin, DDPPlugin) assert isinstance(trainer.training_type_plugin.cluster_environment, TorchElasticEnvironment) assert trainer.training_type_plugin.cluster_environment.local_rank() == 1 - assert trainer.training_type_plugin.task_idx == 1 + assert trainer.training_type_plugin.local_rank == 1 raise SystemExit() model = BoringModel() @@ -252,7 +254,7 @@ def on_fit_start(self, trainer, pl_module): assert isinstance(trainer.training_type_plugin, DDPPlugin) assert isinstance(trainer.training_type_plugin.cluster_environment, KubeflowEnvironment) assert trainer.training_type_plugin.cluster_environment.local_rank() == 0 - assert trainer.training_type_plugin.task_idx == 0 + assert trainer.training_type_plugin.local_rank == 0 raise SystemExit() model = BoringModel() @@ -281,7 +283,7 @@ def on_fit_start(self, trainer, pl_module): assert isinstance(trainer.training_type_plugin, DDPPlugin) assert isinstance(trainer.training_type_plugin.cluster_environment, KubeflowEnvironment) assert trainer.training_type_plugin.cluster_environment.local_rank() == 0 - assert trainer.training_type_plugin.task_idx == 0 + assert trainer.training_type_plugin.local_rank == 0 raise SystemExit() model = BoringModel() @@ -311,7 +313,7 @@ def on_fit_start(self, trainer, pl_module): assert isinstance(trainer.accelerator, CPUAccelerator) assert isinstance(trainer.training_type_plugin, DDPPlugin) assert isinstance(trainer.training_type_plugin.cluster_environment, SLURMEnvironment) - assert trainer.training_type_plugin.task_idx == 0 + assert trainer.training_type_plugin.local_rank == 0 raise SystemExit() model = BoringModel() @@ -435,7 +437,7 @@ class CB(Callback): def on_fit_start(self, trainer, pl_module): assert isinstance(trainer.accelerator, CPUAccelerator) assert isinstance(trainer.training_type_plugin, DDPPlugin) - assert trainer.training_type_plugin.task_idx == 0 + assert trainer.training_type_plugin.local_rank == 0 raise SystemExit() model = BoringModel() @@ -463,10 +465,16 @@ def test_ipython_compatible_backend(*_): @pytest.mark.parametrize(["accelerator", "plugin"], [("ddp_spawn", "ddp_sharded"), (None, "ddp_sharded")]) def test_plugin_accelerator_choice(accelerator: Optional[str], plugin: str): """Ensure that when a plugin and accelerator is passed in, that the plugin takes precedent.""" - trainer = Trainer(accelerator=accelerator, plugins=plugin, num_processes=2) + if accelerator is None: + with pytest.deprecated_call(match="Passing .* `strategy` to the `plugins`"): + trainer = Trainer(accelerator=accelerator, plugins=plugin, num_processes=2) + else: + with pytest.deprecated_call(match=r"accelerator=.*\)` has been deprecated"): + trainer = Trainer(accelerator=accelerator, plugins=plugin, num_processes=2) assert isinstance(trainer.accelerator.training_type_plugin, DDPShardedPlugin) - trainer = Trainer(plugins=plugin, num_processes=2) + with pytest.deprecated_call(match="Passing .* `strategy` to the `plugins`"): + trainer = Trainer(plugins=plugin, num_processes=2) assert isinstance(trainer.accelerator.training_type_plugin, DDPShardedPlugin) @@ -486,7 +494,8 @@ def test_plugin_accelerator_choice(accelerator: Optional[str], plugin: str): def test_accelerator_choice_multi_node_gpu( mock_is_available, mock_device_count, tmpdir, accelerator: str, plugin: ParallelPlugin, gpus: int ): - trainer = Trainer(accelerator=accelerator, default_root_dir=tmpdir, num_nodes=2, gpus=gpus) + with pytest.deprecated_call(match=r"accelerator=.*\)` has been deprecated"): + trainer = Trainer(accelerator=accelerator, default_root_dir=tmpdir, num_nodes=2, gpus=gpus) assert isinstance(trainer.training_type_plugin, plugin) @@ -630,13 +639,16 @@ def test_unsupported_distrib_types_on_cpu(training_type): def test_accelerator_ddp_for_cpu(tmpdir): - trainer = Trainer(accelerator="ddp", num_processes=2) + with pytest.deprecated_call(match=r"accelerator='ddp'\)` has been deprecated"): + trainer = Trainer(accelerator="ddp", num_processes=2) assert isinstance(trainer.accelerator, CPUAccelerator) assert isinstance(trainer.training_type_plugin, DDPPlugin) def test_exception_when_strategy_used_with_accelerator(): - with pytest.raises(MisconfigurationException, match="but have also passed"): + with pytest.raises(MisconfigurationException, match="but have also passed"), pytest.deprecated_call( + match=r"accelerator='ddp'\)` has been deprecated" + ): Trainer(accelerator="ddp", strategy="ddp_spawn") @@ -762,7 +774,7 @@ def on_fit_start(self, trainer, pl_module): assert isinstance(trainer.training_type_plugin, DDPPlugin) assert isinstance(trainer.training_type_plugin.cluster_environment, SLURMEnvironment) assert trainer.training_type_plugin.cluster_environment.local_rank() == 1 - assert trainer.training_type_plugin.task_idx == 1 + assert trainer.training_type_plugin.local_rank == 1 raise SystemExit() model = BoringModel() @@ -794,7 +806,7 @@ def on_fit_start(self, trainer, pl_module): assert isinstance(trainer.training_type_plugin, DDP2Plugin) assert isinstance(trainer.training_type_plugin.cluster_environment, SLURMEnvironment) assert trainer.training_type_plugin.cluster_environment.local_rank() == 1 - assert trainer.training_type_plugin.task_idx == 1 + assert trainer.training_type_plugin.local_rank == 1 raise SystemExit() model = BoringModel() @@ -825,7 +837,7 @@ def on_fit_start(self, trainer, pl_module): assert isinstance(trainer.training_type_plugin, DDPPlugin) assert isinstance(trainer.training_type_plugin.cluster_environment, TorchElasticEnvironment) assert trainer.training_type_plugin.cluster_environment.local_rank() == 1 - assert trainer.training_type_plugin.task_idx == 1 + assert trainer.training_type_plugin.local_rank == 1 raise SystemExit() model = BoringModel() @@ -856,7 +868,7 @@ def on_fit_start(self, trainer, pl_module): assert isinstance(trainer.training_type_plugin, DDP2Plugin) assert isinstance(trainer.training_type_plugin.cluster_environment, TorchElasticEnvironment) assert trainer.training_type_plugin.cluster_environment.local_rank() == 1 - assert trainer.training_type_plugin.task_idx == 1 + assert trainer.training_type_plugin.local_rank == 1 raise SystemExit() model = BoringModel() @@ -878,7 +890,7 @@ def on_fit_start(self, trainer, pl_module): assert isinstance(trainer.training_type_plugin, DDPPlugin) assert isinstance(trainer.training_type_plugin.cluster_environment, TorchElasticEnvironment) assert trainer.training_type_plugin.cluster_environment.local_rank() == 1 - assert trainer.training_type_plugin.task_idx == 1 + assert trainer.training_type_plugin.local_rank == 1 raise SystemExit() model = BoringModel() @@ -909,7 +921,7 @@ def on_fit_start(self, trainer, pl_module): assert isinstance(trainer.training_type_plugin, DDPPlugin) assert isinstance(trainer.training_type_plugin.cluster_environment, KubeflowEnvironment) assert trainer.training_type_plugin.cluster_environment.local_rank() == 0 - assert trainer.training_type_plugin.task_idx == 0 + assert trainer.training_type_plugin.local_rank == 0 raise SystemExit() model = BoringModel() @@ -938,7 +950,7 @@ def on_fit_start(self, trainer, pl_module): assert isinstance(trainer.training_type_plugin, DDPPlugin) assert isinstance(trainer.training_type_plugin.cluster_environment, KubeflowEnvironment) assert trainer.training_type_plugin.cluster_environment.local_rank() == 0 - assert trainer.training_type_plugin.task_idx == 0 + assert trainer.training_type_plugin.local_rank == 0 raise SystemExit() model = BoringModel() @@ -968,7 +980,7 @@ def on_fit_start(self, trainer, pl_module): assert isinstance(trainer.accelerator, CPUAccelerator) assert isinstance(trainer.training_type_plugin, DDPPlugin) assert isinstance(trainer.training_type_plugin.cluster_environment, SLURMEnvironment) - assert trainer.training_type_plugin.task_idx == 0 + assert trainer.training_type_plugin.local_rank == 0 raise SystemExit() model = BoringModel()