为什么在 Mac 上加载 TensorFlow 会导致“进程已完成,退出代码 132(被信号 4 中断:SIGILL)”?

use*_*117 15 macos python-3.x tensorflow

我使用的是配备 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
Run Code Online (Sandbox Code Playgroud)

这会导致错误消息:

Process finished with exit code 132 (interrupted by signal 4: SIGILL)
Run Code Online (Sandbox Code Playgroud)

该代码在我的 Windows 和 Linux 机器上运行良好。错误消息是什么意思以及如何修复它?

Mat*_*gro 6

似乎当您安装了多个 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人们检查。


Van*_*gaS 6

对于 M1 Mac,从 Apple 开发者页面可以进行以下操作:

首先,从此处下载 Conda Env ,然后按照以下说明进行操作(假设脚本已下载到 ~/Downloads 文件夹)

chmod +x ~/Downloads/Miniforge3-MacOSX-arm64.sh
sh ~/Downloads/Miniforge3-MacOSX-arm64.sh
source ~/miniforge3/bin/activate
Run Code Online (Sandbox Code Playgroud)

重新加载外壳并执行

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
Run Code Online (Sandbox Code Playgroud)

如果上述方法由于某种原因不起作用,Apple 开发者页面上提供了一些边缘情况和其他信息


par*_*ver 5

就我而言,错误是

zsh: illegal hardware instruction  python
Run Code Online (Sandbox Code Playgroud)

将我的答案放在这里,因为提到的错误(“zsh:在 macbook pro M1 上安装 Tensorflow 时非法硬件指令 python”)的问题被标记为本文的重复项。

所以,就我而言,安装tensorflow-macostensorflow-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
Run Code Online (Sandbox Code Playgroud)

因此,根据苹果论坛上的帖子,我必须执行以下操作

SYSTEM_VERSION_COMPAT=0 pip install tensorflow-macos tensorflow-metal
Run Code Online (Sandbox Code Playgroud)