【问题标题】:Illegal instruction(core dumped) error on Jetson NanoJetson Nano 上的非法指令(核心转储)错误
【发布时间】:2021-04-14 07:49:53
【问题描述】:

对不起,如果我的描述冗长乏味,但我想给你最重要的细节来解决我的问题。 最近,我终于购买了具有 4Gb RAM 的 Jetson Nano 开发人员套件!为了获得我认为的最佳对象检测配置,我正在遵循 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 文件时,IT 再次出现(不是小丑)。 [也无法执行此行]:https://i.stack.imgur.com/wFmnt.jpg

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

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

对于 python 3,Jetson Nano 的最新版本是 3.6.9,并且知道哪个版本在 2020 年 3 月当前处于活动状态,就像 Adrian 当时使用的那个

在其他帖子中,我读到当像 TF 的 Numpy 这样的包或库版本不再对特定的旧 CPU 或低功耗 CPU 友好时,就会出现这个 SIGILL,就像在这篇帖子中一样: Illegal hardware instruction when trying to import 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 导致此错误,请告诉我。请帮忙!

【问题讨论】:

  • 一般来说,当尝试在具有不同架构的平台上运行为 1 CPU 架构编译的内容时,往往会发生“非法指令”错误。架构甚至不必那么不同。我已经看到当 CPU 架构与 x86-64 版本略有不同时会发生这种情况。
  • Jetson Nano 配备四核 ARM Cortex-A57 MPCore 处理器,与他的教程中显示的相同。 python版本可以改变这么多过去运行良好的配置吗?因为他也使用 3.6 但不知道是否是 3.6.9(我有)

标签: python nvidia-jetson-nano


【解决方案1】:

“非法指令”可能是由于最近对 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/

【讨论】:

  • 这对我有用,应该是公认的答案!
  • 这无需额外步骤即可工作,应该是公认的答案+1
  • 在 Jetson Nano 上尝试了 OPENBLAS_CORETYPE=AARCH64 - 效果很好。
  • 这也适用于我的 jetson nano 2GB,救命稻草!
【解决方案2】:

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

【讨论】:

  • numpy1.19.5 降级到1.19.4 解决了Illegal instruction (core dumped) 错误。
  • 这对我也有用,同样的错误。
【解决方案3】:

我在同一指南之后有这个非常相同的问题。在这种情况下,BTW,Numpy在不在VirtualEnv中时在Python中工作得很好。 GDB指出Libopenblas的问题。

我的解决方案是从划痕从划痕与jetson-nano-4gb-jp441-sd-card-image.zip的新图片,并在不使用virtualenv的情况下重复该指南。你可能是那个纳米的唯一开发人员,可以没有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。”

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

一旦我制作符号链接,我就可以继续引导的其余部分(减去virtualenv),我设法不打破numpy。

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

【讨论】:

    【解决方案4】:

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

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

    感谢 doommonkey 将我带到另一个指南,该指南与 pyimagesearch 教程和最近的指南(2020 年 12 月)非常相似,我真的很感激。

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

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

    【讨论】:

      【解决方案5】:

      试试这个,它对我有用。 我在 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
      

      【讨论】:

        【解决方案6】:

        你不能用virtualenv

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

        假设你的 virtualenv 被称为 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。

        【讨论】:

          猜你喜欢
          • 2021-12-14
          • 2020-06-19
          • 2020-03-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-06
          • 1970-01-01
          相关资源
          最近更新 更多