Matrix 寻找Pyrotch矩阵乘法的有效实现以防止大内存使用

Matrix 寻找Pyrotch矩阵乘法的有效实现以防止大内存使用,matrix,pytorch,broadcasting,Matrix,Pytorch,Broadcasting,torch.matmul在pytorch中具有广播功能,这可能会消耗太多内存。我正在寻找有效的实现,以防止内存过度使用 例如,输入张量的大小如下 adj.size()==13003000] s.size()==torch.size([235,3000,10]) s.transpose(1,2).size()==torch.size([235,103000]) 任务是计算 link_loss = adj - torch.matmul(s, s.transpose(1, 2)) # link_los

torch.matmul
在pytorch中具有广播功能,这可能会消耗太多内存。我正在寻找有效的实现,以防止内存过度使用

例如,输入张量的大小如下
adj.size()==13003000]
s.size()==torch.size([235,3000,10])
s.transpose(1,2).size()==torch.size([235,103000])
任务是计算

link_loss = adj - torch.matmul(s, s.transpose(1, 2)) #
link_loss = torch.norm(link_loss, p=2)
原始代码位于火炬扩展包
torch\u geometric
中。它位于功能定义中。
torch.matmul(s,s.transpose(1,2))
将消耗过多内存(我的计算机只有2GB左右的内存空间),导致错误:

回溯(最近一次呼叫最后一次):

文件“”,第1行,在 torch.matmul(s,s.转置(1,2))

运行时错误:$Torch:内存不足:您试图分配7GB。 买新公羊!地址..\aten\src\TH\THGeneral.cpp:201

包作者的原始代码包含大于7GB的
torch.matmul(s,s.transpose(1,2)).size()==[23530003000]

我的尝试是尝试使用
进行
迭代

batch_size=235
link_loss=torch.sqrt(torch.stack([torch.norm(adj - torch.matmul(s[i], s[i].transpose(0, 1)), p=2)**2 for i in range(batch_size)]).sum(dim=0))
已知此
for
循环比使用广播或其他pytorch内置功能慢。 问题: 是否有比使用[…for…]更快的实现。 我是学习pytorch的新手。谢谢