備忘録:SAM2をWindows環境でAnacondaを使わずに動作させる
お疲れ様です。STARAIの中岸です!
先日SAM2の記事書いた際に、動かして遊んでみようと思ったらおま環食らったので、そのあといろいろとやってみた結果、まぁこういったケースもあるよねというのを記事として投稿してみました!
はじめに
この記事は、Windows環境かつAnacondaを使わずにSAM2を動かすために自分がやったことをまとめたものになります(もっと正確に言うと、やっかいな理由でいろいろと環境が制限されている、いわゆる「おま環」で苦戦した記録である)。また、申し訳程度の考察はしてますが、そこまで厳密に原因究明を行ってはないのでご容赦ください。
私の環境は下記の通り。
- OS: Windows11
- Python: 3.10.6
- torch: 2.3.1
- CUDA Toolkit version: 11.8
- CUDA_PATH, CUDA_PATH_V11.8, CUDNN_PATH, CUDA_HOME:
- C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8
- (設定しているし、echoでもちゃんと出るけど普通にやった時無いって言われたんだよなぁ…。後述するがアーキをちゃんと設定してなかったり、インストールオプションが適切でないとこうなるってことなんだろうかなぁ?)
- C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8
- CUDA_PATH, CUDA_PATH_V11.8, CUDNN_PATH, CUDA_HOME:
なお、Windows+Anaconda環境の人は、この方の動画が非常に参考になると思います(Twitterで呟いてた方にも感謝、Anacondaを使える人ならこれを見れば自分のように苦しまなくて済むと思います。この動画があったのでタイトルもAnacondaを強調した感じのものになってしまったともいえる)。
どうやったのか
いきなり本題。そこまで深いものでもないので動作した際のコマンドを書いていく(本来はやらなくていいものもあるはずだが一応全部書き連ねた)。
# リポジトリをcloneするフォルダへ移動
mkdir sam2
cd sam2
git clone https://github.com/facebookresearch/segment-anything-2.git
cd segment-anything-2
# 仮想環境作成&起動
python -m venv env
.\\env\\Scripts\\activate
# とりあえず最初にpipを更新
python.exe -m pip install --upgrade pip
# 必要なモジュールを手動で入れていく(torchは諸事情で2.3.1なので勝手に入れられないように手動で入れた(コマンドは公式のもの))
pip install torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 --index-url https://download.pytorch.org/whl/cu118
# 必須モジュールあたりは勝手に入れてくれそうだけど一応手動で入れた
pip install tqdm
pip install hydra-core
pip install iopath
# 任意モジュール
pip install matplotlib
pip install jupyter
# ここからおま環向け対策(いろいろ調べてた時の残骸もいちおう残しておく)
# アップデートは必要だったが、これはそこまで致命的ではない
pip install --upgrade setuptools wheel
# いらないかも
# pip install ninja
# TORCH ARCHの限定(ここは自分にあったアーキテクチャの数字を入れる!4090だと8.9でした)
set TORCH_CUDA_ARCH_LIST=8.9
# サポートされていないコンパイラの許可(これもいらないかも)
# set NVCC_FLAGS=-allow-unsupported-compiler
# 現在の依存関係でビルドしてインストール(--no-build-isolationオプションは必須)
pip install --no-build-isolation -e .
古い環境の場合は、ここまでの作業が終わった後に、リポジトリ内のsam2/modeling/sam/transformer.pyの22行目を23行目のように下記の通りに書き換える必要がある(これは公式Readmeに掲載されいた内容)。
あとはノートブックを起動して順次実行していくだけ。ちゃんと動いている!!
自分なりの原因考察
抜いたら動かなかった部分について、少し考察してみた(厳密な所はなんも検証していないのでガバガバなのはご容赦ください)。
1. CUDA(torch)のアーキテクチャリストの設定
TORCH_CUDA_ARCH_LISTを設定(もとい限定)していないと、どのアーキに対してビルドするかが曖昧になってしまい、それが原因でビルドが失敗してしまう(Windows環境だとこうなってしまうってことなんかね?Linuxだとこのあたりはうまく吸収、または設定をうまく読みに行ってくれるんだろうか?)。このため、アーキテクチャを限定してやることで問題が解決されました、ということだと思われる。
2. --no-build-isolationオプションでのインストール
このオプションは、パッケージをビルドする際にpipが仮想環境を使用せず、現在のPython環境の依存関係をそのまま利用するように指示する、とある。また、通常pipはパッケージをビルドする際にクリーンな仮想環境を作成し、その中でビルド依存関係をインストールしてからパッケージをビルドする、ともあった。
このことから、上記のオプションをつけないと、Windows環境では、現環境の設定や依存関係が蒸発してしまって(CUDA_HOMEが…ってエラーも出たし)、色々解決できずにエラーが出てしまったということだと思われる。
最後に
動いたのでヨシ!特にこだわりがない人は、推奨されている環境でやりましょう(笑)
Discussion