院生時代に使ったっきりの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。
おもむろに仮想環境を作成
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の発熱も少なく、ファンの音も変わらず、なかなか。
もっと難しいモデルを食わせたときにどうなるかは今後試したい。
M1 MacでTensorflowが動いて満足している pic.twitter.com/JJkg45Hbxc
— 結納エンジニア (@twismiko) December 4, 2021
トラブルシュート: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