|
import os |
|
import time |
|
import torch |
|
|
|
act_dict = {} |
|
act_dict['none'] = lambda x: x |
|
act_dict['relu'] = torch.relu |
|
act_dict['tanh'] = torch.tanh |
|
act_dict['sigmoid'] = torch.sigmoid |
|
|
|
|
|
def get_act(act): |
|
return act_dict[act] |
|
|
|
|
|
def to_list(var): |
|
if isinstance(var, dict): |
|
return {k: to_list(v) for k, v in var.items()} |
|
elif isinstance(var, list): |
|
return [to_list(v) for v in var] |
|
elif isinstance(var, tuple): |
|
return (to_list(v) for v in var) |
|
elif isinstance(var, torch.Tensor): |
|
return var.tolist() |
|
else: |
|
return var |
|
|
|
|
|
def repeat(tensor, size, dim=0): |
|
return tensor.repeat_interleave(size, dim) |
|
|
|
|
|
def get_default_device(): |
|
if not torch.cuda.is_available(): |
|
return torch.device("cpu") |
|
|
|
cmd = 'nvidia-smi -q -d Memory | grep -A4 GPU | grep Free' |
|
with os.popen(cmd) as result: |
|
max_free_mem = 0 |
|
max_cuda_index = -1 |
|
for i, line in enumerate(result): |
|
free_mem = int(line.strip().split()[2]) |
|
if free_mem > max_free_mem: |
|
max_free_mem = free_mem |
|
max_cuda_index = i |
|
|
|
return torch.device("cuda:{}".format(max_cuda_index)) |
|
|
|
|
|
def cumem_stats(device, msg): |
|
torch.cuda.empty_cache() |
|
print("{}, device:{}, memory_allocated: {:.3f}G".format(msg, device, |
|
torch.cuda.memory_allocated(device) / (1024 * 1024 * 1024))) |
|
|
|
|
|
cutime_stats_time = None |
|
|
|
|
|
def cutime_stats(device, msg=''): |
|
global cutime_stats_time |
|
torch.cuda.synchronize(device) |
|
if cutime_stats_time is not None: |
|
print("{} time: {:.6f}s".format(msg, time.time() - cutime_stats_time)) |
|
|
|
cutime_stats_time = time.time() |
|
|