(2023/2/11追記)以前の手順では動かなくなっていることに気づき、Tensorflow-macos環境構築のコマンドを一新しました。
自前のPCで機械学習しようとするとPC環境はNVIDIA GPU搭載の一択状態で、OSはWindowsかLinuxになると思います。
ただ、Apple社も機械学習には力を入れてきており、M1チップではGPUとニューラルエンジンを一体化してサードパーティ製GPUを排除し、ソフト面でもM1チップに最適化されたTensorflow-macosを打ち出してきました。
これにより、機械学習分野におけるNVIDIA GPUの牙城を崩せるのか?が気になるところですよね。
本記事では、Miniconda環境をベースに、M1チップ用に最適化されたTensorflow-macos環境を構築する方法を紹介します。
また、初代M1搭載の13-inch MacBook ProとM1 Pro搭載の14-inch MacBook Proを使用し、MNISTの機械学習を実行して、NVIDIA GPU搭載マシンと実行時間を比較しました。
M1用に最適化したTensorflow-macosで、Macでの機械学習の道が開かれるかと期待していたのですが、NVIDIA GPUの性能には及ばす、やはり機械学習分野がNVIDIA GPUの独壇場であることについては、いまだ覆らないと思いました。
本記事の内容は以下の動画にも収めていますので参考にしてください。
使用環境
項目 | 内容 |
---|---|
PC | MacBook Pro 13-inch 2020 |
OS | macOS Monterey 12.6.1 |
CPU | M1 8-Core CPU(4 performance, 4 efficiency) |
GPU | M1 8-Core GPU |
環境構築
Minicondaインストール
wget(Webからファイルをダウンロード)をインストールしていない場合は以下のコマンドでインストールします。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" brew install wget
xcode-selectをインストールします。
xcode-select --install
Minicondaのサイトから、ファイル名にarm64の付いたM1 Mac用のインストーラをダウンロードします。
bash ~/Downloads/Miniconda3-latest-MacOSX-arm64.sh
インストール先の確認はそのままEnterとすると~/miniconda3
にインストールされます。
それ以外で入力待ちになった場合はyesを選ぶことで良いです。
~/.zshrcに自動的にMiniconda用の設定が追記されるので、sourceして有効にします。
source ~/.zshrc
Python 3.9を指定したtfという仮想環境を作成し、アクティベートします。
conda create -n tf python=3.9 conda activate tf
Tensorflow_macos環境構築
インストール用シェルスクリプトとMNIST実行ファイルをダウンロードします。
git clone https://github.com/tak6uch1/cuda-tensorflow.git cd cuda-tensorflow/work
Tensorflow-macosとよく使うパッケージをインストールします。
conda install -c apple tensorflow-deps pip install tensorflow-macos pip install tensorflow-metal conda install notebook pip install numpy --upgrade pip install pandas --upgrade pip install matplotlib --upgrade pip install scikit-learn --upgrade pip install scipy --upgrade pip install plotly --upgrade
Tensorflowバージョンを確認します。
python tf_version.py
以下のように表示されます。
Python Platform: macOS-12.6.1-arm64-arm-64bit Tensor Flow Version: 2.11.0 Keras Version: 2.11.0 Python 3.9.16 (main, Jan 11 2023, 10:02:19) [Clang 14.0.6 ] Pandas 1.5.3 Scikit-Learn 1.2.1 SciPy 1.10.0 GPU is available
最後がGPU is availableとなっていれば、GPUが使える状態になっています。
動作確認
MNISTの実行確認をします。
cd work time python mnist_cnn_M1.py
以下のように表示されます。(末尾のみ)
: Epoch 12/12 469/469 [==============================] - 9s 20ms/step - loss: 0.9024 - accuracy: 0.7420 - val_loss: 0.6935 - val_accuracy: 0.8471 python mnist_cnn_M1.py 51.63s user 23.70s system 64% cpu 1:57.09 total
アクティビティモニターでGPUの使用が確認できました。
まとめ
M1 Mac用に最適化されたTensorflow-macos環境を立ち上げ、MNISTサンプルを実行することに成功しました。
アクティビティモニターでGPUの使用率は確認できましたが、ニューラルエンジンの使用率を確認する方法はわかりませんでした。
ニューラルエンジンがTensorflow-macosにおいて使われているのかどうかは不明です。
今はまだ使われていないということであれば、今後の躍進に期待が持てます。
ニューラルエンジンの使用率が確認できるアクティビティモニターがほしいですね。
こちらの記事に他のマシンとの実行時間の比較を載せており、NVIDIA GeForce RTX3060の実行時間と比べてM1 MacBook 13-inch 2020は4倍程度遅く、M1 Pro MacBook Pro 14-inch 2021は2倍以上遅いという結果でした。
RTX3090は、この中で圧倒的に高速でした。
M1用に最適化したTensorflowを開発して、ソフト面の環境を整えたことは評価に値します。
M1 MacはIntel CPU時代のMacより、はるかに高速に機械学習できるようになりました。
しかし、32コアGPU搭載のM1 Maxで試したとしても、上記16コアGPUの結果の半分の実行時間にはならないと予想され、RTX3060には及ばない結果になると推測します。
MNISTの学習パラメータは短時間で終わるものとなっているため、演算量の多い学習をさせると結果が変わることが予想されます。
M1はチップ内にCPUとGPUがあり、CPU-GPU間のデータのやり取りは高速と考えられるため、学習自体の演算量が少なく、データ転送が頻繁に発生する今回の評価は、M1に有利に働いているはずです。
重い学習をさせる場合、学習の演算量が多くなればなるほど、データ転送の比率は下がり、学習自体の処理能力が効いてきて、よりNVIDIA GPUに有利になると考えられ、M1との差が広がることが予想されます。
処理性能に対する消費電力については比較できていないのですが、少なくとも処理性能のみで考えると、やはり機械学習分野がNVIDIA GPUの独壇場であることについて、いまだ覆らないと思いました。
書籍紹介
実践して楽しむことを重視していて、充実のサンプルコードで画像認識やテキスト分析、GAN生成といったAI応用をGoogle Colab環境下で体験できます。
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
この本は、機械学習の仕組みを学ぶのにとても良い本だと思います。
Tensorflow/Kerasなどの既存プラットフォームを使うのではなく、基本的な仕組みを丁寧に説明し、かんたんなPythonコードで実装していく手順を紹介してくれます。
機械学習のコードがどのような処理をしているのか、想像できるようになります。
参考文献
- GitHub apple/tensorflow_macos(https://github.com/apple/tensorflow_macos)
- Apple Silicon(M1) Mac+tensorflow-macosでディープラーニングする(https://zenn.dev/karaage0703/articles/0ab9e654cfb0ec)