Предположим, у меня есть алгоритм, который делает следующее в python с pytorch. Пожалуйста, игнорируйте, эффективны ли шаги. Это просто пример глупой игрушки.
def foo(input_list):
# input_list is a list of N 2-D pytorch tensors of shape (h,w)
tensor = torch.stack(input_list) # convert to tensor.shape(h,w,N)
tensor1 = torch.transpose(tensor,0,2).unsqueeze(1) # convert to tensor.shape(N,1,h,w)
tensor2 = torch.interpolate(tensor1,size=(500,500) # upsample to new shape (N,1,500,500)
def bar(input_list):
tensor = torch.stack(input_list) # convert to tensor.shape(h,w,N)
tensor = torch.transpose(tensor,0,2).unsqueeze(1) # convert to tensor.shape(N,1,h,w)
tensor = torch.interpolate(tensor,size=(500,500) # upsample to new shape (N,1,500,500)
Мой вопрос заключается в том, имеет ли смысл использовать метод foo()
или bar()
или он не имеет значения. Я думал, что я сохраняю память, перезаписывая то же имя переменной (bar
), поскольку на самом деле мне никогда не понадобятся эти промежуточные шаги. Но если интерфейс CUDA создает новые области памяти для каждой функции, то я трачу одинаковое количество памяти на оба метода.