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 年。
本指南的摘要如下:
- 1: Flash Jetson Pack 4.2 .img inside for Jetson Nano 的 microSD(我的是 32GB 'A' Class)
- 2:一旦插入 Nano 板,配置 Ubuntu 18.04 并完全摆脱 Libreoffice 以获得更多可用 space
- 3: 第 5 步:安装系统级依赖项(包括 cmake、python3 和 nano 编辑器)
- 4:更新CMake(没有任何错误)
- 5:安装OpenCV系统级依赖和其他开发依赖
- 6:在你的 Jetson Nano 上设置 Python 虚拟环境(成功安装 virtualenv 和 virtualenvwrapper,没有错误,包括 bash 带有 nano 的文件版本)
- 7:使用python3创建虚拟环境并安装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
我可以随时退出()并执行其他使用 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
:
- 删除虚拟环境站点包中的所有 numpy 引用。
- 升级 numpy
- link numpy 文件夹到 venv numpy.
假设你的 virtualenv 叫做 ML:
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。
'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
,希望错误消失。
抱歉,如果我的描述冗长乏味,但我想为您提供最重要的细节来解决我的问题。 最近,我终于购买了带有 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 年。 本指南的摘要如下:
- 1: Flash Jetson Pack 4.2 .img inside for Jetson Nano 的 microSD(我的是 32GB 'A' Class)
- 2:一旦插入 Nano 板,配置 Ubuntu 18.04 并完全摆脱 Libreoffice 以获得更多可用 space
- 3: 第 5 步:安装系统级依赖项(包括 cmake、python3 和 nano 编辑器)
- 4:更新CMake(没有任何错误)
- 5:安装OpenCV系统级依赖和其他开发依赖
- 6:在你的 Jetson Nano 上设置 Python 虚拟环境(成功安装 virtualenv 和 virtualenvwrapper,没有错误,包括 bash 带有 nano 的文件版本)
- 7:使用python3创建虚拟环境并安装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
我可以随时退出()并执行其他使用 python 的行 所以我得出结论,这是一个 python 版本问题。当我想执行任何 python 代码时,终端以核心转储结束程序,apt-get 或 pip 不显示任何错误。我想使用 python 3 因为将来某天某个包或库将需要 python 3.
对于 python3,Jetson Nano 的最后一个版本是 3.6.9,我知道哪个版本在 2020 年 3 月当前处于活动状态,就像 Adrian 当时使用的那个
在其他帖子中,我读到当像 TF 的 Numpy 这样的包或库版本不再对特定的旧版本或低功率 CPU 友好时,会出现此 SIGILL,就像在这篇帖子中一样:
所以我想降级到较旧的 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
:
- 删除虚拟环境站点包中的所有 numpy 引用。
- 升级 numpy
- link numpy 文件夹到 venv numpy.
假设你的 virtualenv 叫做 ML:
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。
'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
,希望错误消失。