iMacに搭載されているAppleシリコン「M1チップ」で遊んでみた🍺
最近のApple製品はIntelのものからAppleシリコンに切り替わってきている。
公式サイトなど眺めていると、「Neural Engine」がうんたらかんたら書いてある。
どうやらこれは、機械学習関連の処理に特化しているらしい。
となると、AIを研究テーマとしている自分としては性能がとても気になる。
気になったのは今に始まったことではなく、M1チップ搭載のiMacになってからずっと気になっていたのだが、うまく動作しなかったので使うのを諦めていた。
しかし、どんどん新しいAppleシリコンが登場するためどうしても気になり、pytorchの公式サイトを訪れてみると、なんとMacOSのバージョンが12.3以上であるとちゃんと動作するみたいだ。
ということで早速動かしていく。
1. ローカルにPytorchをインストール
インストールはかなり簡単で、pytorchの公式サイトに訪れ、条件を選択するだけである。以下がそれに当たる。これをターミナルで実行し、少し待つだけですぐ使えるようになる。(簡単すぎる。。。)
# MPS acceleration is available on MacOS 12.3+ pip3 install torch torchvision torchaudio
2. StyleGAN2で画像生成
最近、StyleGAN2に移行し、pytorchでも動くようになったので、こちらを使用して画像を生成する。
「Diffusion Modelが流行っているのに、まだStyleGANなの?」なんて絶対に言わないで欲しい(絶賛研究中)。
今回は画像生成の部分(Synthesis Network)のみに注目し、画像を100枚生成させる。この時間をCPU(M1)、GPU(M1)、GPU(NVIDIA:Tesla V100)で比較する。
import os import time import pickle import numpy as np import PIL.Image import torch # deviceをcpu、mps、cudaに切り替えて試す device = torch.device('mps') # 研究で使用している解像度256x256のモデルで検証 network_pkl = 'pkl/bedroom256_best.pkl' with open(network_pkl, 'rb') as f: G = pickle.load(f)['G_ema'].to(device) # 一つの潜在ベクトルwを生成 G.eval() # 同じ画像を生成するため、seedを固定 torch.manual_seed(124) z = torch.randn([1, G.z_dim]).to(device) w = G.mapping(z, None) # 100回生成するのを5回繰り返す for j in range(5): start = time.time() for i in range(100): with torch.no_grad(): img = G.synthesis(w, noise_mode='const', force_fp32=True) end = time.time() print(end - start)
その結果がこちらである。torch.device('mps')
の場合、1回の処理で5回も繰り返すとメモリ不足になり実行が中断されるので、5回に分けて実行することにした。メモリ管理に関してまだ勉強不足であるため、解放の仕方が分かり次第追記する。
# mpsの場合 17.13364028930664 16.948246717453003 16.867655038833618 16.947510719299316 17.06121802330017 # cpuの場合 52.91600322723389 51.872626304626465 50.78024196624756 47.96811890602112 48.53954887390137 # cudaの場合 2.681710958480835 0.978827953338623 0.9776475429534912 0.9765019416809082 0.9730045795440674
結果の通り、cpuよりもmpsが速く、mpsよりもcudaが速いことがわかった。次は生成画像の質を見てみる。
LPIPSなど定量的に評価するのではなく、自分の目で評価する。
生成画像の質は人間がどう思うかが個人的に重要だと思う。
ということでその結果が以下である。



正直画像の質は全く変化がない。変わるのは時間だけである。
- 特に急いでいない
- 他の作業をしている間に画像を生成させておく
- 他の作業にGPUを使いたい
こういった時にM1チップは使えるのかもしれない。あくまでも推論であるため、学習に使えるかどうかはまた話が別である。今後MNISTデータセットを用いて分類問題を解くのもありかもしれない(今後の自分に期待)。
3. 感想
初めてのマイパソコンがMacBookAir(2017年モデル)で、そこからずっとMacを使ってきたということもあり、研究室のパソコンをiMacにして頂いた。ちょうどそのあたりからIntel製のものからM1チップに変わりつつあったので、M1でAIができたらなんて考えていた。今回試してみて、全く使えないということはなかったので、個人的に嬉しかった(torch.device('mps')
にするだけなので簡単)。今やM2チップが出ており、コア数が増えている。となると、今よりもっと速いスピードで計算することができるかもしれないし、cudaに負けない時代が来るかもしれない。そんな時代が来たら面白いなとも思う。もしM2チップ搭載のMacを手に入れることができたら、また試してみたいと思う。
ここまで読んでいただき、ありがとうございます。
4. 余談
タイトルの🍺について話させてください。
macにはhomebrew
と呼ばれるパッケージ管理システムがあります。
そのhomebrewのサイトがこちらなのですが、リンク先に飛んでみるとなんとビールのアイコンが。
brewには「醸造する」という意味があるそうで、homebrewで「自家醸造」だそう。
このことから、homebrewというのは「ユーザが自らパッケージをビルドして使用する」のようなイメージだそうです(参考)。
使い方はとても簡単で、pip install
のように、brew install
と、ターミナルで打つだけ。
具体的には、python
のバージョン管理をしてくれるpyenv
などをインストールすることができます。
brew install pyenv
このようにbrew install
を実行すると、ターミナルに🍺のアイコンが出てくるんですよね。
初めて見た時に、めちゃ可愛い!となりまして、そこからたまに🍺をつけたりしたくなったり、、、
今回もmacに関するお話だったので、タイトルにつけてみました。
macに関連する話だからhomebrewにつなげるのは浅すぎるかもしれませんが。。。実際にビールが好きというのもあって、🍺のアイコンにすごく愛着がありますね。みなさんも是非使ってみてください!!!

今西 渉
大阪大学大学院
生命機能研究科 卒業