新型MacのM1 ProへPythonをインストールしてベンチマークしてみよう

新型MacのM1 ProへPythonをインストールしてベンチマークしてみよう

M1 MacにPythonをインストールして実行速度を確認しているところ)

M1 MacへのPythonインストールについて

既に販売されているMacの多くが、IntelプロセッサからAppleシリコン(M1チップ)に移行している。性能が大幅に向上しており、これからはAppleシリコンを搭載したMacが主流になっていくだろう。

M1 MacへのPythonのインストールには従来通り、Python公式から提供されているインストーラーを利用する方法と、Homebrewなどを利用してターミナルからコマンドを入力してインストールを行うを使う方法の二系統がある。最初に、macOSにおけるPythonのインストール方法を確認してみよう。

インストーラーを使ってPythonをインストールする場合

インストーラーを使ってPythonをインストールする場合、Python公式からダウンロードしよう。原稿執筆時点では、3.10.0が最新であり、インストーラーはユニバーサルバイナリとなっており、Intel MacでもM1 Macの両方に対応したパッケージとなっている。

ダウンロードしたpkgファイルをダブルクリックすればインストーラーが起動する。あとは基本的に[続ける]ボタンを数回クリックすればインストールが完了する。インストーラーを使うのがもっとも手軽で確実な方法だ。

なお、本当にM1対応版なのか気になったので、簡易エディタや対話実行環境のIDLEでPythonを動かしてアクティビティモニターで確認してみた。Python3.10で試してみたのだが、種類に「Apple」と表示されており、M1に対応していることが分かる。Intel互換レイヤーで動くアプリには「Intel」と表示されるのでわかりやすい。

Homebrewを使ってインストールする場合

次にHomebrewを使ってインストールする方法を紹介しよう。プログラマーの多くは、Homebrewを使ってPythonをインストールすることが多い。Homebrewを使うと、必要なソフトウェアやライブラリがコマンド一発でインストールできるので、Pythonだけでなく複数のツールをインストールのに便利だからだ。

新型MacのM1 ProへPythonをインストールしてベンチマークしてみよう

Homebrewを使ってインストールする場合、最初にHomebrewとXcodeコマンドラインツールのインストールが必要となる。Spotlight(画面右上の虫眼鏡のアイコン)をクリックしたら「ターミナル.app」と入力してターミナルを起動しよう。そして、Homebrewのページにある「/bin/bash -c "$(curl -fsS ...」のようなコマンドをコピーして、ターミナルに貼り付けて実行しよう。すると、Homebrew本体と、Xcodeコマンドラインツールがインストールされる。

なお、原稿執筆時点でXcodeコマンドラインツールには、Python3が同梱されている。それでも、任意のバージョンのPythonが使いたい場合などは、以下のコマンドを実行することで、HomebrewからPythonをインストールできる。以下のコマンドを実行すると、その時点で安定最新版のPython3をインストールできる。

brew install python3

ただし、Homebrewを使ってインストールする場合、これまでとインストール先が異なるので注意しよう。これまで、HomebrewでPythonをインストールすると、/usr/local/Cellar以下にインストールされたのだが、M1 Macでは、/opt/homebrew/Cellar以下にインストールが行われる。

プロセッサの種類インストール先
Intel Mac/usr/local/Cellar/python@3.x
M1 Mac/opt/homebrew/Cellar/python@3.x/

PythonにおけるIntel Macとの互換性について

なお、IntelプロセッサからAppleシリコンに変わり、動かないアプリやライブラリもある。実は本原稿執筆時点で、連載84回目で紹介したMicrosoftの音声認識APIのSDKもインストールできなかった。GitHubのIssuesによると11月中旬には対応予定とのことだが、他のライブラリもM1搭載Macを利用の方はライブラリの対応まで待たなくてはならないだろう。

ちなみに、現状で上記のMicrosoftの音声認識SDKをインストールするには少し工夫が必要だ。筆者はコンテナ型の仮想環境「Docker」を導入し、x86_64プラットフォームのUbuntuをインストールし、その上でSDKをインストールすることで動かすことができた。

