diff --git a/rllib/env/env_runner.py b/rllib/env/env_runner.py index c407f02c42cb..0fdd8e5bf384 100644 --- a/rllib/env/env_runner.py +++ b/rllib/env/env_runner.py @@ -258,12 +258,10 @@ def _try_env_step(self, actions): except Exception as e: self.metrics.log_value(NUM_ENV_STEP_FAILURES_LIFETIME, 1, reduce="sum") - # @OldAPIStack (config.restart_failed_sub_environments) if self.config.restart_failed_sub_environments: if not isinstance(e, StepFailedRecreateEnvError): logger.exception( - "Stepping the env resulted in an error! The original error " - f"is: {e}" + f"RLlib {self.__class__.__name__}: Environment step failed. Will force reset env(s) in this EnvRunner. The original error is: {e}" ) # Recreate the env. self.make_env() @@ -272,11 +270,16 @@ def _try_env_step(self, actions): # data and repeating the step attempt). return ENV_STEP_FAILURE else: - if isinstance(e, StepFailedRecreateEnvError): - raise ValueError( - "Environment raised StepFailedRecreateEnvError but config.restart_failed_sub_environments is False." - ) from e - raise e + logger.exception( + f"RLlib {self.__class__.__name__}: Environment step failed and " + "'config.restart_failed_sub_environments' is False. " + "This env will not be recreated. " + "Consider setting 'fault_tolerance(restart_failed_sub_environments=True)' in your AlgorithmConfig " + "in order to automatically re-create and force-reset an env." + f"The original error type: {type(e)}. " + f"{e}" + ) + raise RuntimeError from e def _convert_to_tensor(self, struct) -> TensorType: """Converts structs to a framework-specific tensor.""" diff --git a/rllib/env/multi_agent_env_runner.py b/rllib/env/multi_agent_env_runner.py index f83733471fb1..dde79c67cef6 100644 --- a/rllib/env/multi_agent_env_runner.py +++ b/rllib/env/multi_agent_env_runner.py @@ -363,9 +363,6 @@ def _sample( # Try stepping the environment. results = self._try_env_step(actions_for_env) if results == ENV_STEP_FAILURE: - logging.warning( - f"RLlib {self.__class__.__name__}: Environment step failed. Will force reset env(s) in this EnvRunner." - ) return self._sample( num_timesteps=num_timesteps, num_episodes=num_episodes,