2020年11月より、M1 CPU (Apple Silicon)が搭載された、 Macbook Air/Macbook Pro/Mac Mini がリリースされました。しかしながら、従来のMacのように Macports から引っ張ってきても、Aarch64 ネイティブアプリが少ないことに嘆いている人も多いと思われます。
今回は、Python3.8 上で、(Macports ではちゃんと動かない)SciPy (こちらは2021年2月から公式にビルドできるようになった!)と scikit-learn をビルドして、まあなんとか動いているので、そのTIPSを。
MacPorts について&その設定方法。
@tenomoto さん記事MacPortsの紹介を見てください。M1 CPU でもやり方は変わりません。ファイルの置き場所は素直に
/opt/local
に置きましょう。
ローカルリポジトリ設定
はてなブログ記事MacPorts で自家製 ports を使う方法を参考に、レポジトリ設定ファイルに、ローカルリポジトリの URL を設定します(ここでは自分のホームディレクトリにディレクトリ "ports" を作成してます。)。
% mkdir ~/ports
% cat /opt/local/etc/macports/sources.conf
....
....
file:///Users/XXX/ports ### <=== 新しく追加 ###
rsync://rsync.macports.org/macports/release/tarballs/ports.tar [default]
ローカルリポジトリに設定ファイル追加
適当なフォルダで以下コマンドを実行します。
% git clone https://github.com/gdaisukesuzuki/Macports_tensorflow_macos
すると、ports というフォルダが作成され以下にフォルダやファイルがぶら下がってます。
今回は以下コマンドを実行すればよいでしょう。
(ディレクトリ移動しない)
% mkdir ~/ports/python
% (scipy は macport レポジトリのが動くようになったのでコピー不要)
% cp -pr ports/python/py-scikit-learn ~/ports/python/
% cd ~/ports
% portindex
最後のportindexを実行することで、コマンド port 実行時に、ローカルリポジトリを参照するようになります。また、py-scipy や py-scikit-learn は、本家 macports リポジトリに登録されていますが、この操作でローカルに置かれた方を優先します
必要なもののインストール
port コマンドの使い方はわかっているものとして進めます。
gcc-devel/libgcc-devel
インストール前に、ld64, cctools については事前に以下のように設定して入れてます。
ld64 @3_3+ld64_xcode
ld64-xcode @2_3
cctools @927.0.2_6+xcode
あとはport install でそのまま導入してください。
libgcc-devel @11-20210101_0
gcc-devel @11-20210101_0
Python3.8
そのまま導入でOK
python38 @3.8.7_0
py38-numpy
インストール前に、OpenBLAS については事前に以下のように設定して入れてます。
OpenBLAS @0.3.13_0+gccdevel+lapack
あとはport install で以下の形態で導入してください。
%sudo port install py38-numpy +openblas +gccdevel -gfortran -universal
py38-numpy @1.19.5_0+openblas
py38-scipy
port install で以下の形態で導入してください。
%sudo port install py38-scipy +openblas -universal
py38-scipy @1.6.0_0+gfortran+openblas
py38-scikit-learn
port install で以下のように導入してください。
%sudo port install -s -v -d py38-scikit-learn +gcc-devel
py38-scikit-learn @0.24.1_0
#おことわり
この記事は、筆者以外の方の環境でも同様に成功することを保証するものではありません。ビルドや動作確認の失敗、(ないとは思いますが)環境が破壊されても責任は一切負いかねます(基本的には自己責任でお願いします。わかっておられるとは思いますが)。
まだふわっとしか把握してませんが、マルチプロセス動作を設定した操作が動作しない(異常停止じゃなくてサブプロセスの終了を親が確認できてない)ためなのか、pytest の一部が通りません。また、MacbookAir pytest を行うと、CPUが熱量持ちすぎてシステム全体を道連れにして異常終了することがあります。
そもそも OpenBlas 依存なので、Apple Silicon の GPU とか Neural Chip とか全く使ってないですし。
#今回紹介したリンク
https://github.com/gdaisukesuzuki/Macports_tensorflow_macos ... 自家製Portfile について。Apple提供のM1向けtensorflow を導入するための設定も入れてます。
#記録
- (2020.12.30 15:40 JST)...初版
- (2020.1.3 18:45 JST)... scipyのバージョンを 1.6.0 リリース版にあげた。scipy/numpy のコンパイラを gfortran でなく gccdevel に変更
- (2021.1.10 10:00 JST)...gcc,numpyのバージョン更新を反映
- (2021.2.14 18:20 JST)...scikit-learn のバージョンを0.24.0 => 0.24.1 に更新
- (2021.2.15 10:05 JST) ... scipy は macports レポジトリで対応できる。