in main.py [0:0]
def train(args):
pp.pprint(args)
proc_manager = mp.Manager()
barrier = proc_manager.Barrier(args.num_learners)
# Shared-gossip-buffer on GPU-0
device = torch.device('cuda:%s' % 0 if args.cuda else 'cpu')
shared_gossip_buffer, _references = make_gossip_buffer(
args, proc_manager, device)
# Make actor-learner processes
proc_list = []
for rank in range(args.num_learners):
# Uncomment these lines to use 2 GPUs
# gpu_id = int(rank % 2) # Even-rank agents on gpu-0, odd-rank on gpu-1
# device = torch.device('cuda:%s' % gpu_id if args.cuda else 'cpu')
proc = mp.Process(
target=actor_learner,
args=(args, rank, barrier, device, shared_gossip_buffer),
daemon=False
)
proc.start()
proc_list.append(proc)
# # Bind agents to specific hardware-threads (generally not necessary)
# avail = list(os.sched_getaffinity(proc.pid)) # available-hwthrds
# cpal = math.ceil(len(avail) / args.num_learners) # cores-per-proc
# mask = [avail[(rank * cpal + i) % len(avail)] for i in range(cpal)]
# print('process-mask:', mask)
# os.sched_setaffinity(proc.pid, mask)
for proc in proc_list:
proc.join()