Comments (4)
The code seems to be parallelized on some level according to my htop, presumably within Hammurabi?
I know numpy also multithreads some calculations, but I do not know if any of those are called within IMAGINE.
The legacy random number generator is indeed known to be not thread-safe, see e.g. this issue here:
https://stackoverflow.com/questions/58875076/numpy-random-seed-and-multithreading-causes-differing-results
But I am no expert on this, this might of course be an issue solely related to Hammurabi.
from imagine.
We had a similar issue in Nifty, which I think is related to numpy multithreading.
If I explicitly force OMP_NUM_TREADS=1 before executing your code I get:
`------------------------------
Deterministic case
Run 1
ensemble seeds: 1608637542 1273642419
sync_I_data (sum): 2115.1283515418586 2115.1283515418586
Run 2
ensemble seeds: 1608637542 1273642419
sync_I_data (sum): 2115.1283515418586 2115.1283515418586
Run 3
ensemble seeds: 1608637542 1273642419
sync_I_data (sum): 2115.1283515418586 2115.1283515418586
Run 4
ensemble seeds: 1608637542 1273642419
sync_I_data (sum): 2115.1283515418586 2115.1283515418586
Stochastic case
Run 1
ensemble seeds: 1608637542 1273642419
sync_I_data (sum): 5322.912641998637 5423.724789142201
Run 2
ensemble seeds: 1608637542 1273642419
sync_I_data (sum): 5322.912641998637 5423.724789142201
Run 3
ensemble seeds: 1608637542 1273642419
sync_I_data (sum): 5322.912641998637 5423.724789142201
Run 4
ensemble seeds: 1608637542 1273642419
sync_I_data (sum): 5322.912641998637 5423.724789142201
`
, which is the same between runs.
One might have to switch to the new numpy random generators and not use the legacy np.random.seed() function to avoid this.
from imagine.
Thanks for spotting this!
The problem, however, is not related to the numpy legacy random number generator, as one can see that the ensemble seeds are the same on every run (note that there is actually nothing happening in parallel in IMAGINE in the above example). These seed values are then written in the parameter file that hammurabiX uses, and hammurabiX itself runs (externally, through a subprocess pipe) in parallel using OpenMP.
Initially, I thought that the problem was caused by IMAGINE writing the seed in the wrong section of the XML parameters file. After your post, I starting to believe that this could be a problem with HammurabiX itself.
@gioacchinowang, do you have any thoughts?
from imagine.
Fixed by commit hammurabi-dev/hammurabiX@8eef522
from imagine.
Related Issues (20)
- examples directory needs checking HOT 2
- "Function" Fields HOT 1
- Old imagine repository HOT 8
- Pipeline saving, and resuming after interruption HOT 3
- Observables plotting tools HOT 2
- rc variables
- Posterior report not working for dimensionless parameters
- Pipeline interface improvements HOT 5
- Standard plotting methods/functions? HOT 3
- tutorial_priors not working
- Dockerfile and travis CI
- tutorial_one failing with Ultranest HOT 1
- Saved Pipelines include path to hammurabi HOT 2
- MultinestPipeline logs to STDOUT HOT 2
- Using Masks in Likelihood leads to "unsupported data type" error
- No field class or factory for Jansson & Farrar model
- Save pipeline "can't pickle abc_data objects" error
- Implement non-Hammurabi random fields
- Dealing with NaNs in measurements HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from imagine.