我使用的是配备 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 机器上运行良好。 错误消息是什么意思以及如何修复它?
似乎当您安装了多个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
中有一个
问题,人们可以检查。
对于 M1 Mac,来自 Apple 开发者页面,以下方法有效:
首先,从此处下载 Conda Env,然后按照以下说明进行操作(假设脚本已下载到 ~/Downloads 文件夹)
chmod +x ~/Downloads/Miniforge3-MacOSX-arm64.sh
sh ~/Downloads/Miniforge3-MacOSX-arm64.sh
source ~/miniforge3/bin/activate
重新加载外壳并执行
python -m pip uninstall tensorflow-macos
python -m pip uninstall tensorflow-metal
conda install -c apple tensorflow-deps
python -m pip install tensorflow-macos
python -m pip install tensorflow-metal
如果上述方法由于某种原因不起作用,Apple 开发者页面
提供了一些边缘情况和其他信息就我而言,错误是
zsh: illegal hardware instruction python
将我的答案放在这里,因为提到的错误(“zsh:非法硬件指令python”在macbook pro M1上安装Tensorflow时)的问题被标记为与本文重复。
因此,就我而言,安装
tensorflow-macos
和 tensorflow-metal
就是解决方案。现在,它们可以通过pip
安装。但跑步
pip install tensorflow-macos
给了我以下错误
ERROR: Could not find a version that satisfies the requirement tensorflow-macos (from versions: none)
ERROR: No matching distribution found for tensorflow-macos
所以,按照苹果论坛这里上的帖子,我必须执行以下操作
SYSTEM_VERSION_COMPAT=0 pip install tensorflow-macos tensorflow-metal
安装 Tensorflow 版本 1.15 为我解决了这个问题。
$ conda install tensorflow==1.15
我已经能够通过使用 Miniforge 而不是 Anaconda 作为 Python 环境来解决这个问题。 Anaconda 尚不支持arm64架构。
这是因为M1芯片。现在有一个预发布版本,可为 macOS 11.0+ 提供硬件加速的 TensorFlow 和 TensorFlow Addons。 M1 Mac 和基于 Intel 的 Mac 通过 Apple 的 ML 计算框架支持本机硬件加速。
您需要安装支持M1芯片的TensorFlow只需拉取这个tensorflow macos存储库并运行
./scripts/download_and_install.sh
正如其他人所说,对于M1/M2芯片,您必须将TenserFlow安装在右拱门下。
对于 Conda 用户,您可以这样做:
conda activate myenv
pip uninstall tenserflow
conda config --env --add channels conda-forge
conda config --env --set channel_priority strict
conda install tensorflow