How to have Tensorflow2 working on MacOS M1 and manage your libs effectively using pyenv and virtualenv
Short Intro
Last few months I’ve been developing myself in the field of Machine Learning and recently I dove into Deep Learning. Unfortunately, there was a wall I hit painfully, as Tensorflow doesn’t natively support M1 chipset.
So, I spent dozens of hours trying out many different tutorials on how to fix that, which made my OS messy and problematic to manage (I’m looking at you, Anaconda). And then I learnt about pyenv and after few more hours — got it all fully manageable, clean, easy to re-install and working. Almost like NPM for javascript projects 🙂
In the following solution I assumed you are using MacOS Monterey v12.4 with M1 chipset and also that you have Homebrew installed.
How to
Let’s create a new folder, for instance: tensorflow-test
and in that folder, create a script install.sh
with the following content:
brew install pyenv
pyenv install 3.9.13
pyenv global 3.9.13
pip install virtualenv
virtualenv env
source env/bin/activate
ipython kernel install --name "env" --user
pip install tensorflow-macos tensorflow-metal jupyter pandas matplotlib seaborn sklearn plotly babyplots xgboost
Now, run the script using the following command:
chmod +rx ./install.sh
./install.sh
This may take a while, depending on your internet speed. The result for me looks like this (might be a bit different than yours, as I already have some tools installed):
Now, if you don’t see (env)
to the left of your login then you need to repeat this:
source env/bin/activate
Now, you can test if everything works:
which python
As you can see, your python installation lies in tensorflow-test/env
folder, which is veeery expected 🙂
Now, let’s quickly test if tensorflow is really working:
python -c "import tensorflow as tf;tf.test.gpu_device_name();tf.config.list_physical_devices('GPU')"
No issues with importing tensorflow and as the response you should get something similar to what’s above — the line marked in red means tensorflow-metal was able to recognize the GPU of your Macbook.
Summary
That’s all! Quick and dirty 🙂 That way you can have different python environments with different libs configured for different projects and you can utilize the Macbook’s GPU as well. Nice 🙂
That’s all! Quick and dirty 🙂 That way you can have different python environments with different libs configured for different projects. Nice 🙂
If you have any questions, opinions or you see a mistake — please mention it in the comments below.
If I have more time then I will add few words about using Tensorflow in Jupyter notebook.
Thanks!