error.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. from ray.rllib.utils.annotations import PublicAPI
  2. @PublicAPI
  3. class UnsupportedSpaceException(Exception):
  4. """Error for an unsupported action or observation space."""
  5. pass
  6. @PublicAPI
  7. class EnvError(Exception):
  8. """Error if we encounter an error during RL environment validation."""
  9. pass
  10. @PublicAPI
  11. class MultiAgentEnvError(Exception):
  12. """Error if we encounter an error during MultiAgentEnv stepping/validation."""
  13. pass
  14. @PublicAPI
  15. class NotSerializable(Exception):
  16. """Error if we encounter objects that can't be serialized by ray."""
  17. pass
  18. # -------
  19. # Error messages
  20. # -------
  21. # Message explaining there are no GPUs available for the
  22. # num_gpus=n or num_gpus_per_env_runner=m settings.
  23. ERR_MSG_NO_GPUS = """Found {} GPUs on your machine (GPU devices found: {})! If your
  24. machine does not have any GPUs, you should set the config keys
  25. `num_gpus_per_learner` and `num_gpus_per_env_runner` to 0. They may be set to
  26. 1 by default for your particular RL algorithm."""
  27. ERR_MSG_INVALID_ENV_DESCRIPTOR = """The env string you provided ('{}') is:
  28. a) Not a supported or an installed environment.
  29. b) Not a tune-registered environment creator.
  30. c) Not a valid env class string.
  31. Try one of the following:
  32. a) For Atari support: `pip install gymnasium[atari]` and prefix the environment name with `ale_py:`, for example, `"ale_py:ALE/Pong-v5"`.
  33. b) To register your custom env, do `from ray import tune; tune.register_env('[name]', lambda cfg: [return env obj from here using cfg])`.
  34. Then in your config, do `config.environment(env='[name]').
  35. c) Make sure you provide a fully qualified classpath, e.g.:
  36. `ray.rllib.examples.envs.classes.repeat_after_me_env.RepeatAfterMeEnv`
  37. """
  38. ERR_MSG_OLD_GYM_API = """Your environment ({}) does not abide to the new gymnasium-style API!
  39. From Ray 2.3 on, RLlib only supports the new (gym>=0.26 or gymnasium) Env APIs.
  40. {}
  41. Learn more about the most important changes here:
  42. https://github.com/openai/gym and here: https://github.com/Farama-Foundation/Gymnasium
  43. In order to fix this problem, do the following:
  44. 1) Run `pip install gymnasium` on your command line.
  45. 2) Change all your import statements in your code from
  46. `import gym` -> `import gymnasium as gym` OR
  47. `from gym.spaces import Discrete` -> `from gymnasium.spaces import Discrete`
  48. For your custom (single agent) gym.Env classes:
  49. 3.1) Either wrap your old Env class via the provided `from gymnasium.wrappers import
  50. EnvCompatibility` wrapper class.
  51. 3.2) Alternatively to 3.1:
  52. - Change your `reset()` method to have the call signature 'def reset(self, *,
  53. seed=None, options=None)'
  54. - Return an additional info dict (empty dict should be fine) from your `reset()`
  55. method.
  56. - Return an additional `truncated` flag from your `step()` method (between `done` and
  57. `info`). This flag should indicate, whether the episode was terminated prematurely
  58. due to some time constraint or other kind of horizon setting.
  59. For your custom RLlib `MultiAgentEnv` classes:
  60. 4.1) Either wrap your old MultiAgentEnv via the provided
  61. `from ray.rllib.env.wrappers.multi_agent_env_compatibility import
  62. MultiAgentEnvCompatibility` wrapper class.
  63. 4.2) Alternatively to 4.1:
  64. - Change your `reset()` method to have the call signature
  65. 'def reset(self, *, seed=None, options=None)'
  66. - Return an additional per-agent info dict (empty dict should be fine) from your
  67. `reset()` method.
  68. - Rename `dones` into `terminateds` and only set this to True, if the episode is really
  69. done (as opposed to has been terminated prematurely due to some horizon/time-limit
  70. setting).
  71. - Return an additional `truncateds` per-agent dictionary flag from your `step()`
  72. method, including the `__all__` key (100% analogous to your `dones/terminateds`
  73. per-agent dict).
  74. Return this new `truncateds` dict between `dones/terminateds` and `infos`. This
  75. flag should indicate, whether the episode (for some agent or all agents) was
  76. terminated prematurely due to some time constraint or other kind of horizon setting.
  77. """ # noqa
  78. ERR_MSG_TF_POLICY_CANNOT_SAVE_KERAS_MODEL = """Could not save keras model under self[TfPolicy].model.base_model!
  79. This is either due to ..
  80. a) .. this Policy's ModelV2 not having any `base_model` (tf.keras.Model) property
  81. b) .. the ModelV2's `base_model` not being used by the Algorithm and thus its
  82. variables not being properly initialized.
  83. """ # noqa
  84. ERR_MSG_TORCH_POLICY_CANNOT_SAVE_MODEL = """Could not save torch model under self[TorchPolicy].model!
  85. This is most likely due to the fact that you are using an Algorithm that
  86. uses a Catalog-generated TorchModelV2 subclass, which is torch.save() cannot pickle.
  87. """ # noqa
  88. # -------
  89. # HOWTO_ strings can be added to any error/warning/into message
  90. # to eplain to the user, how to actually fix the encountered problem.
  91. # -------
  92. # HOWTO change the RLlib config, depending on how user runs the job.
  93. HOWTO_CHANGE_CONFIG = """
  94. To change the config for `tune.Tuner().fit()` in a script: Modify the python dict
  95. passed to `tune.Tuner(param_space=[...]).fit()`.
  96. To change the config for an RLlib Algorithm instance: Modify the python dict
  97. passed to the Algorithm's constructor, e.g. `PPO(config=[...])`.
  98. """