Skip to content

Deterministic / bit-for-bit identical output across runs (seed or deterministic mode?) #138

@LeandreSassi

Description

@LeandreSassi

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions