M1搭載MacBook Airが来た!手っ取り早くPython計算環境を作ってみる


はじめに

2020年12月28日、M1 搭載 MacBook Air が来た。
せっかくの M1 だし、趣味用 Mac なので、Rosetta 2 は使わずに使用環境整備を行うことにします。

まずは、M1 (Apple Silicon) に対応している Google Chrome(ブラウザ)と CotEditor(テキストエディタ)をインストール。次は問題の Python のインストール。事前に調べておいた方法として、2つの方法を試してみました。

結果としてMiniforge3というのを使うことにより、これまで iMac で使っていたものと同等のものが、比較的容易に作成できました。iMac の python 環境は pyenv で作っていますが、複数バージョンを行き来する使い方は行っていません。pip と pyenv が M1 上で動き出したら、そちらでやり直すつもりです。

(参考)BasicTeXのインストールを試みたが断念 (2021.01.01)

TeX は Apple silicon に対応しているようであるので、試しに BasicTeX のインストールを試みました。

  • BasicTeX-2020-Universal.pkg
  • brew cask install basictex

上記2つとも、途中で Rosetta 2 のインストールを求められた為、インストールを断念。「インストールできない」という意味ではなく、Rosetta 2 を入れなければインストールできないということで、今回の思想に反するため「取りやめた」という意味。

TeX はなくても、HTML + MathJax で数式入り文書を残すことができるので、4月?に出るであろう2021年版に期待しようと思います。

Python インストール(Homebrew)

1つ目は Homebrew から Python をインストールするもの。以下に従ってやってみました。

https://dev.classmethod.jp/articles/make-3-9-as-python-default-on-m1-mac/

Homebew と Python 3.9 まではすんなりインストールできました。
しかし、numpy, matplotlib が pip で入らない、

Homebrew から numpy を入れてみましたが、numpy は OK、しかし pip による matplotlib のインストールなど後が続きません。
なお、numpy と同時に GCC (gfortran) と openblas もついでにインストールされる模様。numpy と openblas は uninstall したが、gfortran はいただいておきました。gfortran のバージョン確認結果は以下の通り。

(base) % gfortran -v
Using built-in specs.
COLLECT_GCC=gfortran
COLLECT_LTO_WRAPPER=/opt/homebrew/Cellar/gcc/10.2.0/libexec/gcc/aarch64-apple-darwin20/10.2.1/lto-wrapper
Target: aarch64-apple-darwin20
Configured with: ../configure --build=aarch64-apple-darwin20 --prefix=/opt/homebrew/Cellar/gcc/10.2.0 --libdir=/opt/homebrew/Cellar/gcc/10.2.0/lib/gcc/10 --disable-nls --enable-checking=release --enable-languages=c,c++,objc,obj-c++,fortran --program-suffix=-10 --with-gmp=/opt/homebrew/opt/gmp --with-mpfr=/opt/homebrew/opt/mpfr --with-mpc=/opt/homebrew/opt/libmpc --with-isl=/opt/homebrew/opt/isl --with-system-zlib --with-pkgversion='Homebrew GCC 10.2.0' --with-bugurl=https://github.com/Homebrew/homebrew-core/issues --disable-multilib --with-native-system-header-dir=/usr/include --with-sysroot=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk SED=/usr/bin/sed
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 10.2.1 20201220 (Homebrew GCC 10.2.0) 
(base) % 

(結論)Python本体とnumpyだけでは寂しい。Python計算環境構築としては失敗。

Python インストール(Miniforge3)

2つ目は、以下のサイトを参考に、というか書いてある通りに実行。

https://github.com/conda-forge/miniforge からarm64 (Apple Silicon)用のスクリプトを取ってきて実行。

bash Miniforge3-MacOSX-arm64.sh

あとはmyenvという環境を作って、欲しいものをどんどんインストールしていきます。このmyenvというのは好きな名前に。私は先人の例に従い同じ名前にしてしまった。

conda create -n myenv python=3.9
conda activate myenv

conda install numpy
conda install matplotlib
conda install sciPy
conda install pandas
conda install scikit-learn
conda install openpyxl
conda install jupyterlab

myenv をアクティブにして入れたものが import できるか確認してみると。。。OK。もちろん Jupyter notebook も動きます。

