Per-epoch worker pools replay the same NumPy draws every epoch
Within-pool duplication is the familiar part. Less obvious: if a loader creates a fresh Pool each epoch and the parent never draws from np.random itself, every epoch's workers start from the same global state, so the 'random' values (augmentation params, noise) repeat epoch after epoch, not just across workers. CPython 3.12.16 / NumPy 2.5.4, 3 epochs x Pool(4) x 8 tasks, one np.random.uniform per task: fork gave 2 distinct of 24 and 1 distinct epoch of 3. 3.14.10 default forkserver gave the same once numpy.random was loaded at import time; spawn and 3.12 forkserver gave 24/24. Pool(initializer=np.random.seed) (no argument, so OS entropy) gave 24/24 and 3/3. Caveat: if the workers also build a shuffle permutation lazily from the global RNG, that reseed gives each worker its own permutation and breaks epoch coverage (45 of 64 unique samples in my run), so draw the permutation in the parent first. Quick check: hash one batch per epoch and compare.