在 MacBook Pro M1 上安装 Tensorflow 时出现 "zsh: illegal hardware instruction python" 错误。

38

我正在尝试在我的 MacBook Pro M1 上安装 tensorflow。然而,当我尝试导入时,我一直收到以下错误:zsh: illegal hardware instruction python

我已通过此link下载并安装了 tensorflow。

这是我的安装步骤:

  • 安装 venv:python3 -m venv venv
  • 将位于下载文件夹中的install_venv.sh文件拖到终端中,在末尾添加-p
  • 选择 venv 的目录作为应安装 tensorflow 的位置。
  • 激活 venv。
  • 输入“python”。
  • 尝试导入 tensorflow:import tensorflow as tf

我正在使用 Python 3.8.2。


1
您可以关注此博客以解决类似问题,并尝试从以下主题中使用相同的建议解决方案 https://forums.macrumors.com/threads/macos-10-15-catalina-on-unsupported-macs.2183772/page-426。此外,有关于Mac OS上TensorFlow的最新更新,请访问以下链接https://blog.tensorflow.org/2020/11/accelerating-tensorflow-performance-on-mac.html。 - user11530462
这个 https://dev59.com/xVEG5IYBdhLWcg3wfPPB#72381925 有效! - VanagaS
3个回答

36

在尝试了多种解决方案都无效后,这项方法对我有效。

步骤1:使用pyenv安装Python 3.8.5版本并将其设置为默认的Python版本。这篇教程(https://realpython.com/intro-to-pyenv/)对正确配置pyenv很有帮助。

步骤1.1:如果在zsh中运行pyenv出现问题,请参考此文章(https://github.com/pyenv/pyenv/issues/1446)。

步骤1.2:一旦你成功运行Python 3.8.5版本,你可以通过运行python -V来检查它是否已经安装好,输出应该是:

Python 3.8.5

第二步 通过 pip install virtualenv 安装 virtualenv

第二步.1 运行 virtualenv ENV 创建一个虚拟环境

第二步.2 运行 source ENV/bin/activate 激活该虚拟环境

第三步 安装名为 tensorflow-2.4.1-py3-none-any.whl 的 Tensorflow wheel,可以通过此公共 Google Drive 链接https://drive.google.com/drive/folders/1oSipZLnoeQB0Awz8U68KYeCPsULy_dQ7获取

第三步.1 假设您只是将 wheel 安装到了下载目录下,请在已激活的虚拟环境中运行pip install ~/Downloads/tensorflow-2.4.1-py3-none-any.whl

第四步 在终端中键入 python,会出现 >>>提示符,请输入

>>> import tensorflow
>>>

如果没有出现“zsh非法硬件指令”错误,那么你应该可以继续进行。

注意:如果你正在使用Anaconda,上述方法也同样适用。你可以跳过虚拟环境的步骤(假设你已经通过Conda激活了虚拟环境),直接执行如上所述的pip install命令(即第3步及以后的步骤)。


12
很抱歉涉及网络安全问题,但是如何验证通过Google云端硬盘提供的wheel文件的维护者的所属/身份? - matanster
1
@matanster 这也是我会谨慎考虑的事情。在我的情况下,让它以其他方式运行非常麻烦,所以我选择了这个不太理想的解决方案。 - Vakidis
1
如果你需要安慰的话,我现在已经做了3-4次并且我的电脑从未被黑客攻击:) - logankilpatrick
2
您可以使用以下pip install命令在M1机器上安装tensorflow:pip install tensorflow-macos。 - Shahar Gino
谢谢分享。对我有用,Google Drive上的wheel可以信赖:smile: - Pardeep Singh
非常感谢,我实际上花了3天时间尝试解决这个问题。这是唯一对我有效的解决方案。 - nickinade

7

Python3在 M1 上提供了2种架构。

$ file $(which python3)
# If you installed python through Homebrew or Anaconda, deactivate your conda env, then run this line instead:
# $ file $(which /usr/bin/python3)
/usr/bin/python3: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64e:Mach-O 64-bit executable arm64e]
/usr/bin/python3 (for architecture x86_64): Mach-O 64-bit executable x86_64
/usr/bin/python3 (for architecture arm64e): Mach-O 64-bit executable arm64e

在这里,特别重要的是指定使用哪个。您可以通过按照以下方式安装脚本来实现:

arch -arm64 bash install_venv.sh my_tf_env

如果您有多个Python的安装版本,请使用下面的命令:

arch -arm64 bash install_venv.sh --python=/usr/bin/python3 my_tf_env

您可以将my_tf_env替换为您选择的任何其他名称/路径。


3
当我运行命令 $ file $(which python3) 时,只得到一个选项:/opt/homebrew/Caskroom/miniconda/base/envs/svc-pdf-reader/bin/python3: Mach-O 64-bit executable x86_64。这可能跟 Homebrew 有关吗? - Zaki Aziz
首先,如果您的anaconda环境处于活动状态,请将其停用。然后,将该行更改为 file $(which /usr/bin/python3) 并运行它。 - dedede
1
在 MacOS 中有不止一个 which 命令可用 -- 一个是内置于 zsh 的,另一个则作为外部二进制文件提供。它们之间非常不同;我通常不建议使用 which 命令。 - Charles Duffy
9
恕我直言,你的评论并没有给这个对话增添任何有用的内容。 - dedede
这个回答真的意味着仅仅选择另一个Python可执行文件就可以使TensorFlow无缝运行吗? - matanster

6

我遇到了同样的问题。

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

您需要安装支持M1芯片的TensorFlow,只需拉取这个tensorflow macos仓库并运行./scripts/download_and_install.sh脚本即可。


3
错误:TensorFlow与ML Compute加速仅适用于macOS 11.0及更高版本。 - Muhammad Talha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接