(base) % conda activate myenv
(myenv) % python
Python 3.9.1 | packaged by conda-forge | (default, Dec 21 2020, 22:08:11) 
[Clang 11.0.0 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> import matplotlib
>>> import scipy
>>> import pandas
>>> import sklearn
>>> import openpyxl
>>> quit()
(myenv) % 

openpyxl を入れていますが、MS-officeが入っていなくても問題なし。昔作ったexcelファイルも読み込めますし、excel形式で出力したものは、Mac標準付属のNumbersで中身の確認ができます。入力データ用の新しいexcelファイルもGoogle spreadsheetで作成することができます。

とは言いながら Microsoft 365 を購入

1月14日、Microsoft 365 を購入しました。この時点で、Apple silicon に対応しており、問題なくインストール。問題なく使えています。

OneDrive.app は Intel で動く

ここで、Word, Excel, PowerPoint は Apple silicon 対応していますが、OneDrive.app は Intel で動きます。せっかく Microsoft 365 を購入したので、OneDrive を使おうとしたら、そのときに Rosetta 2 が入ってしまったよう。
そこで、Rosetta 2 は入れないという方針を変換。入ってしまったものはしょうがないし、1TB の OneDrive が使えないのは癪なので、前々から入れようと思っていた、Apple silicon 未対応の Google日本語入力, Google Earth Pro, Norton Security も入れてしまいました。これらも問題なく動いています。

jupyterlabでインストールしたが使っているのは jupyter notebook

Jupyter notebook が動いていることを示す写真を示します。デモなので Sidecar で iPad Air に Jupyter notebook の画面を表示してみました。

(結論)現時点(2020.12.29)で手っ取り早くPython計算環境を作るには「Miniforge3」を使うのが簡単。少なくとも numpy, Matplotlib, scipy, pandas, scikit-learn, openpyxl, Jupyter notebook が使えます。ただし、使うためには conda 環境の activate が必要。

おまけ:M1 MacBook Airは本当に速いのか?

Python matplotlibの色塗り処理 (2021.02.21)

以前投稿したこちらの記事で行った図化処理をM1 MacBook Air(最低スペック:メモリ 8GB)の Python でやってみた。GMT (Generic Mapping Tools)がApple siliconに対応しておらず、現状使えないため、M1 MacBook Airでどのくらいのスピードがでるか試してみた次第である。結果は驚くばかり。

ついでに、iPad Air 4 (A14 Bionic) の Pythonista 3 でもやってみたら、やっぱ速い!

Intel MBP

  • MacBook Pro (Retina, 13-inch, Mid 2014)
  • macOS High Sierra
  • Python 3.6.4
  • GMT 5.4.3
  • ImageMagick 7.0.7

M1 MBA

  • MacBook Air (M1, 2020)
  • macOS Big Sur
  • Python 3.9.1
項目 Intel MBP
Python作図
Intel MBP
GMT作図
M1 MBA
Python作図
iPad Air 4
Pythonista3作図
Python作図(png) 242 sec --- 14 sec 17 sec
Pythonデータ処理 --- 2 sec --- ---
GMT EPS出力 --- 7 sec --- ---
Imagemagick処理 29 sec 47 sec --- ---
Python画像連結処理 --- --- 2 sec 2 sec
合計 271 sec 56 sec 16 sec 19 sec

Python 数値計算 (2021.02.25)

最初に投稿したこちらの数値積分についても速度比較を行ってみた。結果は以下の通り。

iPad の Pythonista3 は、基本的に numpy, matplotlib, sympy しか使えないが、scipy や pandas, sklearn などが使えるようになれば、多様な計算に活用できるのだが、その見込はなさそうで残念。

項目 Intel MBP
Python 3.4.3
iPad mini 4
Pythonista3
M1 MBA
Python 3.9.1
iPad Air 4
Pythonista3
Newmark $\beta$ 2.072 sec 9.7 sec 1.264 sec 1.450 sec
Runge-Kutta 2.533 sec 11.5 sec 1.634 sec 1.732 sec
FFT 1.613 sec 7.7 sec 1.010 sec 1.173 sec
scipy.odeint 30.134 sec --- 16.793 sec ---

(結論) M1 MacBook Air は速い!
加えて iPad Air 4 (A14 Bionic) も速い!

以 上