M1 MacでのPython環境構築(tensorflowとか)
Apple Siliconが搭載されたMacが手元に何台かあって、その上で色々と研究をしていたのですが、pythonの環境構築に結構手こずってしまいました。何度か試してうまく行ったものを備忘録として記しておきます。 (ここではpyenvを用いた環境構築について記しています。もちろん他にも良い方法はあると思います。) インストールに手こずることがあれば随時この記事に書き足していきたいと思います。
特にtensorflowのインストールが難しかったのですが、以下の記事が参考になりました。ありがとうございます。
pyenv¶
はじめにpyenvをインストールします。これはpyenvのGitHubページに従えばうまく動きます。
Apple Siliconではarmアーキテクチャが採用されているのでminiforgeを使わないといけない、という説明がネット上に無数にあるのでそれに従います。今ではminiforge以外も対応しているのかもしれないですが、よくわからないです。 この記事を書いている現時点(2022/07/11)ではminiforge3-4.10.3-10が最新のように見えるのでこれをインストールしてglobalの環境に設定しておきます。
TensorFlow¶
tensorflowのインストールが一番大変で、いろんな記事を眺めてはインストールを試みましたが成功には至りませんでした。上のリンクに従うとすんなりとインストールが完了しました。
インストールに必要なのはtensorflow-deps, tensorflow-macos, tensorflow-metalの3つ(多い!!)らしいです。そのうちtensorflow-deps, tensorflow-macosをインストールするときのバージョンがtensorflowのバージョンに対応するらしいです。そのためにまずtensorflow-depsがインストール可能なバージョンを確認します。tensorflow-depsはcondaによるインストールを利用するらしいのでconda searchを行います。
-> % conda search -c apple tensorflow-deps
Loading channels: done
# Name Version Build Channel
tensorflow-deps 2.5.0 0 apple
tensorflow-deps 2.5.0 1 apple
tensorflow-deps 2.6.0 0 apple
tensorflow-deps 2.7.0 0 apple
tensorflow-deps 2.8.0 0 apple
tensorflow-deps 2.9.0 0 apple
-> % pip install tensorflow-macos==
ERROR: Could not find a version that satisfies the requirement tensorflow-macos== (from versions: 2.5.0, 2.6.0, 2.7.0, 2.8.0, 2.9.0, 2.9.1, 2.9.2)
ERROR: No matching distribution found for tensorflow-macos==
最後にtensorflow-metalのバージョンですが、これはappleの公式ページを見ればわかります。テーブルをこちらに転記すると以下のようになります。
tensorflow-macos Version | tensorflow-metal Version |
---|---|
v2.5 | 0.1.2 |
v2.6 | 0.2.0 |
v2.7 | 0.3.0 |
v2.8 | 0.4.0 |
v2.9 | 0.5.0 |
v2.10 | 0.6.0 |
v2.11 | 0.7.0 |
最終的なtensorflowのインストールコマンドは
conda install -c apple tensorflow-deps==2.9.0
python -m pip install tensorflow-macos==2.9.0
python -m pip install tensorflow-metal==0.5.0
TensorFlow Probability¶
tensorflow probabilityはtensorflowで確率的な推論を用いる際に非常に重宝するライブラリです。こちらはtensorflowのバージョンに非常に強く依存します。この依存関係はtensorflow probabilityのリリースノートを読めばわかります。自分の環境にあったバージョンを選択してインストールしましょう。私はtensorflowのバージョンに合わせて0.17.0のバージョンをインストールしました。
GPflow¶
gpflowはtensorflowベースのガウス過程回帰ライブラリです。基本的な回帰に合わせてデータ数が多いときに有用な変分推論に基づく回帰(Sparse Variational Inferenceとか言われるもの)に非常に強いものとして知られています。この具体例はドキュメントが詳しいです。
愚直にgpflowをインストールするとsetup.pyにあるtensorflowライブラリが必要と言われてインストールがうまくいきません。これはpipでtensorflowをインストールしたときのライブラリ名がtensorflow-macosであることに起因します。このままではうまく行かないので一旦setup.pyに書かれている依存ライブラリは無視してgpflowをインストールします(若干無茶なことをしていますが、動けば良いのスタンスでやっていきます)。これは--no-dependenciesオプションで実現できます。
python -m pip install tabulate
python -m pip install deprecated
python -m pip install multipledispatch
python -m pip install lark
gpflowのissueを眺めているとgpflow側もこの問題に気づいているようでこれから修正が入っていくことになるのだと思います。こちらのissueが参考になります(本当はこういう問題に気づいた時点でissueを投げていく姿勢が必要なのだろうな〜とは思いますが忙しくてやれない。。。)。
現在、gpflowのsetup.pyは更新されていてtensorflow-macosに対してもpip installが有効になっています。素直にpip install gpflowを実行してください。
JAX¶
jaxが自動微分とjitコンパイルがついたnumpy、なんて呼ばれ方がよくされています。これは本当にそのとおりで個人的に結構好きなライブラリです。jaxは最近Apple Siliconでのインストールに対応しています(こちらのissueが参考になります)。この前まではjaxをimportするとこれはexperimentalだ、みたいな警告文が出てきていたのですが最近はその警告文も消えてます。随分と進歩を感じます。 インストールは基本的にGitHubページに従えば良いです。