Libtorch报错:terminate called after throwing an instance of ‘c10::Error‘ what():isTensor()INTERNAL ASS
最新推荐文章于 2024-09-14 16:48:24 发布
最新推荐文章于 2024-09-14 16:48:24 发布 阅读量 6.5k

Libtorch报错:terminate called after throwing an instance of ‘c10::Error’ what(): isTensor() INTERNAL ASSERT FAILED

问题出现在笔者想要将 yolov5 通过 PyTorch 的 C++ 接口 Libtorch 部署到树莓派上。

完整报错信息:

terminate called after throwing an instance of 'c10::Error'
  what():  isTensor() INTERNAL ASSERT FAILED at "/home/pisong/miniconda3/lib/python3.7/site-packages/torch/include/ATen/core/ivalue_inl.h":133, please report a bug to PyTorch. Expected Tensor but got Tuple
Exception raised from toTensor at /home/pisong/miniconda3/lib/python3.7/site-packages/torch/include/ATen/core/ivalue_inl.h:133 (most recent call first):
frame #0: c10::Error::Error(c10::SourceLocation, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) + 0x8c (0xffffbd05c83c in /home/pisong/miniconda3/lib/python3.7/site-packages/torch/lib/libc10.so)
frame #1: c10::IValue::toTensor() && + 0xfc (0xaaaaaf102548 in ./build/resnet50)
frame #2: main + 0x324 (0xaaaaaf0fe178 in ./build/resnet50)
frame #3: __libc_start_main + 0xe8 (0xffffb90e6090 in /lib/aarch64-linux-gnu/libc.so.6)
frame #4: <unknown function> + 0x22c34 (0xaaaaaf0fdc34 in ./build/resnet50)
Aborted (core dumped)

相比于 Python 这种脚本语言,C/C++ 还是相对难调试的。没有充足的经验的话,在上面的报错信息中是很难找到问题出在哪。

PyTorch 官方讨论区的一个帖子中,一位网友遇到了相同的问题,有大佬解答说:

对比其给出的以下代码:

在 Python 中

output, hidden = model(examples.to(“cpu”), hidden)

和在 C++ 中

at::Tensor output = module->forward({indata1, tuple}).toTensor();

很明显,模型的输出应该不是一个 Tensor,可能是一个列表或者元组什么的,这就是为什么报错信息中会出现:

 isTensor() INTERNAL ASSERT FAILED 

即检测到输出并不是 Tensor。

回到笔者自己的问题中,也确实是这样,本来这段 C++ 代码是处理分类模型 ResNet50 的,输出确实直接就是一个 Tensor 各类别分类概率。在转换到检测任务时笔者没有做细致的检查,而是直接将处理分类模型的代码拿过来用了,从而导致了该报错。

明确了问题之后,解决方案就很清楚了。去确定一下自己模型的输出到底是什么,然后在 C++ 代码中用适当的数据类型接收处理即可。

https://discuss.pytorch.org/t/terminate-called-after-throwing-an-instance-of-c10-error-what-istensor-for-lstm/50114

# line 29 model.model[-1].export = False 添加GPU支持:请注意, 当前的导出脚本默认情况下使用CPU ,需要对“ export.py”进行如下修改以支持GPU: # line 28 img = torch . zeros (( opt . batch_size , 3 , * opt . img_size )). to ( device = 'cuda' ) # line 31 model = attempt_load ( opt . weigh terminate called after throwing an instance of 'c10::Error' what(): open file failed because of errno 2 on fopen: , file path: ./traced_resnet_model.pt我加载模型文件的时候用的是相对路径,./traced_resnet_model.pt,所以会报错把这个模型文件的路径改为绝对路径,大概就像这样:/home/(你的用户名)/test_c++/traced_ 在pytorch2.3.0和pytorch2.1.2里报了相同的错错误,一开始以为是显存不够造成的,尝试了调小batch_size,修改gru隐藏节点,修改滤波器大小等方法都没有解决。都没有成功,于是我开始排查自己对代码所做的改动,最大的改动是注意力模块,而其中最有可能出问题的,我认为是。试了搜到的很多种办法,包括csdn里其他朋友的办法以及GitHub里的办法。,自适应平均池化,将其改为对应的平均池化之后,我的问题就解决了,没再出现。3.换回pytorch1.x.x版本。第一次遇到这个报错记录一下。 多卡训练深度学习模型报错 terminate called after throwing an instance of 'c10::Error' what(): chunk expects at least a 1-dimensional tensor 遇到了一个这样的错误,terminate called after throwing an instance of ‘c10::Errorterminate called after throwing an instance of 'c10::Error' what(): CUDA error: device-side assert triggered (record at /pytor... libtorch加载模型出错:terminate called after throwing an instance of 'c10::Error'引言solved 报错terminate called after throwing an instance of 'c10::Error' solved 运行文件的路径有更改,将之前的参数传递路径直接改为绝对路径: // const c... 这个是LZ在加载模型时报的一个错误,一直以为是版本什么的问题,最后发现完整报错如下: RuntimeError: unexpected EOF, expected 41812675 more bytes. The file might be corrupted. terminate called after throwing an instance of 'c10::Error' EOF是代表文件结束的标记,原来是模型被破坏了,后面重新下载了一遍模型,问题解决! Bert-VITS2语音训练语料中,不能包含英文字母,如果包含英文字母,则可能出现以上问题,通过正则表达式过滤掉包含英文字母的语料,问题解决。经过尝试发现,只保留一个人的100句语料进行语音训练,没有发生问题。尝试更换多个版本的torch和cuda,问题依旧存在。查看cuda和torch的版本。 RuntimeError: CUDA error: device-side assert triggered terminate called after throwing an instance of ‘c10::Error’ /c10d/NCCLUtils.hpp:155, unhandled cuda error, NCCL version 2.7.8 分析: 这种报错通过查找博客,发现应该是代码实现中某些地方出了bug,比如label越界,sqrt 内容小于0等。但是笔者从另一个角度给可能存在的bu 抱着尝试的心态卸掉了2.2.1+cu118版本的torch和对应的torchvision、torchaudio,并安装了2.0.0版本的torchtorch的nn.Embedding(size,char_len)函数中size有关,如。但经检查后题主的报错和这个函数无关,因为我的错误在。最近题主在复现算法时有如上报错,因为报错末尾处出现。经过进一步探索发现还可能与代码中。大概率出现在torch的版本上。于是便继续深究,发现错误。 当时以为batch_size必须是21的倍数,因为笔者的concat_nframe等于21。将其改为420后,仍报错。由于没有设置batch_first = True,而我输入的数据的第一个维度为batch,导致维度不匹配,固报错。检查发现批量大小可能比较大,导致内存溢出。将batch_size从1024 修改为 500。 RuntimeError: CUDA error: an illegal memory access was encountered terminate called after throwing an instance of 'c10::Error' what(): CUDA error: an illegal memory access was enco...