M1 Mac で PyTorch を使うとき、conda環境でも conda install は打たない方がいいかもしれない話
結論
今回の自分の環境では、conda環境を作ること自体は問題なかった。
ただし、その環境の中で conda install を使って pandas などを追加すると、import torch が OpenMP 衝突で壊れることがあった。
一方で、
- conda で Python 環境だけ作る
- その後のパッケージ追加は 全部
pip install -
torch,pandas,tqdm,opencv-pythonも全部 pip
という構成では、今回の環境では正常に動いた。
そのため、今回の備忘録としては、
M1 Mac で PyTorch を使うときは、conda環境を使っても、その中で
conda installは打たない方がいいかもしれない
としておく。
起きたこと
最初に、かなり軽い環境を作った。
conda create -n tsu3 python=3.10 -y
conda activate tsu3
python -m pip install -U pip setuptools wheel
pip install torch torchvision torchaudio
この時点では問題なく動いた。
python - <<'PY'
import torch
print(torch.__version__)
print("mps built:", torch.backends.mps.is_built())
print("mps available:", torch.backends.mps.is_available())
print(torch.device("mps" if torch.backends.mps.is_available() else "cpu"))
PY
結果:
2.10.0
mps built: True
mps available: True
mps
つまり、PyTorch + MPS は正常動作した。
壊れたタイミング
その後、必要そうなものを足していったところ、import torch で次のエラーが出るようになった。
OMP: Error #15: Initializing libomp.dylib, but found libomp.dylib already initialized.
zsh: abort python
今回、疑わしかった追加はこのあたり。
conda install pandas
conda install tqdm
さらに pip install opencv-python を入れたあとにも再発した。
ただ、体感としては tqdm より pandas の方が怪しい。
正確には、pandas そのものというより、pandas が引っ張るネイティブ依存が怪しいのだと思う。
見えたこと
壊れた環境では、OpenMP系ライブラリが複数見えていた。
find "$CONDA_PREFIX" \( -name "libomp*.dylib" -o -name "libiomp5*.dylib" \) 2>/dev/null
失敗時の例:
/Users/masarina/miniforge3/envs/tsu2/lib/libiomp5.dylib
/Users/masarina/miniforge3/envs/tsu2/lib/libomp.dylib
/Users/masarina/miniforge3/envs/tsu2/lib/python3.11/site-packages/torch/lib/libomp.dylib
一方、成功していた最小環境ではこれだけだった。
/Users/masarina/miniforge3/envs/tsu3/lib/python3.10/site-packages/torch/lib/libomp.dylib
つまり、
- conda側のネイティブ依存
- pip側の torch のネイティブ依存
が同時に入って、OpenMP が衝突した可能性が高い。
今回の自分用ルール
今回の経験から、自分用ルールはかなり単純になった。
やる
conda create -n tsu3 python=3.10 -y
conda activate tsu3
python -m pip install -U pip setuptools wheel
pip install torch torchvision torchaudio pandas tqdm opencv-python
やらない
conda install pandas
conda install tqdm
つまり、
conda環境は使ってよい。
でも、その中でconda installは打たない方が安全かもしれない。
という方針にした。
まとめ
今回の自分の環境では、
- conda環境作成 → OK
- pipで torch 導入 → OK
- pipで pandas / tqdm / opencv-python 導入 → OK
- conda install を混ぜる → 壊れる可能性あり
だった。
なので、M1 Mac で PyTorch を使うときは、少なくとも自分はしばらく
「conda は Python 環境を作るだけ。追加パッケージは全部 pip」
で運用してみる。