ikostrikov / pytorch-a2c-ppo-acktr-gail

PyTorch implementation of Advantage Actor Critic (A2C), Proximal Policy Optimization (PPO), Scalable trust-region method for deep reinforcement learning using Kronecker-factored approximation (ACKTR) and Generative Adversarial Imitation Learning (GAIL).
MIT License
3.53k stars 832 forks source link

EOFError when entering a subprocess worker #249

Open Artimisu opened 3 years ago

Artimisu commented 3 years ago

in main.py it stops when args.eval_interval is not None:

if (args.eval_interval is not None and len(episode_rewards) > 1 and j % args.eval_interval == 0): ob_rms = utils.get_vec_normalize(envs).ob_rms evaluate(actor_critic, ob_rms, args.env_name, args.seed, args.num_processes, eval_log_dir, device)

in beseline : it seems to be wrong in "cmd, data = pipe.recv()"

`env= env_fn_wrapper.x()
parent_pipe.close()

try:
    while True:
        cmd, data = pipe.recv()
        if cmd == 'reset':
            pipe.send(_write_obs(env.reset()))
        elif cmd == 'step':
            obs, reward, done, info = env.step(data)
            if done:
                obs = env.reset()
            pipe.send((_write_obs(obs), reward, done, info))
        elif cmd == 'render':
            pipe.send(env.render(mode='rgb_array'))
        elif cmd == 'close':
            pipe.send(None)
            break
        else:
            raise RuntimeError('Got unrecognized cmd %s' % cmd)
except KeyboardInterrupt:
    print('ShmemVecEnv worker: got KeyboardInterrupt')
finally:
    env.close()`

The error log is here:

EOFError Process ForkProcess-1: Traceback (most recent call last): File "/home/u/anaconda3/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap self.run() File "/home/u/anaconda3/lib/python3.8/multiprocessing/process.py", line 108, in run self._target(*self._args, **self._kwargs) File "/home/u/anaconda3/lib/python3.8/site-packages/baselines/common/vec_env/shmem_vec_env.py", line 124, in _subproc_worker cmd, data = pipe.recv() File "/home/u/anaconda3/lib/python3.8/multiprocessing/connection.py", line 250, in recv buf = self._recv_bytes() File "/home/u/anaconda3/lib/python3.8/multiprocessing/connection.py", line 414, in _recv_bytes buf = self._recv(4) File "/home/u/anaconda3/lib/python3.8/multiprocessing/connection.py", line 383, in _recv raise EOFError