I’m trying to get bit-for-bit identical geometry from two runs with exactly the same inputs and config, but I still see differences between runs. I’m looking for guidance on whether fully deterministic output is possible today, and how to achieve it (e.g., via a seed or a deterministic mode).
What I’m doing
Host: Windows (Docker Desktop)
Image: 3dgi/roofer:develop
Command (single-threaded + pinned math libs):
docker run --rm ^
-v C:\Users\XXX\Github\LOD2\data\docker_test:/data ^
-e RANDOM_SEED=42 ^
-e PYTHONHASHSEED=42 ^
-e OMP_NUM_THREADS=1 ^
-e OPENBLAS_NUM_THREADS=1 ^
-e MKL_NUM_THREADS=1 ^
-e NUMEXPR_NUM_THREADS=1 ^
3dgi/roofer:develop roofer \
-c /data/config.toml \
--jobs 1 \
--loglevel info
What I’ve tried:
Single-threaded Roofer: --jobs 1
Env vars to avoid hidden parallelism: OMP_NUM_THREADS=1, OPENBLAS_NUM_THREADS=1, MKL_NUM_THREADS=1, etc.
Fixed locale: LC_ALL=C
Fixed “seed” envs (RANDOM_SEED, PYTHONHASHSEED) — I understand Roofer doesn’t expose a --seed, so these may not affect core steps.
Ensured byte-identical inputs and stable layer selection in config.toml.
Is it even possible to get to that point or are the random seeds generated too deep in the code?
Thanks :)
Léandre
I’m trying to get bit-for-bit identical geometry from two runs with exactly the same inputs and config, but I still see differences between runs. I’m looking for guidance on whether fully deterministic output is possible today, and how to achieve it (e.g., via a seed or a deterministic mode).
What I’m doing
Host: Windows (Docker Desktop)
Image: 3dgi/roofer:develop
Command (single-threaded + pinned math libs):
What I’ve tried:
Single-threaded Roofer: --jobs 1
Env vars to avoid hidden parallelism: OMP_NUM_THREADS=1, OPENBLAS_NUM_THREADS=1, MKL_NUM_THREADS=1, etc.
Fixed locale: LC_ALL=C
Fixed “seed” envs (RANDOM_SEED, PYTHONHASHSEED) — I understand Roofer doesn’t expose a --seed, so these may not affect core steps.
Ensured byte-identical inputs and stable layer selection in config.toml.
Is it even possible to get to that point or are the random seeds generated too deep in the code?
Thanks :)
Léandre