- 投稿日:2021-07-15T13:47:03+09:00
Apple Silicon MacのPython環境を整備してみる (conda使わず)
予備知識 現状手に入るApple Silicon MacのCPUはM1と呼ばれる。 $ sysctl -a machdep.cpu machdep.cpu.brand_string: Apple M1 machdep.cpu.core_count: 8 machdep.cpu.cores_per_package: 8 machdep.cpu.logical_per_package: 8 machdep.cpu.thread_count: 8 CPUコアはARMであり、アーキテクチャ文字列はarm64である。 $ arch arm64 Python2は2.7系、Python3は3.8系がインストールされている。 $ /usr/bin/python -V Python 2.7.16 $ /usr/bin/python3 -V Python 3.8.2 Pythonの主要なパッケージのarm64対応は、Python3.9以降で行うとされている。 Scipy Numpy など。 Apple Silicon MacでのPython環境の整えかた 方針 以上の情報から、Python3.9以降を用いて環境構築を行うのが良さそうである。 システムのPython3を置き換えるのは困難なので、 pyenv等の仮想環境を用いる HomebrewなどでPython3.9以降をインストールし、そちらを使うように環境変数等を整える。 などの対応が必要。ひとまずpyenvでPython3.9の仮想環境を作ってみた。venv好きの人はpyenvでPythonのバージョンだけ切り替えて、venvで仮想環境を作っても良い。 手短に結論 ごく一部のパッケージだけ個別対処をすれば、実用上困らないレベルには達している。 素直にインストールできたもの pip installで素直に入ったもの。ライブラリが必要とか、LDFLAGS, CFLAGSなどの設定が必要な場合もあるが、Apple Silicon特有の話ではないので省略する。 Jinja2 Keras-Preprocessing Markdown MarkupSafe Pillow PyQt5 PyQt5-sip PyYAML Pygments Werkzeug absl-py ansible appnope astunparse backcall cached-property cachetools certifi cffi chardet cmake control cryptography cycler cython decorator dill easyesn flask flatbuffers gast google-auth google-auth-oauthlib google-pasta graphviz gsutil h5py haversine hidapi idna imgaug importlib-metadata ipython ipython-genutils japanize_matplotlib jedi keras kiwisolver kociemba labelimg lxml matplotlib more-itertools mpi4py mxnet mysql mysqlclient ntlm-auth numpy oauthlib opencv-python openpyxl opt-einsum optuna packaging paho-mqtt pandas parso passlib pexpect pickleshare plotly poetry prompt-toolkit protobuf ptyprocess pyasn1 pyasn1-modules pycodestyle pycparser pycwt pydot pyglet pyknp pyparsing python-dateutil pyusb pywinrm requests requests-ntlm requests-oauthlib rsa scikit-build scikit-learn scipy selenium setuptools six slidingwindow sympy tensorboard-plugin-wit tensorflow-estimator tensorflow-metal termcolor torch torchvision tqdm traitlets typeguard typing typing-extensions urllib3 wcwidth wheel wrapt wxPython xlrd xmltodict yolov4 zipp インストールに失敗したもの 以下のパッケージはpip installに失敗した(2021/7/15現在)。 PyQt5-Qt => No matching distribution found (まあ不要でしょう) deeplabcut => intel-openmpが無い (Intel専用のよう) grpcio => エラー tensorboard => grpcioが必要 tensorflow-addons => 適切なwheelが存在せず tensorflow-macos => grpcioが必要 yolov5 => grpcioが必要 個別対処 grpcio grpcioが入れられれば、他のいくつかも救える。 export GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 export GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1 pip install grpcio または GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1 pip install grpcio tensorflow-addons pypi.orgでwheelが配布されていないので、ソースビルドをする。 ビルドスクリプトがApple Silicon非対応だったので、修正し、pull requestを出したら採用された。作ったwheelも置いておく。 - pull requestの顛末 (ビルドの仕方も書いた) - Python3.9用にビルドしたwheel (zipしてある) TensorFlowについて Apple Siliconに限らず、Mac用のTensorFlowは、tensorflow-macosと、そのアドオンであるtensorflow-metalになった。 どちらもpip installでインストールできる。 tensorflow-macosだけでも動き、tensorflow-metalを入れるとGPUアクセラレーションが使えるようになる。metalはハード依存性の低い共通仕様であるが、tensorflow-metalでのGPUアクセラレーションは現時点ではAMD(RADEON)のみ対応している。そのうちIntelとかも対応してくれるかも知れない。その前にIntel Macが無くなるかも知れないが。 試したところ、tensorflow-metalを入れるとかえって遅くなることもあるので、アプリ次第でtensorflow-metalを入れるかどうか判断することになる。 まとめ 自分的には困らない程度に環境が整った。