それでも、M1 MacにはRosettaというIntel Macをエミュレーションする機能が用意されている。Rosettaをインストールすれば「arch」というコマンドが利用できるようになる。コマンドライン上で「arch -x86_64 (コマンド)」のように実行すれば、Intel Mac用のコマンドを実行できる。つまり、Homebrewなどでx86_64のPythonをインストールして使用すれば、これまで通りに動かすことが可能だ。

他の方法として、iTermなどの外部ターミナルを導入しアプリ設定で「Rosettaを使用して開く」(実行ファイルを右クリックして「情報を見る」)にチェックを入れることで、ターミナルをIntel Macと同等に利用できる。(ただし、この場合、環境変数のPATHを工夫して、M1用とIntel用のコマンドが混ざらないように配慮する必要がある。)

とは言え、かなりのスピードでAppleシリコン対応が進んでいる。そのため、もう少しすれば「M1 Macで動かない」ということはほとんどなくなるだろう。それでも、それまでの間は、Rosettaを使う事でIntel用のアプリも使うことができる。

簡単な自作プログラムでベンチマークしてみよう

次に、Pythonで簡単なプログラムを作って、過去のMacbookと動作速度を比較してみよう。ここでは、以下のようなN番目のフィボナッチ数を求める関数を作ってみた。これを使って実行速度を比較してみよう。

# N番目のフィボナッチ数を求めるdef fib(n):if n < 2: return 1 else: return fib(n-1) + fib(n-2)print(fib(35))

上記のプログラムを「fib.py」という名前で保存して、コマンドラインで以下のコマンドを実行して実行時間を計測した。

time python3 fib.py

簡単なプログラムだが、過去のMacbook Pro/Airとの実行時間を確認してみよう。2年前のモデルはAirなので比較対象としては微妙だが、4年前のモデルと比べるとちょうど2倍速くなっているのが分かる。

モデル実行速度何倍速くなったか
Macbook Pro (2017) 2.3GHz Intel Core i72.62秒1倍
Macbook Air (2019) 1.6GHz Intel Core i52.34秒1.11倍
Macbook Pro M1 Pro (2021)1.31秒2倍

次に、マルチスレッドの性能も確認してみよう。threadingモジュールのThreadを利用して、連続で上記fib関数を呼び出して、フィボナッチ数を求めるプログラムを作ってみた。

import threading# N番目のフィボナッチ数を求めるdef fib(n):if n < 2: return 1 else: return fib(n-1) + fib(n-2)def print_fib(n): print(fib(n))for n in range(20, 35): t = threading.Thread(target=print_fib, args=[n]) t.start()

上記プログラムを「fib2.py」という名前で保存し、以下のコマンドを実行すると、実行時間を計測できる。

time python3 fib2.py

実行してみたところ、次のような結果となった。2年前のAir、4年前のProモデルと比べて2倍速くなっているのが確認できた。

モデル実行速度何倍速くなったか
Macbook Pro (2017) 2.3GHz Intel Core i75.36秒1倍
Macbook Air (2019) 1.6GHz Intel Core i55.57秒0.96倍
Macbook Pro M1 Pro (2021)2.59秒2.06倍

なお、AppleのM1 Proのサイトでは、CPUはCore i7よりも3.7倍速くなったと謳っていたが、比較対象マシンが異なるのか、または単純なPythonのプログラムではあまり性能を活かせていないようだ。それでも、数年ぶりにマシンを買い換えたら性能が単純に2倍になったというのは驚きだ。

まとめ

以上、M1 MacでPythonをインストールする方法について、また、Intel Macとの互換性について、そして、簡単なプログラムを作って実行速度を比較してみた。仕事のプログラムをコンパイルしてみて速くなったなぁと素直に思っていたが、実際に簡単なプログラムの実行速度を計測してみて、評判通りかなり速くなったことを確認できた。また個人的には、性能の良さに加えて、Touch Barが廃止され[esc]キーが大きくなったのが嬉しかった。いずれにしても、M1 Macでプログラミングがより楽しくなるのは確実だ。