0

当尝试在任意 rllib 多代理环境中将 3D 形状的 Box 空间传输到代理时,程序崩溃并给出提示消息“A worker 在执行任务时因意外的系统错误而死亡或被杀死,并且 RayActorError:演员在完成这项任务之前意外死亡”。但是,如果输入空间是一维空间,则可以避免该错误。该错误与特定的 3D 形状大小无关,shape=(84, 84, 3) 或任何自定义的 3D 形状大小都会有同样的问题。

有什么方法可以输入 3D 形状而不会出现此错误?射线版本是 1.9.2

核心代码是(例如使用 A3C Trainer):

trainer = A3CTrainer(env="env", config={
    "multiagent": {
        "policies": {
            '0': (A3CTFPolicy, spaces.Box(low=0., high=1., shape=(84, 84, 3)), spaces.Discrete(2), {}),  #bug occurs when the shape=(84,84,3)
            #'0': (A3CTFPolicy, spaces.Box(low=0., high=1., shape=(84, )), spaces.Discrete(2), {}), #bug is avoided when shape = (84,)
        },
        "policy_mapping_fn": lambda id: '0'  #unique policy
    },
})

日志是: Traceback(最近一次调用最后一次):

文件“...\A3C - fortest.py”,第 12 行,在 trainer = A3CTrainer(env="env", config={

文件“...\envs\tensorflow\lib\site-packages\ray\rllib\agents\trainer_template.py”,第 102 行,在 init Trainer.init(self, config, env, logger_creator,

文件“...\envs\tensorflow\lib\site-packages\ray\rllib\agents\trainer.py”,第 661 行,在 init super().init(config, logger_creator, remote_checkpoint_dir,

文件“...\envs\tensorflow\lib\site-packages\ray\tune\trainable.py”,第 121 行,在 init self.setup(copy.deepcopy(self.config))

文件“...\envs\tensorflow\lib\site-packages\ray\rllib\agents\trainer_template.py”,第 113 行,在 setup super().setup(config)

文件“...\envs\tensorflow\lib\site-packages\ray\rllib\agents\trainer.py”,第 764 行,在 setup self._init(self.config, self.env_creator)

文件“...\envs\tensorflow\lib\site-packages\ray\rllib\agents\trainer_template.py”,第 136 行,在 _init

_make_workers 中的文件“...\envs\tensorflow\lib\site-packages\ray\rllib\agents\trainer.py”,第 1727 行,返回 WorkerSet(

文件“...\envs\tensorflow\lib\site-packages\ray\rllib\evaluation\worker_set.py”,第 87 行,在 init remote_spaces = ray.get(self.remote_workers(

文件“C:\Users\y\anaconda3\envs\tensorflow\lib\site-packages\ray_private\client_mode_hook.py”,第 105 行,在包装返回 func(*args, **kwargs) 文件“...\envs \tensorflow\lib\site-packages\ray\worker.py",第 1715 行,获取提升值

RayActorError:演员在完成此任务之前意外死亡。

2022-02-06 11:59:07,856 WARNING worker.py:1245 -- 一个工作人员在执行任务时因意外的系统错误而死亡或被杀死。要解决问题,请检查死亡工人的日志。RayTask ID: ffffffffffffffffb025425fa1d54c02ba27f8df01000000 Worker ID: 51efe6f16f87e7bc770e7c41ff526632786b8dd675e92df108c9e593 Node ID: 5c0244bcb3079a6e7ffed6081741e515f088ef511b5aad6ad7f44a60 Worker IP address: 127.0.0.1 Worker port: 36216 Worker PID: 18336 2022-02-06 11:59:07,890 WARNING worker.py:1245 -- A worker died or was在执行任务时因意外的系统错误而被杀死。要解决问题,请检查死亡工人的日志。RayTask ID:fffffffffffffffaa6a2753a82083400fd70c2b01000000 工作人员 ID:a5b0396bec32388bdf081c130a78af3ae44ee7f8372d4d2e4fefc5c8 节点 ID:

重现错误的简单完整代码示例:

import ray
from ray.rllib.agents.a3c.a3c import A3CTrainer,A3CTFPolicy
from ray.tune.registry import register_env
from gym import spaces
import numpy as np
import gym as gym
from ray.rllib.env.multi_agent_env import MultiAgentEnv

class customEnv(MultiAgentEnv):
    def __init__(self, config):
        self.zeros = np.zeros((84, 84, 3))
        self.action_space = gym.spaces.Discrete(2)
        self.observation_space = gym.spaces.Box(0.0, 1.0, shape=(84, 84, 3), dtype=np.float32)
        self.i = 0

    def reset(self):
        self.i = 0
        return self.zeros

    def step(self, action):
        self.i += 1
        return self.zeros, 1, self.i > 1000, {}

if __name__ == "__main__":
    register_env("env", lambda _: customEnv({}))
    ray.init()

    trainer = A3CTrainer(env="env", config={
        "multiagent": {
            "policies": {
                '0': (A3CTFPolicy, spaces.Box(low=0., high=1., shape=(84, 84, 3)), spaces.Discrete(2), {}), 
        },
            "policy_mapping_fn": lambda id: '0'  #unique policy
        },
    })

    for i in range(5000):
        trainer.train()
4

0 回答 0