Python 使用torch.cat时发生CUDA非法内存访问错误

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

我在玩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\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())