Skip to content

Use SeedSequence spawning in Model.next_rng #5733

Closed
@ricardoV94

Description

@ricardoV94

Numpy docs advise using SeedSequence for spawning independent bit_generators: https://numpy.org/doc/stable/reference/random/parallel.html

Their method should be quite more robust to collisions than our naive random.integers(2**30) strategy, we use here and in a couple other places:

new_seed = self.rng_seeder.randint(2**30, dtype=np.int64)

import math

unique_seeds = 2**30
for n_seeds in (10, 100, 1_000, 10_000, 100_000):
    # birthday paradox probability: https://en.wikipedia.org/wiki/Birthday_problem
    p_collision = 1-math.perm(unique_seeds, n_seeds) / unique_seeds**n_seeds
    print(f"{n_seeds=}, {p_collision=}")
n_seeds=10, p_collision=4.1909515080540416e-08
n_seeds=100, p_collision=4.610036260510597e-06
n_seeds=1000, p_collision=0.0004650875835883195
n_seeds=10000, p_collision=0.04549425469529611
n_seeds=100000, p_collision=0.9905023499278603

Similar to aesara-devs/aesara#936

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions