浏览代码

[bug-fix] Fix exception thrown when quitting in-editor training from editor (#3885)

/release_1_branch
GitHub 4 年前
当前提交
ebe12502
共有 4 个文件被更改,包括 21 次插入6 次删除
  1. 6
      ml-agents-envs/mlagents_envs/environment.py
  2. 8
      ml-agents-envs/mlagents_envs/exception.py
  3. 2
      ml-agents/mlagents/trainers/subprocess_env_manager.py
  4. 11
      ml-agents/mlagents/trainers/trainer_controller.py

6
ml-agents-envs/mlagents_envs/environment.py


from mlagents_envs.timers import timed, hierarchical_timer
from mlagents_envs.exception import (
UnityEnvironmentException,
UnityCommunicationException,
UnityCommunicatorStoppedException,
)
from mlagents_envs.communicator_objects.command_pb2 import STEP, RESET

if self._loaded:
outputs = self.communicator.exchange(self._generate_reset_input())
if outputs is None:
raise UnityCommunicationException("Communicator has stopped.")
raise UnityCommunicatorStoppedException("Communicator has exited.")
self._update_behavior_specs(outputs)
rl_output = outputs.rl_output
self._update_state(rl_output)

with hierarchical_timer("communicator.exchange"):
outputs = self.communicator.exchange(step_input)
if outputs is None:
raise UnityCommunicationException("Communicator has stopped.")
raise UnityCommunicatorStoppedException("Communicator has exited.")
self._update_behavior_specs(outputs)
rl_output = outputs.rl_output
self._update_state(rl_output)

8
ml-agents-envs/mlagents_envs/exception.py


pass
class UnityCommunicatorStoppedException(UnityException):
"""
Raised when communicator has stopped gracefully.
"""
pass
class UnityObservationException(UnityException):
"""
Related to errors with receiving observations.

2
ml-agents/mlagents/trainers/subprocess_env_manager.py


UnityCommunicationException,
UnityTimeOutException,
UnityEnvironmentException,
UnityCommunicatorStoppedException,
)
from multiprocessing import Process, Pipe, Queue
from multiprocessing.connection import Connection

UnityCommunicationException,
UnityTimeOutException,
UnityEnvironmentException,
UnityCommunicatorStoppedException,
) as ex:
logger.info(f"UnityEnvironment worker {worker_id}: environment stopping.")
step_queue.put(

11
ml-agents/mlagents/trainers/trainer_controller.py


from mlagents_envs.exception import (
UnityEnvironmentException,
UnityCommunicationException,
UnityCommunicatorStoppedException,
)
from mlagents.trainers.sampler_class import SamplerManager
from mlagents_envs.timers import hierarchical_timer, timed

KeyboardInterrupt,
UnityCommunicationException,
UnityEnvironmentException,
UnityCommunicatorStoppedException,
if isinstance(ex, KeyboardInterrupt):
if isinstance(ex, KeyboardInterrupt) or isinstance(
ex, UnityCommunicatorStoppedException
):
if self.train_model:
self._export_graph()
finally:
if self.train_model:
self._export_graph()
def end_trainer_episodes(
self, env: EnvManager, lessons_incremented: Dict[str, bool]

正在加载...
取消
保存