Skip to content

Apple M1 での TensorFlow インストール

問題の概要

Apple M1 チップ搭載のMacにTensorFlowをインストールしようとすると、以下のような問題に直面することがあります:

  • 多くのオンラインガイドがMiniforgeの使用を推奨しているが、Condaも公式にM1をサポートしている
  • pip install tensorflow を実行すると「No matching distribution found for tensorflow」エラーが発生する
  • tensorflow-macostensorflow-depstensorflow-metal パッケージの役割と必要性が不明確

公式推奨インストール方法

Apple公式のTensorFlowプラグインガイドに基づく最新のインストール方法です。

TensorFlow 2.13以降の場合

yaml
name: tf-metal
channels:
  - conda-forge
  - nodefaults
dependencies:
  - python=3.11
  - pip
  - pip:
    - tensorflow
    - tensorflow-metal
bash
# ネイティブ環境の場合
conda env create -n my_tf_env -f tf-metal-arm64.yaml

# エミュレーション環境の場合
CONDA_SUBDIR=osx-arm64 conda env create -n my_tf_env -f tf-metal-arm64.yaml
conda activate my_tf_env
conda config --env --set subdir osx-arm64

TensorFlow 2.12以前の場合

yaml
name: tf-metal
channels:
  - apple
  - conda-forge
dependencies:
  - python=3.9
  - pip
  - tensorflow-deps
  - pip:
    - tensorflow-macos
    - tensorflow-metal
bash
conda env create -n tf_env -f tf-metal-arm64.yaml
conda activate tf_env

各パッケージの役割

  • tensorflow-macos: Appleが提供するM1対応TensorFlowパッケージ
  • tensorflow-deps: TensorFlowの依存関係(numpy, grpcio, h5pyなど)
  • tensorflow-metal: M1 GPUアクセラレーションを有効にするMetalプラグイン

INFO

TensorFlow 2.13以降では、公式TensorFlowパッケージがM1をネイティブサポートするようになったため、tensorflow-macosではなくtensorflowを使用します。

Condaを使用しない方法

MiniforgeやCondaを使用せずにpipのみでインストールすることも可能です。

bash
# Python 3.10のインストール
brew install python@3.10

# 仮想環境の作成とアクティベート
python3.10 -m venv ~/py310-tf-metal
source ~/py310-tf-metal/bin/activate

# パッケージインストール
pip install tensorflow-macos
pip install tensorflow-metal
bash
# Python環境の設定
pyenv install 3.10.9
pyenv local 3.10.9

# Poetryでのインストール
poetry add tensorflow-macos==2.9.2
poetry add tensorflow-metal==0.5.0

動作確認

インストール後、以下のスクリプトでGPUアクセラレーションが機能しているか確認できます。

python
import tensorflow as tf

# GPUデバイスの確認
print(f"利用可能なGPUデバイス: {tf.config.list_physical_devices('GPU')}")

# 簡単な計算で動作確認
tf.debugging.set_log_device_placement(True)
a = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
b = tf.constant([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
c = tf.matmul(a, b)
print(f"計算結果: {c}")

よくある問題と解決策

バージョン互換性の問題

WARNING

TensorFlowとtensorflow-metalのバージョンには互換性があります。必ず互換性のあるバージョンの組み合わせを使用してください。

推奨されるバージョンの組み合わせ:

TensorFlowtensorflow-metalPython
2.13+1.0+3.11+
2.120.8.03.8-3.10
2.110.7.03.8-3.10
2.100.6.03.8-3.10
2.90.5.03.8-3.10

NUMA関連の警告

GPU初期化時に以下の警告が表示されることがありますが、通常は無視して問題ありません。

Could not identify NUMA node of platform GPU ID 0, defaulting to 0.

プラグイン重複登録エラー

DANGER

以下のエラーが発生した場合:

platform is already registered with name: "METAL"

解決策:

bash
pip uninstall tensorflow-macos tensorflow-metal
pip install --user tensorflow-macos tensorflow-metal

パフォーマンス最適化

Metalプラグインをインストールすると、M1のGPUを活用した高速な機械学習トレーニングが可能になります。Activity MonitorでGPU使用率を確認することで、正しく機能しているかを確認できます。

bash
# GPU使用率のモニタリング
TF_MLC_LOGGING=1 python your_script.py

まとめ

Apple M1でのTensorFlowインストールは、以下のポイントに注意すれば簡単です:

  1. 使用するTensorFlowのバージョンに応じて適切なインストール方法を選択
  2. tensorflowとtensorflow-metalのバージョンの互換性を確認
  3. Conda環境を使用すると依存関係の管理が容易
  4. インストール後は必ず動作確認を実施

最新情報はAppleの公式TensorFlowプラグインページで確認することをお勧めします。