JuliaLang / Distributed.jl

Create and control multiple Julia processes remotely for distributed computing. Ships as a Julia stdlib.
https://docs.julialang.org/en/v1/stdlib/Distributed/
MIT License
27 stars 10 forks source link

remove order dependency between "using" and "addprocs" #17

Open amitmurthy opened 11 years ago

amitmurthy commented 11 years ago

The following sequence resulted in the worker segfaulting and terminating.

Flipping the order of addprocs and using results in proper execution.

Suggest that we keep track of modules loaded in process 1, and load the same modules on all workers whenever we do an addprocs

ViralBShah commented 11 years ago

This seems a bit too magical.

amitmurthy commented 11 years ago

At least the worker should not terminate abruptly, it should give a clean error message.

The module PTools was not even required on the workers. The closure had some references - not obvious looking at the code - which caused the problem. It took me a while to figure it out.

The contra argument for auto-loading modules, of course, is that typically the visualization packages are only required on process id 1.

ViralBShah commented 11 years ago

It should certainly not crash.

amitmurthy commented 10 years ago

How about an additional keyword argument to addprocs called pkgsync

addprocs(n, pkgsync=true)    # The default. All packages currently loaded on 1 are loaded on the worker
addprocs(n, pkgsync=false)    # Nothing is loaded on the worker
addprocs(n, pkgsync=[pkgs...])    # Only specified packages are loaded

The packages loaded are the ones listed in Base.package_list I assume. We strip the path and filename extension and try to load these on the worker.

If you loaded scripts using include or packages not on the standard search path, they will not be sync'ed, you will need to do so explicitly on the new workers.

amitmurthy commented 10 years ago

Julia users link regarding the same issue - https://groups.google.com/d/msg/julia-users/-Y1rc8gkrgo/r6w5f144BkMJ

timholy commented 9 years ago

Perhaps

using PTools
addprocs(1)
using PTools   # currently this has no effect on the worker

should cause PTools to be loaded on the worker?

(Discovered while testing JuliaLang/julia#8745 with the Images test, CC @vtjnash.)

vtjnash commented 9 years ago

To fix the Images test, I added an @ everywhere before the import statement. With JuliaLang/julia#8745 changes to require, syncing modules during addprocs might be easier now.

timholy commented 9 years ago

I got a module reload when I fixed it that way; I just pushed a different fix (to Images master, not tagged). But the fix uses a PR against JuliaLang/julia#8745 I'll be submitting shortly.

andreasnoack commented 8 years ago

@amitmurthy I think the level of magic in using/require here is either too low or too high.

StefanKarpinski commented 8 years ago

Too high. It would be much clearer if just doing @everywhere using Module worked. Rather than automatically doing code loading from the head node, how to load code should be configurable and you can say @workers command_that_tells_workers_to_load_code_from_node_1(). Otherwise they would just load code locally like a normal Julia process does by default.

amitmurthy commented 8 years ago

Related - https://github.com/JuliaLang/Distributed.jl/issues/20

Nosferican commented 5 years ago

Status of this?