Некоторые операции в факеле выполняются на месте.Сокращенные операторы, такие как + =, например.
Возможно ли получить выполнение на месте для других операций, таких как softmax
?
Я сейчас работаюс языковой обработкой.Модель создает длинную последовательность распределений вероятностей по большому словарному запасу.Этот конечный тензор вывода отвечает за около 60% выделенной памяти.Это огромная проблема, так как мне нужно вычислить softmax по нему, и это удваивает требуемую память.
Вот пример проблемы.Меня не интересует тензор t, только его softmax:
import numpy as np
import torch
import torch.nn.functional as F
t = torch.tensor(np.zeros((30000,30000))).cuda() #allocates 6.71 GB of GPU
softmax = F.softmax(t, 1) #out of memory error
del t #too late, program crashed
Даже следующее не работает:
F.softmax(torch.tensor(np.zeros((30000,30000))).cuda(), 1)