多进程中随机数的初始种子

发布于:2024-04-02 ⋅ 阅读:(52) ⋅ 点赞:(0)

1、torch 和 np.random 在多进程中 初始种子是一样的。

2、random 在多进程中 初始种子是不同的。

import multiprocessing
import torch
import random
import numpy as np

def worker(name, q):
    seed_torch = torch.initial_seed()
    seed_random = random.getstate()
    seed_np_random = np.random.get_state()
    q.put(seed_torch)
    q.put(seed_random)
    q.put(seed_np_random)
    print(f"[{name}] torch initialize seed={seed_torch}")
    print(f"[{name}] random seed={seed_random[1][:10]}")
    print(f"[{name}] np random seed={seed_np_random[1][:10]}")

print("-------- start --------")
jobs = []
queues = []
for i in range(3):
    q = multiprocessing.Queue()
    p = multiprocessing.Process(target=worker, args=(f"p{i}", q))
    queues.append(q)
    jobs.append(p)
    p.start()

for p in jobs:
    p.join()
    
s_t_1, s_r_1, s_n_1 = queues[0].get(), queues[0].get(), queues[0].get()
s_t_2, s_r_2, s_n_2 = queues[1].get(), queues[1].get(), queues[1].get()
s_t_3, s_r_3, s_n_3 = queues[2].get(), queues[2].get(), queues[2].get()

print(f"torch mp seed is same: {(s_t_1 == s_t_2) and (s_t_2 == s_t_3)}")
print(f"random mp seed is same: {(s_r_1 == s_r_2) and (s_r_2 == s_r_3)}")
print(f"np.random mp seed is same: {(s_n_1[1] == s_n_2[1]).any() and (s_n_2[1] == s_n_3[1]).any()}")
    
print("-------- finish --------")


# 输出
-------- start --------
[p0] torch initialize seed=7237389924142042235
[p0] random seed=(2147483648, 3967188448, 2363349426, 445199951, 2822816736, 1592146397, 4104709092, 2686106927, 2582741620, 2811961877)
[p0] np random seed=[2147483648 1255508575  236244723  887429935 2787878337 3600437248
  585647183 1153772895  640242707 1396303187]
[p1] torch initialize seed=7237389924142042235
[p1] random seed=(2147483648, 429433738, 200112666, 1844446859, 3604059819, 1446920833, 2926490401, 2769026481, 888000462, 2635384304)
[p1] np random seed=[2147483648 1255508575  236244723  887429935 2787878337 3600437248
  585647183 1153772895  640242707 1396303187]
[p2] torch initialize seed=7237389924142042235
[p2] random seed=(2147483648, 2311738361, 555546597, 3807044736, 1720476885, 1153011148, 489312152, 2844994288, 1178343576, 1059128442)
[p2] np random seed=[2147483648 1255508575  236244723  887429935 2787878337 3600437248
  585647183 1153772895  640242707 1396303187]
torch mp seed is same: True
random mp seed is same: False
np.random mp seed is same: True
-------- finish --------

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到