ゼロからはじめるPython 第85回 新型MacのM1 ProへPythonをインストールしてベンチマークしてみよう
高性能なAppleシリコンM1 Pro/Maxチップを搭載したMacbook Proが発売され話題になっている。そこで、筆者もM1 Proを入手したので、今回はPythonのインストールを紹介し、以前のモデルと性能を比較する簡単なベンチマークを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だけでなく複数のツールをインストールのに便利だからだ。
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以下にインストールが行われる。
○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倍速くなっているのが分かる。
次に、マルチスレッドの性能も確認してみよう。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倍速くなっているのが確認できた。
なお、AppleのM1 Proのサイトでは、CPUはCore i7よりも3.7倍速くなったと謳っていたが、比較対象マシンが異なるのか、または単純なPythonのプログラムではあまり性能を活かせていないようだ。それでも、数年ぶりにマシンを買い換えたら性能が単純に2倍になったというのは驚きだ。
○まとめ
以上、M1 MacでPythonをインストールする方法について、また、Intel Macとの互換性について、そして、簡単なプログラムを作って実行速度を比較してみた。仕事のプログラムをコンパイルしてみて速くなったなぁと素直に思っていたが、実際に簡単なプログラムの実行速度を計測してみて、評判通りかなり速くなったことを確認できた。また個人的には、性能の良さに加えて、Touch Barが廃止され[esc]キーが大きくなったのが嬉しかった。いずれにしても、M1 Macでプログラミングがより楽しくなるのは確実だ。
自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。直近では、「シゴトがはかどる Python自動処理の教科書(マイナビ出版)」「すぐに使える!業務で実践できる! PythonによるAI・機械学習・深層学習アプリのつくり方 TensorFlow2対応(ソシム)」「マンガでざっくり学ぶPython(マイナビ出版)」など。
○M1 MacへのPythonインストールについて
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だけでなく複数のツールをインストールのに便利だからだ。
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以下にインストールが行われる。
○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倍速くなっているのが分かる。
次に、マルチスレッドの性能も確認してみよう。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倍速くなっているのが確認できた。
なお、AppleのM1 Proのサイトでは、CPUはCore i7よりも3.7倍速くなったと謳っていたが、比較対象マシンが異なるのか、または単純なPythonのプログラムではあまり性能を活かせていないようだ。それでも、数年ぶりにマシンを買い換えたら性能が単純に2倍になったというのは驚きだ。
○まとめ
以上、M1 MacでPythonをインストールする方法について、また、Intel Macとの互換性について、そして、簡単なプログラムを作って実行速度を比較してみた。仕事のプログラムをコンパイルしてみて速くなったなぁと素直に思っていたが、実際に簡単なプログラムの実行速度を計測してみて、評判通りかなり速くなったことを確認できた。また個人的には、性能の良さに加えて、Touch Barが廃止され[esc]キーが大きくなったのが嬉しかった。いずれにしても、M1 Macでプログラミングがより楽しくなるのは確実だ。
自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。直近では、「シゴトがはかどる Python自動処理の教科書(マイナビ出版)」「すぐに使える!業務で実践できる! PythonによるAI・機械学習・深層学習アプリのつくり方 TensorFlow2対応(ソシム)」「マンガでざっくり学ぶPython(マイナビ出版)」など。