python-3.x 为什么在Mac上加载tensorflow会导致“进程结束,退出代码为132(被信号4中断:SIGILL)"?

k5ifujac  于 2023-04-13  发布在  Python
关注(0)|答案(6)|浏览(517)

我正在使用配备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机器上运行正常。错误消息是什么意思,我如何修复它?

tv6aics1

tv6aics11#

当你安装了多个python解释器时,似乎会发生这个问题,其中一些是针对不同的架构(x86_64 vs arm 64)。你需要确保使用正确的python解释器,如果你安装了苹果版本的tensorflow,那么可能需要一个arm 64解释器。
如果你使用rosetta(苹果的x86_64模拟器),那么你需要使用x86_64 Python解释器,如果你以某种方式加载arm 64 Python解释器,你会得到非法指令错误(这完全有道理)。
如果你使用任何安装新python解释器的脚本,那么你需要确保安装了正确的架构解释器(最有可能是arm 64)。
总的来说,我认为这个问题的发生是因为python环境设置不是为可以运行多个指令集/架构的系统而设计的,pip确实检查了包和主机系统的架构,但似乎你可以运行x86_64解释器来加载一个为arm 64设计的包,这就产生了这个问题。
作为参考,在tensorflow_macos中有一个issue,人们可以检查。

bxfogqkk

bxfogqkk2#

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

$ conda install tensorflow==1.15
bttbmeg0

bttbmeg03#

对于M1 Mac,来自Apple开发人员page的以下工作:
首先,从here下载Conda Env,然后按照以下说明操作(假设脚本下载到~/Downloads文件夹)

chmod +x ~/Downloads/Miniforge3-MacOSX-arm64.sh
sh ~/Downloads/Miniforge3-MacOSX-arm64.sh
source ~/miniforge3/bin/activate

重新加载shell并执行

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开发人员page提供了一些边缘情况和其他信息

klr1opcd

klr1opcd4#

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

t5fffqht

t5fffqht5#

在我的例子中,错误是

zsh: illegal hardware instruction  python

把我的答案放在这里,因为上面提到的错误("zsh: illegal hardware instruction python" when installing Tensorflow on macbook pro M1)的问题被标记为这篇文章的重复。
所以,在我的例子中,安装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

所以,根据苹果论坛上的帖子,我不得不做以下事情

SYSTEM_VERSION_COMPAT=0 pip install tensorflow-macos tensorflow-metal
jv2fixgn

jv2fixgn6#

这是因为M1芯片。现在有一个预发布版本,为macOS 11.0+提供硬件加速的TensorFlow和TensorFlow Addons。通过Apple的ML Compute框架,M1 Mac和基于Intel的Mac支持原生硬件加速。
您需要安装支持M1芯片的TensorFlow只需拉取此tensorflow macos存储库并运行./scripts/download_and_install.sh

相关问题