【M1チップ】MacでPythonデータ分析→結論:注意が必要です

スポンサーリンク

こんにちは。
新型Macが発売されましたね。
ちょうどノートPCを新調したかったこともあり、早速買ってしまいました!

今回のMacで最も大きな変更といえば、CPUがIntel製のプロセッサからApple独自設計(ARM社製)のプロセッサに変更された点です。
どうやらMacOS専用に設計されたことで、演算性能が大幅に向上した上に、省エネ化も実現したとのことで、AppleのHPや各種サイトのベンチマークを見る限り、非常に期待できます!

しかし、プロセッサの仕組みが大きく変わったことで、これまでのIntel製CPUに対応させたソフトがそのままでは使えません!

そうすると心配なのは、自分が普段使っているソフトは対応しているのか?という点だと思います。
Appleは従来のIntel向けアプリをM1チップ搭載Macで動作させるために、変換ソフトとしてRosettaを用意しています。
とはいえ、Rosettaで変換できたとしても動作が遅いとガッカリですよね。
というわけで今回は、私が普段データ分析、機械学習で使っているAnaconda環境のPyhtonライブラリが動くのか演算速度はどう変わったのかを検証してみました。

①Mac Book Proが到着!AnacondaにはRosettaが必要でした。

運よく発売日の11/17に到着しました!今回購入したのはこちら。メモリ増設等のカスタマイズはなしです。


週末にAnacondaを検証するため、平日夜な夜なセットアップしました。
Anacondaのグラフィカルインストーラーをダウンロードし、インストールを試みました。

Rosettaが必要とのことです。インストールして進むと、勝手に変換してくれるようで、
無事Anacondaをインストールできました。

②PyStan2.19とTensorflow2.0は動きませんでした。。。

ベイズ統計で使用しているPyStanと、深層学習用で勉強中のTensorflowを検証するため、それぞれ仮想環境を作ってインストールしました。

しかし、Condaでインストールは出来たものの、PyStan2.19.0とTensorflow2.0は動きませんでした。。。
これらを使う可能性のある人は注意していください。
(Tensorflowは、M1チップに対応したver.2.4ベータ版が公開されているようです。Anaconda環境で使えるようになったら試したいと思います。)

③Intel第四世代 Core i7 、AMD Rayzen5 との計算速度比較

手持ちのPCとM1チップ搭載MacBookProを比較してみました。
MacBookProのみメモリが8GBですが、そこまでメモリを食う計算は検証していないので、大したハンデにはならないと思います。

M1 MacBookPro :MacBookPro 13inch Late2020, OS X 11.0, メモリ 8GB
AMD Rayzen 5 3500: Galleria, ubuntu18.04, メモリ16GB
Intel core i7 4770S:iMac Late2013, OS X 10.14, メモリ 16GB

◯Numpyでシンプルな配列計算

Numpyで1,000,000個の整数配列の総和を計算します。

$ ipython
In [1]: import numpy as np                                                                                              

In [2]: def np_test(n): 
   ...:     a = np.arange(n) 
   ...:     return np.sum(a) 

In [3]: %timeit np_test(1000000)

【結果】

◯Scikit-learn ランダムフォレスト回帰

ランダムフォレスト回帰でボストン住宅価格データにフィッティングさせた後、特徴量の重要度を計算します。

import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestRegressor as RFR
from sklearn.model_selection import train_test_split
from sklearn import datasets
import time

start_time = time.perf_counter()

boston = datasets.load_boston()

df1 = pd.DataFrame(boston.target, columns = ["Target"] )
df2 = pd.DataFrame(boston.data, columns = boston.feature_names)
df3 = pd.merge(df2, df1, left_index = True , right_index=True)

train_data_bs, test_data_bs, train_labels_bs, test_labels_bs = train_test_split(boston.data,boston.target, test_size=0.2)

rfr = RFR(n_jobs = -1, n_estimators= 100, random_state=123)
rfr.fit(train_data_bs, train_labels_bs)

fti = rfr.feature_importances_
print(fti)

end_time = time.perf_counter()
print('Time : '+ str(end_time-start_time))

【結果】

どちらの計算でもM1チップが最も速いですね。
ただ、期待したほどの差は見られませんでした。
AnacondaがM1チップに最適化できていないせいだと思います。

余談ですが、Rayzenが思った以上に遅いのがショックでした。
もともとマルチスレッドが売りのCPUですし、GPU搭載機を手頃な値段で買いたかったので選んだのですが。
アップグレードを検討するかもしれません。
後から足すつもりでメモリも16GBしか載せてないので。

まとめ

M1チップ搭載MacBookProを購入したので、Anaconda環境で計算速度やライブラリの使用可否をチェックしました。

現状、AnacondaはM1チップにネイティブに対応しているわけではないので、期待していたほどの処理速度は出ませんでしたが、それでも一般的なデスクトップPCよりは計算が速いといえそうです。

今回チェックした中では、Numpy、Pandas、Matplotlib、Seaborn、Scikit-learnといった、通常のPythonのライブラリはひとまず動作しました。

しかし、PyStan2.19、Tensorflow2.0は未対応でした。
これらは内部で独自の言語を使っているためと思われます。

Tensorflowは、M1チップに対応したver.2.4のベータ版がすでに出ているようなので、それに期待しようと思います。
(ベンチスコアでは非常に良い結果が出ているようです。)

結論としては、
「データ分析、プログラム開発などのメイン機として購入するのは待ったほうが良いです。」

私としては、ブログ執筆や、iPhoneのデータ管理、メールなどの普段使いとしてMacBookProを使いつつ、
Pythonデータ分析のメイン機としては当面、Rayzenに頑張ってもらうという体制にしようと思います。

以上、MacBookProを買ったよ!というご紹介でした!

タイトルとURLをコピーしました