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

Illegal instruction(core dumped) error on Jetson Nano

抱歉,如果我的描述冗长乏味,但我想为您提供最重要的细节来解决我的问题。 最近,我终于购买了带有 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/Date:March,2020 年。 本指南的摘要如下:

我说了,好吧,我们还是继续本教程吧:

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

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

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

在其他帖子中,我读到当像 TF 的 Numpy 这样的包或库版本不再对特定的旧版本或低功率 CPU 友好时,会出现此 SIGILL,就像在这篇帖子中一样: , https://github.com/numpy/numpy/issues/9532

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

pyimageseach 指南使用 Python 3.6,但它没有指定最后一个版本是 3.6.9 还是其他版本。如果不是 python 导致此错误,请告诉我。请帮忙!

按照相同的指南,我遇到了同样的问题。顺便说一句,在这种情况下,当不在 virtualenv 中时,numpy 在 python 中工作得很好。 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”

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

一旦我制作了那个符号 link 我就能够继续本指南的其余部分(减去 virtualenv)并且我设法不破坏 numpy。

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

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

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

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

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

很遗憾 virtualenv 为 python 3.6.9 给出了这个可怕的错误。在 th 是特定模型。我也试过 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. 删除虚拟环境站点包中的所有 numpy 引用。
  2. 升级 numpy
  3. link 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。

'illegal instruction' 可能是由于最近更改了 getauxval(AT_HWCAP)。

在 getauxval 未成功的情况下尝试从 /sys/devices 读取 cpuid 信息。 (OpenBLAS PR 2952 和 3004)

在启动 python 之前

export OPENBLAS_CORETYPE=ARMV8(或任何实际硬件)应该有望解决这个问题。例如:

OPENBLAS_CORETYPE=ARMV8 python

如果您想使此导出永久化,您应该通过在终端上键入以下内容来打开您的 .bashrc 文件:

nano ~/.bashrc

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

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