【问题标题】:Why does loading tensorflow on Mac lead to "Process finished with exit code 132 (interrupted by signal 4: SIGILL)"?为什么在 Mac 上加载 tensorflow 会导致“进程以退出代码 132 完成(被信号 4:SIGILL 中断)”?
【发布时间】:2021-03-22 08:28:59
【问题描述】:

我正在使用配备 M1 处理器的 MacBook Pro,macOS 版本 11.0.1,PyCharm 中的 Python 3.8,Tensorflow 版本 2.4.0rc4(也尝试过 2.3.0、2.3.1、2.4.0rc0)。我正在尝试运行以下代码:

import tensorflow

这会导致错误消息:

Process finished with exit code 132 (interrupted by signal 4: SIGILL)

代码在我的 Windows 和 Linux 机器上运行良好。 错误消息是什么意思,我该如何解决?

【问题讨论】:

  • SIGILL 表示非法指令,在汇编级别,所以我认为这是我们无法解决的问题,您应该向您的 TensorFlow 版本的提供者提交错误(是苹果的还是官方的) TF 轮子?)
  • @Dr.Snoopy 我使用 pip 从 pypi.python.org 下载了 Tensorflow。我不知道这是否意味着我使用的是 Apple 或官方的 TF 轮子。
  • 我还尝试了按照 github 上“tensorflow_macos”存储库中的说明获得的 TF 版本:github.com/apple/tensorflow_macos。也许这就是您所说的Apple版本。安装正常,但错误依旧。
  • 这个解决方案对我有用:github.com/apple/tensorflow_macos/issues/65

标签: python-3.x macos tensorflow


【解决方案1】:

似乎当您安装了多个 python 解释器时会发生此问题,其中一些是针对不同的架构师(x86_64 与 arm64)。您需要确保使用了正确的 python 解释器,如果您安装了 Apple 的 tensorflow 版本,那么这可能需要 arm64 解释器。

如果你使用rosetta(苹果的x86_64模拟器)那么你需要使用x86_64 python解释器,如果你以某种方式加载arm64 python解释器,你会得到非法指令错误(这完全有道理)。

如果您使用任何安装新 python 解释器的脚本,那么您需要确保安装了适用于架构的正确解释器(很可能是 arm64)。

总的来说,我认为这个问题的发生是因为 python 环境设置不适用于可以运行多个指令集/架构的系统,pip 确实检查了包的架构和主机系统,但似乎你可以运行 x86_64 解释器来加载一个用于 arm64 的包,这会产生问题。

作为参考,tensorflow_macos 中有一个 issue,人们可以查看。

【讨论】:

  • 谢谢。问题是我使用 Rosetta 终端来尝试运行我的 arm64 tensorflow 代码。如何检查我的 Python 解释器是 x86_64 还是 arm64?我怎样才能告诉 pip 下载 x86_64 包?我想去所有x86_64,但我不知道怎么做。我应该将其创建为一个新问题吗?
  • @user505117 这很复杂,因为正如我的回答所说,python 解释器不知道这两种架构,只有一个。所以在使用rosetta和原生python解释器时要非常小心。
  • @user505117 您可以通过此代码检查架构。 >> 导入平台 >> platform.platform() 'macOS-10.16-x86_64-i386-64bit'
【解决方案2】:

我已经能够通过使用 Miniforge 而不是 Anaconda 作为 Python 环境来解决这个问题。 Anaconda 还不支持 arm64 架构。

【讨论】:

    【解决方案3】:

    安装 Tensorflow 1.15 版为我解决了这个问题。

    $ conda install tensorflow==1.15
    

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题

      这是因为 M1 芯片。现在有一个预发布版本,可为 macOS 11.0+ 提供硬件加速的 TensorFlow 和 TensorFlow Addons。 M1 Mac 和基于 Intel 的 Mac 通过 Apple 的 ML Compute 框架支持原生硬件加速。

      你需要安装支持M1芯片的TensorFlow 只需拉取这个tensorflow macos仓库并运行./scripts/download_and_install.sh

      【讨论】:

        猜你喜欢
        • 2021-05-10
        • 2021-07-21
        • 2022-08-20
        • 1970-01-01
        • 2018-02-03
        • 1970-01-01
        相关资源
        最近更新 更多