機械学習を始めようとM1 Macにtensorflowをインストール完了するまでにかなり色々苦労したので、他の方の参考になればと思い、インストールできるまでの過程を残しておきます。私は、macOS 12.2.1を使用しています。
tensorflowインストール(失敗編)
失敗① pip install
pyenvでpython3.8の仮想環境を用意し、下記を実行しました。
% pip install --upgrade --force --no-dependencies https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha3/tensorflow_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha3/tensorflow_addons_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl
ERROR: tensorflow_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl is not a supported wheel on this platform.
失敗② offline install
同じくpyenvのpython3.8の環境で、下記を実行してみました。
% curl -fLO https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha3/tensorflow_macos-0.1alpha3.tar.gz
% tar xvzf tensorflow_macos-0.1alpha3.tar.gz
% cd tensorflow_macos
% ./install_venv.sh --prompt
##############################################################
ERROR: TensorFlow with ML Compute acceleration is only available on macOS 11.0 and later.
macOSのバージョンチェックで12.2.1を使っているのにエラーが発生するので、OSチェックの箇所をコメントアウトしてみました。
% vi install_venv.sh
# Do a software version check.
<< COMMENTOUT
if [[ $(sw_vers -productName) != macOS ]] || [[ $(sw_vers -productVersion) != "11."* ]] ; then
error_exit "TensorFlow with ML Compute acceleration is only available on macOS 11.0 and later."
fi
COMMENTOUT
インストールできた!!でもimportしてみると下記エラーが、、コレもダメみたいです。
% python
>>> import tensorflow
ImportError: dlopen(/Users/****/Documents/test1/myenv/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so, 0x0006): tried: '/Users/****/Documents/style_transfer/myenv/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64')), '/usr/local/lib/_pywrap_tensorflow_internal.so' (no such file), '/usr/lib/_pywrap_tensorflow_internal.so' (no such file)
失敗③ x86_64版の強制インストール
incompatible cpu-subtype error #34を参考に確認してみると、pythonがx86_64版になっており、ここがarm64になっていないと正常にインストールできないようでした。
% file $(which python)
/Users/****/Documents/test1/myenv/bin/python: Mach-O 64-bit executable x86_64
ダメ元で、install_venv.shの中身を下記のように書き換えて、x86_64版のtensorflowをインストールしてみました。
#arch=$(uname -m)
arch=x86_64
インストールはできるものの動かなかったです、、やっぱりダメそう、、
% python
>>> import tensorflow
zsh: illegal hardware instruction python
tensorflowインストール(成功編)
できるだけ今の環境を崩さずに、、と横着していましたが、皆がうまく行っている方法でやるのが一番良さそうということで、下記のリンク先を参考にさせて頂き、再度インストールをしてみました。
pyenvのuninstall
pythonの複数バージョンの切り替えにpyenvを使いたかったのですが、tensorflow for macOSとは相性が悪いようなので、アンインストールしました。
% arch -x86_64 brew uninstall pyenv
Uninstalling /usr/local/Cellar/pyenv/2.2.5... (877 files, 2.9MB)
pyenv関係の設定のコメントアウト
他にも設定されているものがある方もいると思いますが、pyenv関係の設定は全てコメントアウトし、ターミナルを開き直します。
% vi ~/.zprofile
# eval "$(pyenv init --path)"
%
% vi ~/.zshrc
export PATH="/opt/homebrew/bin:$PATH"
# eval "$(pyenv init -)"
%
python環境の整備 (これは不要かも)
HomebrewのPythonはインストールしていなかったので、スキップしました。ただ、過去にPython 3.10.3を利用したく、無理やり色々と変更をしていたので、こちらを参考にデフォルトのPython 3.8を実行するように変更しました。これは特に不要と思います。
% python3 --version
Python 3.10.3
% which python3
/usr/local/bin/python3
% /usr/bin/python3 --version
Python 3.8.9
% echo $PATH
/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
/usr/local/binが/usr/binより優先されているので、3.10.3が使用される形になっていました。PATHを変更しても良いと思いますが、今回はシンボリックリンク/usr/local/bin/python3を変更しました。
% ls -ltr /usr/local/bin/python3
lrwxr-xr-x 1 root wheel 70 Mar 17 02:49 /usr/local/bin/python3 -> ../../../Library/Frameworks/Python.framework/Versions/3.10/bin/python3
%
% ln -nfs /usr/bin/python3 /usr/local/bin/python3
% ls -ltr /usr/local/bin/python3
lrwxr-xr-x 1 **** admin 16 Apr 2 01:49 /usr/local/bin/python3 -> /usr/bin/python3
%
% python3 --version
Python 3.8.9
%
% which python3
/usr/local/bin/python3
Homebrewの再インストール
x86_64版のhomebrewがインストールされているようだったので、arm64版を使えるよう、こちらを参考に再インストールしました。
%/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
%/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
MiniForgeのインストール
MiniForgeとは、Anacondaが現状M1 Macに対応していないため、M1 Macでよく使われるパッケージマネージャで、tensorflowをインストールする際にも使われているようです。
・M1 Macで機械学習用のPython環境構築によく使われるパッケージマネージャ.
https://www.ailab.ics.keio.ac.jp/b4_induction_training/docs/devops/miniforge.html
・Condaみたいな感じで,複数のConda環境(仮想環境)を作成できる.
wgetをインストール後、MiniForgeをインストールし、ターミナルを開き直しました。
% brew install wget
$ wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh
$ bash Miniforge3-MacOSX-arm64.sh
開き直した際、(base)****@****is-MacBook-Pro ~ %
という形でプロンプト表示が変更されていれば、conda環境が有効になっています。
conda環境(仮想環境)の作成
conda create
でpythonバージョンを指定して、仮想環境を作成します。
% conda create --name python38 python=3.8
% conda info -e
# conda environments:
#
base * /Users/****/miniforge3
python38 /Users/****/miniforge3/envs/python38
%
conda activate
で作成した仮想環境を有効にします。無効化したい場合は、conda deactivate
で無効化できます。
% conda activate python38
% conda info -e
# conda environments:
#
base /Users/****/miniforge3
python38 * /Users/****/miniforge3/envs/python38
% python --version
Python 3.8.13
tensorflowのインストール
参考リンクでは、tensorflow_macos-0.1alpha2.tar.gzをダウンロードしていますが、tensorflow_macos-0.1alpha3.tar.gzがリリースされていたので、こちらをダウンロードしています。それに伴い、変更した箇所は緑色にしています。env
は上記のconda info -e
の出力を参考にパスを指定しました。
$ wget https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha3/tensorflow_macos-0.1alpha3.tar.gz
$ tar xvzf tensorflow_macos-0.1alpha3.tar.gz
$ env="$HOME/miniforge3/envs/python38"
$ libs="$PWD/tensorflow_macos/arm64/"
$ pip install --upgrade -t "$env/lib/python3.8/site-packages/" --no-dependencies --force "$libs/grpcio-1.33.2-cp38-cp38-macosx_11_0_arm64.whl"
$ pip install --upgrade -t "$env/lib/python3.8/site-packages/" --no-dependencies --force "$libs/h5py-2.10.0-cp38-cp38-macosx_11_0_arm64.whl"
$ pip install --upgrade -t "$env/lib/python3.8/site-packages/" --no-dependencies --force "$libs/tensorflow_addons_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl"
$ conda install -c conda-forge -y absl-py
$ conda install -c conda-forge -y astunparse
$ conda install -c conda-forge -y gast
$ conda install -c conda-forge -y opt_einsum
$ conda install -c conda-forge -y termcolor
$ conda install -c conda-forge -y typing_extensions
$ conda install -c conda-forge -y wheel
$ conda install -c conda-forge -y typeguard
$ pip install wrapt flatbuffers tensorflow_estimator google_pasta keras_preprocessing protobuf
$ pip install tensorboard
$ pip install --upgrade -t "$env/lib/python3.8/site-packages/" --no-dependencies --force "$libs/tensorflow_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl"
無事にインストールできました!!
% python
>>> import tensorflow as tf
>>> tf.__version__
'2.4.0-rc0'
【余談】vscodeでcondaの仮想環境を使う
vscodeでconda環境を利用するまでに少し手こずったので、それは下記に記載しています。もし同じく困っている方がいましたら、是非ご覧ください。
最後に
やっぱり横着するとよくないですね。。皆がやっている方法を素直に実行するのが、一番の近道だと改めてわかりました。。これから機械学習ガンガンやっていきたいと思います!
コメント