假设我在GPU中有一个PyTorch变量:
var = Variable(torch.rand((100,100,100))).cuda()
将此变量复制(不是桥接)到NumPy数组的最佳方法是什么?
var.clone().data.cpu().numpy()
或
var.data.cpu().numpy().copy()
通过运行快速基准测试,.clone()
略快于.copy()
。但是,.clone()
+ .numpy()
将创建PyTorch变量和NumPy桥,而.copy()
将创建NumPy桥+ NumPy数组。
答案 0 :(得分:3)
这是一个非常有趣的问题。据我说,这个问题基于意见,我想就此发表意见。
从上述两种方法中,我更倾向于第一种方法(使用clone()
)。由于您的目标是复制信息,因此基本上您需要投入额外的内存。 clone()
和copy()
应该占用相同数量的存储量,因为创建numpy bridge不会导致额外的内存。另外,我不明白你的意思,copy()会创建两个numPy数组。正如您所提到的,clone()
比copy()
快,我在使用clone()
时没有看到任何其他问题。
如果有人可以提供一些反驳论点,我很想再考虑一下。
答案 1 :(得分:0)
因为clone()
是recorded by AD,所以第二种选择不太激烈。您可能还会考虑few options。