"zsh: illegal hardware instruction python" when installing Tensorflow on macbook pro M1

32,324

Solution 1

This worked for me after trying a bunch of solutions to no avail.

Step 1 Using pyenv install python version 3.8.5 and set it as your default python version. This tutorial(https://realpython.com/intro-to-pyenv/) is helpful for getting pyenv configured properly.

Step 1.1 Use this post(https://github.com/pyenv/pyenv/issues/1446) if you have troubles running pyenv in zsh.

Step 1.2 Once you have python version 3.8.5 running which you can check by running python -V which should output:

Python 3.8.5

Step 2 Install virtualenv via pip install virtualenv

Step 2.1 Create a virtual environment by running virtualenv ENV

Step 2.2 Activate that virtual environment by running source ENV/bin/activate

Step 3 Install the tensorflow wheel called tensorflow-2.4.1-py3-none-any.whl located at this public google drive link https://drive.google.com/drive/folders/1oSipZLnoeQB0Awz8U68KYeCPsULy_dQ7

Step 3.1 Assuming you simply installed the wheel to downloads run pip install ~/Downloads/tensorflow-2.4.1-py3-none-any.whl in your activated virtual environment

Step 4 Type python which will bring up >>>in your terminal and type

>>> import tensorflow
>>>

If there is no 'zsh illegal hardware instruction" error you should be good to go.

Note: If you are using anaconda, the above will also work. You can skip the virtual env steps (assuming you have a virtual env activated through Conda) and just go straight to the pip install as mentioned above (steps 3 and later).

Solution 2

Python3 is shipped with 2 architectures in M1.

$ 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

Here, it's very important to specify which one to use. You can do this by installing the script like this:

arch -arm64 bash install_venv.sh my_tf_env

if you have multiple python installations, use:

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

You can replace my_tf_env with any other name/path you choose.

Solution 3

I had the same issue

This is because of M1 chip. Now there is a pre-release that delivers hardware-accelerated TensorFlow and TensorFlow Addons for macOS 11.0+. Native hardware acceleration is supported on M1 Macs and Intel-based Macs through Apple’s ML Compute framework.

You need to install the TensorFlow that supports M1 chip Simply pull this tensorflow macos repository and run the ./scripts/download_and_install.sh

Share:
32,324
Admin
Author by

Admin

Updated on September 09, 2021

Comments

  • Admin
    Admin over 2 years

    I'm trying to get tensorflow working on my MacBook pro M1. However, I keep getting the following error when trying to import: zsh: illegal hardware instruction python

    I have downloaded and installed tensorflow via this link.

    These were my installation steps:

    • install a venv: python3 -m venv venv.
    • drag the install_venv.sh (which is located within the downloaded folder) file to the terminal, add -p at the end.
    • select the directory of the venv as the location where tensorflow should be installed.
    • activate the venv.
    • type "python".
    • try to import tensorflow: import tensorflow as tf.

    I'm using Python 3.8.2.

    I've seen some tutorials where this exact method does work, so I don't know what's the issue here.

  • Zaki Aziz
    Zaki Aziz about 3 years
    When I run $ file $(which python3) I only get one option: /opt/homebrew/Caskroom/miniconda/base/envs/svc-pdf-reader/bi‌​n/python3: Mach-O 64-bit executable x86_64 Could this be a homebrew related issue?
  • dedede
    dedede almost 3 years
    First, deactivate your anaconda env if it's active. Then, change the line to file $(which /usr/bin/python3) and run it.
  • Charles Duffy
    Charles Duffy almost 3 years
    There's more than one which available in MacOS -- the one built into zsh, and the one shipped as an external binary. They're quite unlike each other; I generally don't recommend using which at all.
  • dedede
    dedede almost 3 years
    With all due respect, your comment has not added anything useful to the conversation at all.
  • matanster
    matanster over 2 years
    Apologies for the cyber awareness but how would one verify the affiliation/identity of the maintainer providing that wheel file from over google drive?
  • Vakidis
    Vakidis over 2 years
    @matanster this is something I would also be wary of. In my case, it was such a pain to get it to run any other way so I went with this not optimal solution.
  • matanster
    matanster over 2 years
    Does this answer really mean that merely choosing the other python executable makes tensorflow seamlessly run as is?
  • logankilpatrick
    logankilpatrick over 2 years
    If it's any consolation, I have done this 3-4 times now and my computer has not been hacked : )
  • Shahar Gino
    Shahar Gino about 2 years
    You may install tensorflow for M1 machines with this pip install command: pip install tensorflow-macos
  • Pardeep Singh
    Pardeep Singh about 2 years
    Thanks for sharing this. Worked for me and wheel on google drive can be trusted :smile