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的新手。谢谢