Python 使用torch.cat时发生CUDA非法内存访问错误
我在玩pytorch concatenate,想看看是否可以使用与输入张量不同的输出张量,下面是代码:Python 使用torch.cat时发生CUDA非法内存访问错误,python,memory,pytorch,concatenation,Python,Memory,Pytorch,Concatenation,我在玩pytorch concatenate,想看看是否可以使用与输入张量不同的输出张量,下面是代码: import torch a = torch.ones(4) b = torch.ones(4) c = torch.zeros(8).cuda() print(c) ab = torch.cat([a,b], out=c) print(c) 我在jupyter笔记本中运行这个。pytorch版本:1.7.1 我得到以下错误: ... \Anaconda3\envs\...\lib\sit
import torch
a = torch.ones(4)
b = torch.ones(4)
c = torch.zeros(8).cuda()
print(c)
ab = torch.cat([a,b], out=c)
print(c)
我在jupyter笔记本中运行这个。pytorch版本:1.7.1
我得到以下错误:
...
\Anaconda3\envs\...\lib\site-packages\torch\_tensor_str.py in __init__(self, tensor)
87
88 else:
---> 89 nonzero_finite_vals = torch.masked_select(tensor_view, torch.isfinite(tensor_view) & tensor_view.ne(0))
90
91 if nonzero_finite_vals.numel() == 0:
RuntimeError: CUDA error: an illegal memory access was encountered
如果您尝试访问张量c
(在本例中是使用打印
),则会发生这种情况
我在网上找不到任何东西表明我不能这样做,也许除了这句话:
“…任何相同类型的张量的python序列…”
不过,这个错误有点奇怪。。。有什么想法吗?行为似乎会随着Pytork版本的不同而变化。在1.3.0版本中,我得到了后端CUDA的错误
预期对象,但得到了CPU
,但在1.5.0版本中,我确实得到了与您相同的错误。这在他们的github上可能值得一提,因为我相信前者的错误比后者更有用
不管怎样,这两个错误都来自于将cpu张量连接到GPU张量的事实。您可以非常轻松地解决此问题:
# Move the tensors to the GPU prior to concatenating
ab = torch.cat([a.cuda(),b.cuda()], out=c)
或
我没有笔记本,但我相信你必须重新启动你的内核,你得到的错误似乎把它破坏得非常糟糕。在获得非法内存访问后,我的python shell无法再计算任何东西。我无法复制这个问题,
cat
操作产生“预期的后端CUDA对象,但获得了CPU…”,这是预期的,因为您将2个CPU张量连接到一个gpu张量中。但是,print
语句不会引起任何问题。你确定你粘贴的代码确实产生了这个错误吗?我确定,这是笔记本上唯一的东西。。。你把它放在笔记本里了?火炬的版本是一样的吗?很奇怪…——编辑:无论python内核是否新鲜都会发生这种情况
# Move the tensor after concatenating
c.copy_(torch.cat([a,b]).cuda())