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 后查看