Apple Silicon(M1) Mac+tensorflow-macosでディープラーニングする
M1 Macでディープラーニングしてみる
M1 MacBook Airに一通り開発環境をセットアップしました。
ただ、ディープラーニング関係はセットアップできていなかったので、とりあえずTensorFlowを入れて、色々AI関係のソフト動かして遊んでみました。一通り動いてそれなりに遊べたのですが、色々ハマったことで知見も得られたので簡単にまとめておきます。
まず、分かったことは以下です。
- M1 MacでもTensorFlowは普通に使える
- PyenvとかHomebrewで入れたPythonは使わない(消した)方が良い
- MiniForgeがtensorflow-macosを入れられる上に関連パッケージも比較的インストールできてよい(公式の方法だとpipがまだOpenCVとかに対応していない)
- M1 MacBook AirでiMac(3.6GHz クアッドコア Intel Core i7)相当の速度が出ている
参考にしたサイトなどは、本記事の最後にまとめました。先人にめっちゃ助けられました。
本記事の流れは以下です。
- Python環境の構築
- TensorFlowのインストール
- AI(ディープラーニング)で遊んでみる
ディープラーニングに関しては、推論のみで学習は実施していません。ご了承ください。
Python環境の構築
Python環境の構築ですが、私は、最初に紹介したセットアップ記事の通り、PyenvやHomebrewのPythonなどをインストールしていたのですが、現状これらはTensorFlowに対応していないため、それらを削除するところからはじめました。
まっさらな環境の人は、以下を実行しておくだけで次に進んでOKです。
$ xcode-select --install
Pyenvが入っている場合は、~/.zshrc
からpyenv関係の設定を次のようにコメントアウトします。
#export PYENV_ROOT="$HOME/.pyenv"
#export PATH="$PYENV_ROOT/bin:$PATH"
#eval "$(pyenv init -)"
#eval "$(pyenv virtualenv-init -)"
#export PYENV_VIRTUALENV_DISABLE_PROMPT=1
続いて、HomebrewのPythonを以下コマンドでアンインストールしました。
$ brew uninstall --ignore-dependencies python3
以下の通り、Python3のバージョンが3.8(3.9は現状NG)で、Python3のパスが/usr/bin/python3/
になっていればOKです。
$ python3 -V
Python 3.8.2
$ which python3
/usr/bin/python3
TensorFlow for macOSのインストール
macOS対応のTensorFlowのインストールです。公式の方法だと、pipで関連パッケージ(OpenCV)を現状入れられないので、MiniForgeで入れる方法が良いです(現状一択)。
公式の方法で入れる必要のある人は、ベンチマークするガチ勢かPythonのM1対応を推し進める勇者だけだという理解です。
MiniForgeを使ったインストール方法
推奨の方法です。まずは、MiniForgeをインストールします。
$ wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh
$ bash Miniforge3-MacOSX-arm64.sh
途中色々聞かれたら、Yes or Enterを入力してください。
続いて、MiniForgeにPython3.8環境を構築します。
$ conda create --name python38 python=3.8
Python3.8環境をアクティベートします。これでPython3.8の仮想環境が使えるようになりました。
$ conda activate python38
このアクティベートされた状態で、事前に必要なライブラリをインストールします。
$ conda install numpy
$ conda install six
$ conda install matplotlib
$ conda install opencv
以下コマンドでTensorFlowをインストールします。
$ wget https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha2/tensorflow_macos-0.1alpha2.tar.gz
$ tar xvzf tensorflow_macos-0.1alpha2.tar.gz
$ env="$HOME/miniforge3/envs/python38"
$ libs="$PWD/tensorflow_macos/ar
m64/"
$ pip install --upgrade -t "$env/lib/python3.8/site-packages/" --no-dependencies --force "$libs/grpcio-1.33.2-cp38-cp38-macosx_11_0_arm64.whl"
$ pip install --upgrade -t "$env/lib/python3.8/site-packages/" --no-dependencies --force "$libs/h5py-2.10.0-cp38-cp38-macosx_11_0_arm64.whl"
$ pip install --upgrade -t "$env/lib/python3.8/site-packages/" --no-dependencies --force "$libs/tensorflow_addons_macos-0.1a2-cp38-cp38-macosx_11_0_arm64.whl"
$ conda install -c conda-forge -y absl-py
$ conda install -c conda-forge -y astunparse
$ conda install -c conda-forge -y gast
$ conda install -c conda-forge -y opt_einsum
$ conda install -c conda-forge -y termcolor
$ conda install -c conda-forge -y typing_extensions
$ conda install -c conda-forge -y wheel
$ conda install -c conda-forge -y typeguard
$ pip install wrapt flatbuffers tensorflow_estimator google_pasta keras_preprocessing protobuf
$ pip install tensorboard
$ pip install --upgrade -t "$env/lib/python3.8/site-packages/" --no-dependencies --force "$libs/tensorflow_macos-0.1a2-cp38-cp38-macosx_11_0_arm64.whl"
インストールできたか確認しましょう。以下のようにコマンド実行してTensorFlowをインポートできていればOKです。
$ python3
Python 3.8.6 | packaged by conda-forge | (default, Jan 25 2021, 22:55:00)
[Clang 11.0.1 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> tf.__version__
'2.4.0-rc0'
公式のインストール方法
TensorFlow for macOSの公式のインストール方法です。先ほど書いた通り、こちらは推奨ではありません(OpenCVなどがpipで入れられない)が、一応書いておきます。
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/apple/tensorflow_macos/master/scripts/download_and_install.sh)"
途中色々聞かれますが、基本 yes(y)かデフォルト設定(そのままEnter)でOKです。
以下でvenvにより仮想環境をアクティベートします。
$ source /Users/<username>/tensorflow_macos_venv/bin/activate
バージョンを確認しましょう。
$ python3
>>> import tensorflow as tf
>>> tf.__version__
'2.4.0-rc0'
TF-Agentsをインストールする方法
強化学習などで、TF-Agentsが必要な場合は、以下コマンド実行すればインストールできます。強化学習が不要ならここは飛ばしてもOKです。
$ conda install bazel
$ pip install tf_agents
PyTorchをインストールする
ついでにPyTorchをインストールする方法も紹介します。condaやpipだとインストールできませんが、優しい人が簡単にインストールできるPythonパッケージ(.whl
)ファイルを用意してくれています。以下リンク先の右上のダウンロードボタンでダウンロードしましょう。
PyTorchのApple Silicon Mac対応のPythonパッケージダウンロード
ダウンロードしたら、以下コマンドを実行するとPyTorchをインストールできます。
$ pip install ~/Downloads/torch-1.8.0a0-cp38-cp38-macosx_11_0_arm64.whl
以下は参考にした記事です。
AI(ディープラーニング)で遊ぶ
せっかくTensorFlowが入ったので、色々動かしてみます。
Object Detection APIによる物体検出
拙作の「object_detection_tools」を使用すると、簡単に物体検出できます。詳細は以下記事参照ください。
とにかく一刻も早く動かしたい!という人は、以下コマンドうてばOKです。
$ conda activate python38
$ git clone https://github.com/karaage0703/object_detection_tools
$ cd object_detection_tools/models
$ ./get_efficientdet_d0_coco17_tpu-32.sh
$ cd ..
$ python3 scripts/object_detection_tf2.py -l='./models/coco-labels-paper.txt' -m='./models/efficientdet_d0_coco17_tpu-32/saved_model/'
実行結果のイメージです。以下はiMac(Intel)でEfficientDetモデルを実行した画像ですが、ほぼ同じFPSで動きました。
Deep写輪眼
続いてDeep写輪眼という高橋かずひとさん作の物体検出の応用ソフトを動かしてみます。詳細は以下参照ください。
とにかく動かしたいせっかちな方は以下実行ください。
$ conda activate python38
$ git clone https://github.com/Kazuhito00/NARUTO-HandSignDetection
$ cd NARUTO-HandSignDetection
$ python Ninjutsu_demo.py --score_th=0.5
以下は実際にM1 MacBook Airで実行した様子です。
EfficientDetモデルで4FPS程度出ていますね。
姿勢推定
続いては、姿勢推定です。姿勢推定技術に関しては、拙作の書籍「とにかく楽しいAI自作教室」を参照いただけましたら幸いです。
必要なライブラリをインストールします。
$ conda activate python38
$ brew install swig
$ pip install tqdm
$ pip install slidingwindow
$ pip insall tf_slim
$ conda install scipy
$ pip install pycocotools
ソフトをダウンロードしてセットアップします。
$ git clone -b tf2 https://github.com/karaage0703/tf-pose-estimation
$ cd tf-pose-estimation/tf_pose/pafprocess
$ swig -python -c++ pafprocess.i && python3 setup.py build_ext --inplace
$ cd ../../
ソフトを動かします(tf-pose-estimationディレクトリ直下)で実行ください。
$ python3 run_webcam.py --model=mobilenet_v2_small --resize=320x176
以下はイメージ画像です。
上のはJetson Nanoで動かしているので4fps程度ですが、M1 MacBook Airだと15fps程度出ました。
リポジトリは、私が無理矢理TensorFlow2.xに対応するため魔改造したものを使っていますが、以下のリポジトリとかの方がちゃんとTensorFlow2.xに対応していて素直かもしれません。
まとめ
M1 MacBook AirとTensorFlow for macOSでディープラーニングして遊んでみました。かなり対応すすんでいて、画像込みのデモとかもある程度は動かせそうな感じですが、色々やろうとするとハマるかもしれません(pygame入れたかったのですが、現状pipでもcondaでも入れられませんでした)。
今は過渡期なので、そのうちpipで簡単にインストールできるようになると思いますが、もうしばらくかかりそうですね。
速度に関しては、2017年モデルのiMac(Intel Core i7)と同等でした。十分凄いんですけど、ちょっと期待が大き過ぎたので感動はなかったです(笑)ひょっとしたら私の使い方が悪いだけかもしれません。もし、もっと速くなる方法とかあればぜひ教えてください。
宣伝「からあげ先生のとにかく楽しいAI自作教室」
AIの初心者向け本「からあげ先生のとにかく楽しいAI自作教室」を執筆しました。Google Colaboratoryを使って、実際に動かしながらAIを学べる本になっています。
この記事では実践していない、ディープラーニングの学習も学べますので、書籍をもとに自分で学習したモデルをM1 Macで動かすみたいなこともできます。よろしければ是非。以下、本の紹介記事へのリンクです。
参考リンク
関連記事
Discussion
お世話になってます。
pip install tf_agents がうまくいかなくて、scipy のインストールに失敗しているようだったので、
brew install lapack して、scipy をインストールできるようになってから、
再度 pip install tf_agents で(インストール自体は)うまくいったようです。
情報ありがとうございます!バージョンの影響か何かで手順変わっているのかもしれませんね。
自分も試してみたいのですが、1からの環境構築は、なかなか気軽に試せないのが悩ましいところです…
airのメモリは8GBですか?16GBですか?
8GBです
ありがとうございます🙇