Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Anaconda and upgrading to new M1 Mac

Background

I've just got a new M1 mac mini dev machine, and migrated from my old x86 mac using apple's migration assistant.

Doing that also copied over all my conda environments to the new machine (they were all in my home directory)

I installed the latest version of anaconda and anaconda plus all my python code and environments seem to work fine (this includes a bunch of wheel modules, notably numpy/scipy).

I did a bunch of googling for my questions below, but couldn't find any good answers anywhere - so I thought I'd ask SO as this seems like a quite common situation others will run into

Questions

  • Does anyone know the status of M1 native versions of python/numpy/scipy etc provided by conda forge?
  • I presume that all the binaries in my environments for python/numpy etc all still the old x86 versions, as they were all in environments in my home directory, and running via emulation. So, how do you go about changing/updating those to a M1 arm native version if/when available?
like image 520
Richard Avatar asked Jan 01 '21 21:01

Richard


4 Answers

A quick update as of July 2021.

TLDR

  • The conda-forge group have a M1 native conda installer here.
  • Installation is simple - run the installer, and you have conda up and running.
  • This will install an M1 native conda, and that conda's default environment will by default install M1 native python versions and M1 native versions of modules (if available).
  • There seem to be native osx M1 native wheels for most common modules now available on the conda-forge channel.

Current status

It seems Anaconda still do not have a native M1 version, nor does Miniconda. ...I can't figure out why it's taken so long and neither still seem to have native M1 support, but that's a separate issue.

Alternative

However, as steff above mentioned, conda-forge (as in the group responsible for maintaining the conda-forge channel) do have a installer for their version of conda that is itself both native M1, and also sets up your environment to pull M1 native wheels where available. This they call Miniforge.

Their github is here.

Various installers for their Miniforge (via direct download, curl or homebrew) can be found on their github page (above) - the direct link to the ARM native miniforge installer is here.

A quick search on conda-forge show's almost all common modules do now have native M1 wheels available. (look for supporting platform 'osx-arm64` eg numpy)

Caveats

I've not tested this too extensively yet, and I'm not sure exactly what happens if a non-M1 wheel is available (I believe it will default to downloading a no-arch version).

I'm also not sure/haven't tested whether you can mix and match M1 wheels with x86 mac wheels. (I'm guessing this would work, but haven't tried).

I also have only done minimal testing using the conda's pip, and how well it recognizes/tries to download/resolves M1 vs x86 pip packages.

like image 116
Richard Avatar answered Oct 20 '22 11:10

Richard


The answer here is going to evolve over time, so here is the most up-to-date knowledge I have as of 27 Jan 2021.

Installing conda in emulation mode works completely fine. All you need to do is to install it in a Terminal run in emulation mode, or else install it using a Terminal emulator that has not been ported over yet.

Once your conda environments are up and running, everything else looks and feels like it did on x86 Macs.

If you'd like a bit more detail, I blogged about my experience. Hopefully it helps you here.

like image 35
ericmjl Avatar answered Oct 20 '22 11:10

ericmjl


I got my M1 about 2 weeks ago and managed to install absolutely everything I need natively from conda-forge and pip. The installer you can download here. As of 5Feb Homebrew is also officially supported on osx-arm64.

like image 44
steff Avatar answered Oct 20 '22 11:10

steff


2022/03/02 answers
Native M1 installations are pretty simple now. Here are a few options for Miniforge and Miniconda.

(1) Using Apple's instructions for Tensorflow with Miniforge
This uses the same Miniforge solution mentioned above but includes an M1-optimized Tensorflow install, meaning TF has access to the M1 GPU cores.

Look for the "arm64: Apple Silicon" section at:
https://developer.apple.com/metal/tensorflow-plugin/

(2) Running native M1 with Miniforge and Rosetta with Miniconda side-by-side (Jeff Heaton's tutorial from 2021/11)
Jeff basically uses Apple's solution above for the native Miniforge install.

https://www.youtube.com/watch?v=w2qlou7n7MA

(3) Using native M1 Miniconda There was a native M1 Miniconda installer published in 2021/11: Miniconda3 macOS Apple M1 64-bit bash (Py38 conda 4.10.1 2021-11-08)

https://docs.conda.io/en/latest/miniconda.html

My Experiences
I successfully ran the side-by-side installation from Jeff's tutorial with a few changes. It was very easy and I verified that in the native M1 Miniforge environment that Numpy is using the optimized BLAS/LAPACK linear algebra libraries and that Tensorflow has GPU access. I will update here after I run the Miniconda native M1 installer.

like image 33
andrew Avatar answered Oct 20 '22 09:10

andrew