🐍

Mac(M1)にTensorflowを入れたいだけなのに

2024/02/08に公開

まえがき

愛用しているM1MacにTensorflow環境を作っていきます。
大変でした。

PC環境

  • MacBook Air (2020)
  • Apple M1
  • メモリ: 16GB
  • macOS: Sonoma 14.3

使用したもの(アプリ)

シェアの鬼である Microsoft 謹製 VSCode と、最近はやりの Rust 製ターミナル Warp を利用しています。

Warp は使いやすすぎて困っているので、今度記事にします。

やりたいこと

ただ、この Python スクリプトを正常に実行したいだけなのに。。。

# test.py
# 動作確認用
# 他の方の Zenn 記事にあったやつを一部改変

import sys

import tensorflow.keras
import pandas as pd
import sklearn as sk
import scipy as sp
import tensorflow as tf
import platform
import keras

print(f"Python Platform: {platform.platform()}")
print(f"Tensor Flow Version: {tf.__version__}")
print(f"Keras Version: {keras.__version__}")
print()
print(f"Python {sys.version}")
print(f"Pandas {pd.__version__}")
print(f"Scikit-Learn {sk.__version__}")
print(f"SciPy {sp.__version__}")
gpu = len(tf.config.list_physical_devices('GPU'))>0
print("GPU is", "available" if gpu else "NOT AVAILABLE")

改変元:
Mac M1/M2にGPUサポート付きのTensorFlowをインストール

解決策だけだと味気ないので、自分用に一連の流れをまとめておきます。

Tensorflow 導入まで

xcode-select のインストール

よく見るやつ。前にインストールした記憶があっても一回は試しておいて損はしない。

xcode-select --install

conda 仮想環境の構築

Miniforge インストール

自分は Anaconda の代わりに Miniforge を利用しています。

Github レポ再掲↓
https://github.com/conda-forge/miniforge

正直、シェル上で conda をして「PATH が通っていない!」みたいなことがない限り大丈夫だと思います。

仮想環境の作成

今回は仮想環境名を "tf1" としてみます。

conda create -n tf1

自分の環境ではデフォが python=3.10 になってました。

今回は問題がありませんでしたが、一応 Python のバージョンを指定したいとき。

conda create -n py36 python=3.6

つづいて、環境を切り替えます。

conda activate tf1

もろもろインストール

仮想環境なのであまり後先考えずに conda install しました。

ここからはおまじないです。

  • Tensorflow の依存関係
conda install -c apple tensorflow-deps
  • 基本の Tensorflow
conda install tensorflow-macos

(pip3 でもよい。)

  • Metal をインストール
conda install tensorflow-metal

自分の環境で引っかかった点(お好みで)

  • chardet が見つからないと言われました。そうかそうか・・・・・・。
conda install chardet
  • scikit-learn が見つからないと言われました。それはまずいのでは・・・・・・。
conda install scikit-learn

毎回思うんですが、パッケージ名 scikit-learn だと知るまで時間かかりませんか。

  • keras のバージョン確認方法
    なんか tensorflow.keras.__version__ができませんでした。そうなのか。
+ import keras

- print(f"Keras Version: {tensorflow.keras.__version__}")
+ print(f"Keras Version: {keras.__version__}")

動作確認

その結果が以下のコードになります。

import sys

import tensorflow.keras
import pandas as pd
import sklearn as sk
import scipy as sp
import tensorflow as tf
import platform
import keras    # 追加

print(f"Python Platform: {platform.platform()}")
print(f"Tensor Flow Version: {tf.__version__}")
print(f"Keras Version: {keras.__version__}")    # 改変
print()
print(f"Python {sys.version}")
print(f"Pandas {pd.__version__}")
print(f"Scikit-Learn {sk.__version__}")
print(f"SciPy {sp.__version__}")
gpu = len(tf.config.list_physical_devices('GPU'))>0
print("GPU is", "available" if gpu else "NOT AVAILABLE")

おわり

Tensorflow の環境を作るたびに毎回調べて先人の記事にお世話になっているので、自分でも書き残しておこうと思います。

1ヶ月後くらいには変わっているかも知れませんがそのときはそのときで。

参考

Discussion