You've probably heard a lot about the MacBook that contains the new Apple M1 chip. Quick summary: It's fast. Like, really fast. You, a data scientist or related tech professional, may have bought one.
Disclaimer: We'll attempt to keep this updated as best we can. These instructions are up to date as of November 30, 2020.
Run a Jupyter notebook on Apple M1 Mac
Either you're opening a notebook right now and your kernel instantly dies, or you haven't been able to get a Jupyter notebook operational yet. That's why we're here.
In this blog, we'll walk through how to get Jupyter functional on your M1 computer -- starting with the download step and ending with a fully operational Jupyter notebook. (We'll assume you don't know if you have Jupyter on your computer yet. If you know with certainty that you have Jupyter downloaded, you can skip down here.)
Check if Python & Jupyter are already installed.
Step 1: Open up your Terminal by holding Command and hitting Space, which should bring up your Spotlight Search. Then, type Terminal
and hit Return.
Step 2: In your Terminal, type jupyter notebook
and hit Return.
- If your Terminal looks like the image directly below and a Jupyter interface opens in your browser like the the second image below, then Jupyter is installed. You're almost done. (It's OK if you get a kernel error, we'll figure that out later!) Skip to step 6.
- If, instead, your Terminal says
command not found: jupyter
then you need to see if Python is even installed before you can install Jupyter. Move to step 3.
Step 3: Let's check if Python has been installed. In the terminal, type python3
and hit Return.
- If you see something similar
Python 3.X.Y
, with the>>>
at the bottom, then great! That means Python 3 is installed. Go ahead and typequit()
. Jump ahead to step 5. - If you get a
command not found: python3
error, this means that you need to install Python. New Mac operating systems should have it already installed, so if you're finding an error, make sure that there isn't a typo somewhere. Move to step 4.
Step 4: You can install Python by going to XCode Command Line Tools. You'll need to login with your Apple ID and follow the instructions. Note that the normal Anaconda download won't work here, as the M1 computer isn't 64-bit. Once you're done, head back up to Step 3.
Step 5: If you've installed Python but had trouble installing Jupyter, then go to your Terminal and type pip3 install jupyter
. If that doesn't work, then head here and follow the instructions.
Fix the Jupyter kernel issue
At this point, Python and Jupyter should be installed. You want to stop your kernel from repeatedly dying.
Step 6: In your Terminal, type jupyter notebook
and hit Return. Once you do, then click "New" (on the right-hand side) and open up a Python 3 notebook.
- If you're able to run commands in your notebook – great! The tutorial is over. Skip to the bottom for a note about TensorFlow (if TensorFlow is what you care about) or feel free to check out some of our other posts, mostly about computer vision, here.
Step 7: Thanks to this link and user burakozdamar publicizing George Hotz' YouTube video, we learned a workaround that will stop your Jupyter notebook kernel from... well, stopping.
You will need to use the Terminal and/or Finder to find a filepath in your system that ends with ipykernel/eventloops.py
. (On my system, it is lib/python3.8/site-packages/ipykernel/eventloops.py
, but yours may vary slightly. The important thing is that you find the eventloops.py
file.) You will make one change to this file.
- Open Terminal.
- Type
nano filepath/ipykernel/eventloops.py
where filepath should be the specific filepath that takes you to that specificeventloops.py
in theipykernel
folder. Hit Enter. You should see the following:
- Use your arrow keys to navigate to
def _use_appnope()
, which is the first function toward the bottom of the screenshot above. Thereturn
line is what we are going to edit. - In that
return
line, use your arrow keys to navigate all the way to the right-hand side of that line. AfterV('10.9')
, you are going to add:
and platform.mac_ver()[2] != 'arm64'
The full line should look like this when you are done:
- Once you have made that edit and are sure you haven't created a typo, then hold Control and hit x to exit.
- It will ask you to save. Press y. Then press Return.
I recognize: this process is a very "do as I say and don't ask any questions" process. If you want to know more, George Hotz excellently describes the debugging process in his video; you can jump to around where he makes the change (47 minutes, 30 seconds) here.
Note that George also edits the docstring (the text between the """ triple quotation marks """) to better reflect what the function is doing – checking for Apple Silicon.
Step 8: If you've followed the above steps, you should be good to go. I usually quit the Terminal (hold Command and press Q) because I think that, sometimes, updates won't immediately take effect without restarting the Terminal. Make sure that it works by returning to step 6 and writing commands in your Jupyter notebook.
You should now be set up to go
Thanks for following along. I hope this is helpful. Let us know if you spot any mistakes or needed updates (use the email button on the left side of the screen) – I want to keep this as helpful as possible for people, and new technology tends to change very quickly.
If you're next step is using OpenCV, follow our guide on how to to safely install OpenCV with your M1.
Want to use TensorFlow with your M1?
If your goal is to install TensorFlow, it isn't officially supported yet on the M1.
However, you can create a virtual environment following the instructions here. Notice that while there are workarounds for certain TensorFlow features, other features like object_detection
are not yet supported. If you learn of workarounds, let us know by emailing us.
Cite this Post
Use the following entry to cite this post in your research:
Matt Brems. (Nov 30, 2020). How to Run Jupyter Notebooks on an Apple M1 Mac. Roboflow Blog: https://blog.roboflow.com/how-to-run-jupyter-notebooks-on-a-mac-m1/
Discuss this Post
If you have any questions about this blog post, start a discussion on the Roboflow Forum.