微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Jetson Nano 上的非法指令核心转储错误

如何解决Jetson Nano 上的非法指令核心转储错误

很抱歉,如果我的描述冗长乏味,但我想为您提供最重要的细节来解决我的问题。 最近,我终于买了一个 Jetson Nano 开发工具包,它有 4Gb 的 RAM,为了获得我认为的最佳对象检测配置,我遵循了 Pyimagesearch 的 Adrian Rosebrock 制作的指南:

https://www.pyimagesearch.com/2020/03/25/how-to-configure-your-nvidia-jetson-nano-for-computer-vision-and-deep-learning/ 日期:2020 年 3 月。 本指南的摘要如下:

  • 1:用于 Jetson Nano 的 microSD 中的 Flash Jetson Pack 4.2 .img(我的是 32GB 'A' 级)
  • 2:插入 Nano 板后,配置 Ubuntu 18.04 并完全摆脱 Libreoffice 以获得更多可用空间
  • 3:第 5 步:安装系统级依赖项(包括 cmake、python3 和 nano 编辑器)
  • 4:更新 CMake(没有任何错误
  • 5:安装 OpenCV 系统级依赖和其他开发依赖
  • 6:在您的 Jetson Nano 上设置 Python 虚拟环境(成功安装了 virtualenv 和 virtualenvwrapper,没有错误包括带有 nano 的 bash 文件版本)
  • 7:使用 python 3 创建 virtaul env 并安装 protobuf 和 libprotobuf 以获得更高效的 Tensorflow。安装成功。花了一个小时才完成,这是正常的
  • 8: 关键来了:在这个环境中安装 numpy 和 cython 并检查它是否导入了 numpy 库 当我尝试执行此步骤时,我得到: 如图所示,非法指令(核心已转储): [python3.6.9 错误]:https://i.stack.imgur.com/rAZhm.png

我说,无论如何让我们继续本教程:

  • 9:安装 Scipy v1.3.3:前三行一切正常,但是当我必须使用 python 执行 stup.py 文件时,它再次出现(不是小丑)。 [也不能执行这一行]:https://i.stack.imgur.com/wFmnt.jpg

然后我进行了一个实验,我用 Python 2 创建了这个“p2cv4”环境,安装了 numpy 并对其进行了测试: [使用 Python 2]:https://i.stack.imgur.com/zCWif.png

我可以随时退出()并执行其他使用 python 的行 所以我得出结论,这是一个python版本问题。当我想执行任何 python 代码时,终端以核心转储结束程序,apt-get 或 pip 不要显示任何错误。我想使用 python 3,因为将来有一天包或库将需要 python 3。

对于 python 3,Jetson Nano 的最后一个版本是 3.6.9,idk 哪个版本在 2020 年 3 月有效,就像当时 Adrian 使用的一样

在其他帖子中,我读到当软件包或库版本(如 TF 的 Numpy)与特定的旧或低功耗 cpu 不再友好时,会出现此 SIGILL,例如在此帖子中: Illegal hardware instruction when trying to import tensorflowhttps://github.com/numpy/numpy/issues/9532

所以我想降级到较旧的 python 版本,如 3.6.5 或 3.5,但我在 Ubuntu 中找不到明确的步骤。我认为这会解决这个错误,让我继续在 Jetson Nano 上进行配置。

pyimageseach 指南使用 Python 3.6,但它没有指定是最新的 3.6.9 还是其他。如果不是python导致此错误,请告诉我。请帮助!

解决方法

“非法指令”可能是由于 getauxval(AT_HWCAP) 的最近更改,尝试在 getauxval 失败的情况下从 /sys/devices 读取 cpuid 信息。 (OpenBLAS PR 2952 和 3004)

在启动 python 之前导出 OPENBLAS_CORETYPE=ARMV8(或任何实际硬件)应该有望解决这个问题。例如:

OPENBLAS_CORETYPE=ARMV8 python

如果你想让这个导出永久存在,你应该通过在终端上输入来打开你的 .bashrc 文件:

nano ~/.bashrc

之后,只需将“export OPENBLAS_CORETYPE=ARMV8”添加到 .bashrc 文件的底部,保存/退出并重新启动系统:

export OPENBLAS_CORETYPE=ARMV8

更多详情请看:

https://github.com/numpy/numpy/issues/18131 https://www.reddit.com/r/JetsonNano/comments/ktcyoh/illegal_instructioncore_dumped_error_on_jetson/

,

按照相同的指南,我遇到了同样的问题。顺便说一句,在这种情况下,numpy 在 python 中工作得很好,而不是在 virtualenv 中。 GDB 指出了 libopenblas 中的一个问题。

我的解决方案是从头开始使用 jetson-nano-4gb-jp441-sd-card-image.zip 的新映像,并在不使用 virtualenv 的情况下重复该指南。您很可能是该 Nano 的唯一开发人员,并且可以在没有 virtualenv 的情况下生活。

我成功地遵循了这些指南: https://qengineering.eu/install-opencv-4.5-on-jetson-nano.html

跳过 virtualenv 部分 https://www.pyimagesearch.com/2019/05/06/getting-started-with-the-nvidia-jetson-nano/

我发现此时也需要这样做:“..安装官方 Jetson Nano TensorFlow by..”

ln -s /usr/include/locale.h /usr/include/xlocale.h

一旦我创建了那个符号链接,我就可以继续本指南的其余部分(减去 virtualenv)并且我设法没有破坏 numpy。

这并不理想,但我希望它有所帮助。

,

我认为这是 Jetson Nano B01 模型的一个错误。

昨天我意识到我的 Nano 与 Adrian 在他的指南 (A02) 中展示的模型不同。

感谢 doommonkey 引导我找到一份不同的指南,该指南与 pyimagesearch 教程和最近的指南(2020 年 12 月)非常相似,我真的很感激。

我今天将测试它,如果我可以将我的 opencv 构建为包括 Tensorflow 在内的功能。我认为这是一个半解决的问题。

很遗憾,virtualenv 为 python 3.6.9 给出了这个可怕的错误。在这个是特定的模型。我也尝试过使用 venv 模块,但它甚至无法安装 numpy 所以现在没有虚拟环境

,

试试这个,它对我有用。 我在 Jetson nano(第一个版本)上使用 python 3.7.9 和 gcc-8.4 的 pyenv 环境对其进行了测试。请记住,因为它会编译所有内容,因此比仅下载二进制文件需要更长的时间。 (因为--no-binary

python3 -m pip install -U numpy --no-cache-dir --no-binary numpy

您可以更新您的 gcc,因为默认的 gcc 是 7。我不确定它是否不适用于 gcc-7。

sudo apt install gcc-8 g++-8
sudo rm /usr/bin/gcc
sudo ln -s /usr/bin/gcc-8 /usr/bin/gcc

sudo rm /usr/bin/g++
sudo ln -s /usr/bin/g++-8 /usr/bin/g++

现在确认,您可以使用

检查版本
gcc --version
g++ --version
,

不,您不能使用 virtualenv

  1. 删除VE(虚拟环境)的站点包中的所有numpy ref,
  2. 升级 numpy
  3. 将 numpy 文件夹链接到 VE numpy。

假设您的 virtualenv 被称为 ML:

1)

cd ~/.virtualenvs/ML/lib/python3.6/site-packages 
sudo rm -r numpy*
#outside VE:
deactivate
sudo pip install --upgrade numpy
#find path to numpy usig pysearchmethod :
#use pip uninstall numpy,and answer NO,but note. path
sudo pip uninstall numpy
#gives me /home/pierre/.local/lib/python3.6/site-packages/numpy
cd ~/.virtualenvs/ML/lib/python3.6/site-packages
ln -s /home/pierre/.local/lib/python3.6/site-packages/numpy numpy

然后你可以测试一下:

workon ML
python -c 'import numpy'

如果您得到与/.cache/pip 权限相关的内容,您可以尝试更改文件夹的权限:

sudo chown -R $USER ~/.cache/pip

如果还是不行,尝试在机器上卸载numpy,然后重新安装:

sudo pip uninstall numpy
#Yousof
pip install -U numpy --no-cache-dir --no-binary numpy

然后返回到步骤 1->3。 这对我有用。

++

,

安装正确的 numpy 版本帮助我解决了这个问题。每当我导入 torch、cv2 或 torchvision 时,我都会收到错误指令,指出非法指令(核心已转储)。 使用命令 pip install numpy==1.19.4 ,我希望错误消失。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。