【发布时间】:2019-05-12 22:04:34
【问题描述】:
torch 中的一些操作是就地执行的。例如像 += 这样的速记运算符。
是否可以就地执行其他操作,例如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)
【问题讨论】:
-
我不知道如何就地应用 softmax。但是在您的示例中,您可以将张量拆分(即分成 2 或 4 块),然后将 softmax 应用于这些张量。此外,当只有 2 或 4 个 "batches" 时,它不应该慢得多。作为替代方案:)
-
这就是我正在做的 ;)(但如果能在一次干净的操作中完成它会非常好)
标签: python machine-learning pytorch torch