M1 macを使っていてプロジェクトごとにpython仮想環境を作ってtensorflowをインストールしていますが、いつもググるのは時間がもったいないので、備忘録的に環境作成の方法を記しておきます。
M1 macでtensorflowのインストールが面倒くさい理由
2020年からAppleは、従来のintelのチップから自社開発のM1チップを製品に載せるようになりました。これに伴って命令セットがintelの命令セットであるx86_64からArmに変更されました。
これのせいでtensorflow等のインストールが面倒くさくなったわけです。
dockerを使って環境構築しようともしましたが、コンテナが立ち上がらなくてうまくいかないので、現状pythonの仮想環境を構築する方法としてはminiforgeを使う一択しかありません。
ちなみにAppleは現在RISC-Ⅴのプログラマーを大勢雇っているらしいので、近い将来また命令セットが変更されるかもしれません。(マジで面倒臭いので個人的にはintelもRISCに統一してほしいですが、intelはRISCプロジェクトから撤退したらしいので叶わぬ願いです...)
今回の僕の環境は以下の通りです。
Macbook pro (14インチ, 2021)
チップ: Apple M1 pro
メモリ: 16GB
Mac OS: Ventura 13.2.1
CLT(command line tools)のインストール
mac標準のコマンド以外を使えるようにCLTをインストールします。
$ xcode-select --version
xcode-select version 2395.
上のコマンドを打ってバージョンが確認できれば既にインストールされているので、大丈夫です。
確認できない場合は次のコマンドを打ってインストールしてください。
xcode-select --install
miniforgeのインストール
現状miniforge以外ではtensorflowがサポートされていないので、miniforgeをインストールします。https://github.com/conda-forge/miniforge miniforgeのリポジトリからmac OS X arm64をダウンロードしてください。
$ cd ~/Downloads
$ bash Miniforge3-MacOSX-arm64.sh
# 基本的に全てyesで大丈夫です。
$ source ~/miniforge3/bin/activate #インストール先のpathを指定してください
これで、condaコマンドが使えるようになりました。
python仮想環境の構築
condaコマンドでpythonの仮想環境を構築します。今回はpython 3.9.16を使用します。
$ conda create -n tf python=3.9
$ conda activate tf
pipのアップグレード
既に最新版がインストールされていると思いますが、一応pipをアップグレードしておきます。
$ python -m pip install --upgrade pip
tensorflowのインストール
M1 macで必要なtensorflowのライブラリは次の3つです。
- tensorflow-deps
- tensorflow-macos
- tensorflow-metal
tensorflow-depsはtensorflowのビルドに必要なパッケージで、tensorflow-macosはAppleがtensorflowをフォークして、M1に最適化したコードです。tensorflow-metalはプラグインで、M1のGPU等に最適化するためのものです。
上二つはtensorflowのバージョンに合わせる必要があります。
インストールできるバージョンの確認
次のコマンドでインストールできるバージョンを確認します。
# depsはcondaでインストールする
$ conda search -c apple tensorflow-deps
# macosとmetalはpipでインストールする
# 下のようにエラーが出るが、バージョンは確認できる
$ pip install tensorflow-macos==
$ pip install tensorflow-metal==
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, 2.10.0, 2.11.0)
ERROR: No matching distribution found for tensorflow-macos==
今回は2.10.0をインストールする。
tensorflowのインストール
次のコマンドでインストールする。depsとmacosのバージョンは合わせる。
$ conda install -c apple tensorflow-deps==2.10.0
$ python -m pip install tensorflow-macos==2.10.0
$ python -m pip install tensorflow-metal==0.6.0
終わったらpythonのプロンプトを開いて、tensorflowがインストールできるか確認してください。
$ python
>>> import tensorflow as tf
>>>tf.__version__
# うまくインストールできていればバージョンが表示される。
ここで、metalのバージョンですが、何も指定せず0.7.1をインストールすると、なぜかimport errorを吐くので0.6.0に指定しています。
終わりに
M1 macでのtensorflowのインストールの仕方を紹介しましたが、感想としてはマジでだるいの一言です。dockerでもtensorflowが使えないし、react native(javascript)でのアプリ開発環境の作成もめんどくさいし、何も考えずに最新版(当時)のmacbookを買った自分を恨みたいです。