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:使用python3创建virtaul-env,安装protobuf和libprotobuf以获得更高效的Tensorflow。已成功安装。花了一个小时才完成,这很正常
  • 8:headbreaker来了:在这个env中安装numpy和cython,并检查它是否导入numpy库当我尝试执行此步骤时,我会得到:如图所示,非法指令(核心转储):[Python 3.6.9错误]:https://i.stack.imgur.com/rAZhm.png

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

  • 9:Install Scipy v1.3.3:前三行一切正常,但当我不得不使用python执行stup.py文件时,IT再次出现(而不是小丑)。[也无法执行此行]:https://i.stack.imgur.com/wFmnt.jpg

然后我做了一个实验,我创造了这个";p2cv4";env与Python 2,安装了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或低功耗CPU不再友好时,就会出现这种SIGILL,比如在下面的帖子中:尝试导入tensorflow时出现非法硬件指令,https://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/18131https://www.reddit.com/r/JetsonNano/comments/ktcyoh/illegal_instructioncore_dumped_error_on_jetson/

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

我在遵循相同的指南时遇到了同样的问题。顺便说一句,在这个场景中,numpy在python中工作得很好,而不是在虚拟环境中。GDB指出了libopenblas中的一个问题。

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

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

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

我发现在这一点上也需要这样做:";。。安装官方Jetson Nano TensorFlow;

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

一旦我建立了这个象征性的链接,我就可以继续阅读指南的其余部分(减去virtualenv),并且我设法不打破numpy。

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

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

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

感谢doomonkey带领我找到一个不同的指南,它看起来很像pyimagesearch教程和最近的教程(2020年12月),我真的很感激。

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

很遗憾,virtualenv为python 3.6.9给出了这个可怕的错误。这是一种特殊的型号。我也尝试过venv模块,它甚至不能安装numpy,所以现在没有虚拟环境

试试这个,它对我有用。我在Jetson nano(第一个版本)上用pyenv环境用python 3.7.9和gcc-8.4进行了测试。请记住,因为它编译了所有内容,所以它需要比下载二进制文件更长的时间。(因为--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. 删除虚拟环境的站点包中的所有numpy-ref
  2. 升级numpy
  3. 将numpy文件夹链接到venv numpy

假设您的虚拟机名为ML:


  1. cd ~/.virtualenvs/ML/lib/python3.6/site-packages 
    sudo rm -r numpy*
    

  2. #outside VE:
    deactivate
    sudo pip install --upgrade numpy
    

  3. #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.

最新更新