考虑以下场景:我想在具有多个节点的计算集群上执行大型蒙特卡罗模拟。为了避免过度传输数据,我将在各个节点上为我的模拟生成随机数据。使用 Python,我想使用numpy.random
函数来做到这一点。
我需要确保各个节点生成不同的随机数据(如果它们生成相同的数据,它们只会复制彼此的工作)。我可以通过为各个节点上的 RNG 选择不同的种子来做到这一点。但是我如何选择这些种子以确保生成的随机数序列不会在不同节点之间意外相交?
如果我只是在将工作负载提交给计算节点的一个节点上为我的计算节点生成随机种子数,理论上我可能会遇到计算节点生成随机数序列的情况,这些随机数序列在 RNG 的可能随机数空间中有所交叉序列,尝试在这里说明:
node 1 |-------************----------------------------------------------|
node 2 |----------------------------------************-------------------|
node 3 |---************--------------------------------------------------|
s 说明了每个节点生成的***
随机数序列,它们的起点由在工作开始时给予每个节点的(随机生成的)种子给出。我意识到可能的随机数序列的空间可能是巨大的,发生这种情况的概率可能很低,但是我如何确保它不会发生(假设节点对随机数的集体需求不会耗尽空间可能的随机序列)?