TL;DR
- TensorFlowで機械学習をしたい
- Apple SiliconだとNVIDIAのGPUが使えない(当たり前)なので遅い
- tensorflow-metalを入れよう
あとでがっかりする前に
- tensorflow-metalは3.11系以上では動きませんでした
- tensorflow-metalはマルチGPUをサポートしていません
これらを期待している方・必須な方は涙をふきながらブラウザバックをお願いします。
大まかな手順と前提
- pyenvでPython 3.10系を入れる
- venvを立てる
- tensorflow-metalを全部突っ込んでいき
Pythonとpyenvは入っている前提で、この記事を読んでいるということでOSはmacOSを前提にしてます。
pyenvでPython 3.10系を入れる
tensorflow-metalは3.8系から3.10系にしか対応していない(目立つところに書いてなくてハマった)ので、pyenvでインストールしていきます。3.8系から3.10系の人はこの手順はスキップして良いです。私は何も考えずにとりあえずこの中で最新の3.10.14を入れました
pyenv install --list
pyenv install 3.10.14
バージョン一覧を確認してインストールされていたら成功です。
% pyenv versions
system
3.10.14
* 3.12.3 (set by /Users/shirokuma89dev/.pyenv/version)
仮想環境を作る
対応させるために3.10系にバージョンを下げましたが、それを今後使い続けるのもダサいので仮想環境を作ります。
任意の機械学習の作業ディレクトリに移動して
pyenv local 3.10.14
します。
venvを立てようの会
~/venv-metalにvenvをつくります。ここの先は任意の場所で構いません。私は別プロジェクトもtensorflow-metalを利用する可能性を考えてホームディレクトリに作りました
python -m venv ~/venv-metal
source ~/venv-metal/bin/activate
tensorflow-metalをインストールしていき
python -m pip install tensorflow
python -m pip install tensorflow-metal
検証
以下を実行してみてGPU is available ✅とでたらGPUが利用可能な状態になっています。
gpy_check.py
print("GPU Check")
import tensorflow as tf
import platform
print(f"Python Platform: {platform.platform()}")
print(f"Tensor Flow Version: {tf.__version__}")
is_gpu_available = len(tf.config.list_physical_devices('GPU')) > 0
print("GPU is", "available ✅" if is_gpu_available else "not available ❌")
% python gpu_check.py
GPU Check
Python Platform: macOS-14.2.1-arm64-arm-64bit
Tensor Flow Version: 2.16.2
GPU is available ✅
参考文献