Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Windows compatibility? #175

Closed
iNomaD opened this issue Nov 15, 2017 · 6 comments
Closed

Windows compatibility? #175

iNomaD opened this issue Nov 15, 2017 · 6 comments

Comments

@iNomaD
Copy link

iNomaD commented Nov 15, 2017

Does it work under Windows? I run python examples/ale/train_a3c_ale.py 4 pong --steps 100 --outdir ./output/ale/a3c and get an error:

Output files are saved in ./output/ale/a3c\20171116T000856.454199
Traceback (most recent call last):
  File "examples/ale/train_a3c_ale.py", line 151, in <module>
    main()
  File "examples/ale/train_a3c_ale.py", line 147, in main
    global_step_hooks=[lr_decay_hook])
  File "E:\Programs\Anaconda3\envs\intel35\lib\site-packages\chainerrl-0.2.0-py3
.5.egg\chainerrl\experiments\train_agent_async.py", line 234, in train_agent_asy
nc
  File "E:\Programs\Anaconda3\envs\intel35\lib\site-packages\chainerrl-0.2.0-py3
.5.egg\chainerrl\misc\async.py", line 131, in run_async
  File "E:\Programs\Anaconda3\envs\intel35\lib\multiprocessing\process.py", line
 105, in start
    self._popen = self._Popen(self)
  File "E:\Programs\Anaconda3\envs\intel35\lib\multiprocessing\context.py", line
 212, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
  File "E:\Programs\Anaconda3\envs\intel35\lib\multiprocessing\context.py", line
 313, in _Popen
    return Popen(process_obj)
  File "E:\Programs\Anaconda3\envs\intel35\lib\multiprocessing\popen_spawn_win32
.py", line 66, in __init__
    reduction.dump(process_obj, to_child)
  File "E:\Programs\Anaconda3\envs\intel35\lib\multiprocessing\reduction.py", li
ne 59, in dump
    ForkingPickler(file, protocol).dump(obj)
AttributeError: Can't pickle local object 'run_async.<locals>.set_seed_and_run'

(intel35) c:\Projects\Atari\chainerrl>Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "E:\Programs\Anaconda3\envs\intel35\lib\multiprocessing\spawn.py", line 1
06, in spawn_main
    exitcode = _main(fd)
  File "E:\Programs\Anaconda3\envs\intel35\lib\multiprocessing\spawn.py", line 1
16, in _main
    self = pickle.load(from_parent)
EOFError: Ran out of input
@muupan
Copy link
Member

muupan commented Nov 16, 2017

ChainerRL is not tested on Windows, so I don't know if it works as it is.

I would appreciate if any windows user can tell us what's the issue. Contributions to support Windows are welcome.

@redxef
Copy link

redxef commented Jan 4, 2018

Hit the same problem.
Pickle can't pickle anonymous functions (see docs.python.org/3/library/pickle.html).

I tried resolving this issue by moving all anonymous functions, which would be pickled, out of their parent functions.

I then hit the following (Using python 3.6):

Traceback (most recent call last):
  File "train_a3c_gym.py", line 192, in <module>
    main()
  File "traina3cgzm.py", line 188, in main
    max_episode_len=timestep_limit)
  File "C:\Users\<USERNAME>\AppData\Roaming\Python\Python36\site-packages\chainerrl\experiments\train_agent_async.py", line 240, in train_agent_async
    profile
  File "C:\Users\<USERNAME>\AppData\Roaming\Python\Python36\site-packages\chainerrl\misc\async.py", line 131, in run_async
    p.start()
  File "c:\Users\<USERNAME>\AppData\Local\Programs\Python\Python36\lib\multiprocessing\process.py", line 105, in start
    self._popen = self._Popen(self)
  File "c:\Users\<USERNAME>\AppData\Local\Programs\Python\Python36\lib\multiprocessing\context.py", line 223, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
  File "c:\Users\<USERNAME>\AppData\Local\Programs\Python\Python36\lib\multiprocessing\context.py", line 322, in _Popen
    return Popen(process_obj)
  File "c:\Users\<USERNAME>\AppData\Local\Programs\Python\Python36\lib\multiprocessing\popen_spawn_win32.py", line 65, in __init__
    reduction.dump(process_obj, to_child)
  File "c:\Users\<USERNAME>\AppData\Local\Programs\Python\Python36\lib\multiprocessing\reduction.py", line 60, in dump
    ForkingPickler(file, protocol).dump(obj)
TypeError: can't pickle _thread.RLock objects

A similar trace with python 3.5 tells me the following: TypeError: cannot serialize '_io.TextIOWrapper' object

@redxef
Copy link

redxef commented Jan 4, 2018

Ok, I got it to run by hacking multiprocessing.

reduction.py:

- import pickle
+ import dill as pickle

I don't know if I broke something else with this without noticing, but the example runs.

@toksis
Copy link

toksis commented Jan 21, 2020

ImportError: cannot import name 'reduce_socket' from 'multiprocessing.reduction' (C:\anaconda\envs\ChainerRl\lib\multiprocessing\reduction.py)

This happens when i use the code above using dill. any thoughts?

@hyperionfalling
Copy link

try pip install dill==0.3.0

@prabhatnagarajan
Copy link
Contributor

Closing this issue due to inactivity.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants