Coyote vs Loadbalancer

The Blog for the Rest of Us

M1 MacでTensorflowを使う

院生時代に使ったっきりのTensorflowがM1に対応したのを今更見つけて、久しぶりに触ろうと思ったらちょっとハマったので備忘録的に書く。

Python環境構築(雑メモ)

当初はPyenvでAnaconda or minicondaを入れればよいかと思ったが、pyenvではApple Silicon版のAnacondaは未対応なためインストールできず。今のナウいARMに生きている若者の間ではMiniforge(Mambaforge)が使われているとのことで、そちらを利用することにした。
今回はpyenvでmambaforgeをインストールし、globalにmambaforgeを設定した。別にpyenvを入れずに、ダイレクトにMiniforgeのリポジトリにあるインストーラーでインストールしても良かった気はする。

pyenv install mambaforge
pyenv global mambaforge
pyenv versions
  system
  3.9.1
* mambaforge (set by /Users/user/.pyenv/version)

これはいらないかもしれないが、インストール時に.zshrcの掃除もしていたので、Miniforgeでcondaコマンドを使うには(というよりも、普通にcondaを使うには)以下も追加する必要があった。 conda init でいい感じに挿入されるのだが、condaのバイナリのパスなどがベタ書きされており、ちょっと気持ち悪かったので環境変数に押し出した。

export PYENV_ROOT="$HOME/.pyenv"
export MAMBA_HOME="$PYENV_ROOT/versions/mambaforge"

# conda(mamba/miniforge)
__conda_setup="$("$MAMBA_HOME/bin/conda" 'shell.zsh' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "$MAMBA_HOME/etc/profile.d/conda.sh" ]; then
        . "$MAMBA_HOME/etc/profile.d/conda.sh"
    else
        export PATH="$MAMBA_HOME/bin:$PATH"
    fi
fi
unset __conda_setup

とりあえずこの辺で普通にPythonが使えるようになるはず。

Tensorflowのインストール

基本的にはApple公式のARM64版手順のうち、Miniforgeをインストールし終えたあとからに従えばOK。

developer.apple.com

おもむろに仮想環境を作成

mamba create -n tensorflow_m1 python=3.9
conda activate tensorflow_m1

依存関係のインストール。

conda install -c apple tensorflow-deps
python -m pip install tensorflow-macos
python -m pip install tensorflow-metal

おわり。

試す

学部4年で研究室配属されたときに指導教官の顔よりも見たMNISTでサクッと試す。
感触として、結構早い気がする。あと学習中もMac miniの発熱も少なく、ファンの音も変わらず、なかなか。
もっと難しいモデルを食わせたときにどうなるかは今後試したい。

www.tensorflow.org

トラブルシュート:h5py

python -m pip install tensorflow-macos 時に依存関係でインストールされる h5py が、brew install hdf5でインストールしていても hdf5のライブラリが見つからずにこけてしまう。

  error: Unable to load dependency HDF5, make sure HDF5 is installed properly
  error: dlopen(libhdf5.dylib, 0x0006): tried: '/Users/user/.pyenv/versions/mambaforge/lib/libhdf5.dylib' (no such file), '/Users/user/.pyenv/versions/mambaforge/lib/libhdf5.dylib' (no such file), '/Users/user/.pyenv/versions/mambaforge/lib/python3.9/li
b-dynload/../../libhdf5.dylib' (no such file), '/Users/user/.pyenv/versions/mambaforge/lib/libhdf5.dylib' (no such file), '/Users/user/.pyenv/versions/mambaforge/bin/../lib/libhdf5.dylib' (no such file), 'libhdf5.dylib' (no such file), '/usr/local/lib/libhdf5.dyli
b' (no such file), '/usr/lib/libhdf5.dylib' (no such file), '/private/var/folders/1t/8rwk7l5x4ssf753522k2d5v40000gn/T/pip-install-jq0sx82l/h5py
_d3e3046cd7134f25a2ade50e9f4a162e/libhdf5.dylib' (no such file), '/usr/local/lib/libhdf5.dylib' (no such file), '/usr/lib/libhdf5.dylib' (no su
ch file)
  ----------------------------------------
  ERROR: Failed building wheel for h5py
Failed to build h5py
ERROR: Could not build wheels for h5py, which is required to install pyproject.toml-based projects

理由は、ARM64版とx86/64版ではbrewでインストールした際のインストール先ディレクトリが違うらしく、h5pyがそれを終えていない模様。
ワークアラウンドとして、x86/64でbrewをインストールしてHDF5をインストールする方法があるらしいが、あまりバイナリを混在させたくなかったので、h5pyインストール時にarm64のbrewでインストールしたHDF5のディレクトリを環境変数(HDF5_DIR)で指定の上、pipでバイナリパッケージを使用しないことを明示(--no-binary=h5py)してインストールして対応した。

export HDF5_DIR=/opt/homebrew/Cellar/hdf5/1.12.1/
pip install --no-binary=h5py h5py

参考:
- python - How to install h5py (needed for Keras) on MacOS with M1? - Stack Overflow
- M1 Macでのlibtorch、HDF5、Boostその他のintel版をインストール - Qiita