起こった問題
インストールしたPytorchのバージョンが、GeForce RTX 3070のCUDA capability(sm_86)をサポートしていない。すなわち、深層学習の処理をGPUを使って回せない。
動作環境
- GeForce RTX 3070
- Windows11
-
pixelNeRFをclone後、Anaconda Promptで作成した
pixelnerf
の仮想環境内で作業 - cuda 11.8
エラー
GitHubに倣って、pixelNeRFの推論用のコマンドを入力すると、エラーが出た。
#Anaconda Prompt
(pixelnerf) python eval/gen_video.py -n dtu --gpu_id=0 --split val -P '22 25 28' -D rs_dtu_4 -S 3 --scale 0.25
GeForce RTX 3070 with CUDA capability sm_86 is not compatible with the current PyTorch installation.
The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_70 sm_75.
If you want to use the GeForce RTX 3080Ti GPU with PyTorch, please check the instructions at https://pytorch.org/get-started/locally/
エラーの内容を要約すると
- RTX3070のCUDA camapbility(sm_86)が現在インストールされているPytorchと互換性がない
- 今のPytorchと互換性があるCUDAアーキテクチャはsm_37 sm_50 sm_60 sm_70 sm_75
というもの。
ちなみに、この時の機械学習ライブラリのバージョンは
- PyTorch : 2.3.1+cu118
- Torchvision : 0.18.1 +cu118
以下のサイトによると、Pytorch 2.0.1以降はsm_86もサポートしているので、「互換性がない!」というのは無理がある。
やったこと
1.torchとtorchvisionのアンインストールと再インストール 【→上手くいかず】
#アンインストール
pip uninstall torch torchvision
再インストールは、以下のサイトからコマンドを入手してください。
結果:エラーの内容は変わらない
2. enviroment.ymlで指定しているバージョンを調整【→解決】
pixelNeRFに留まらず、基本的にはenvironment.yml
という仮想環境の作成に必要なパッケージやバージョンが記述されているファイルがある。
その中身を覗くと、
- pytorch==1.6.0
- torchvision==0.7.0
の記述がある。これが悪さをしていそうだ!
上述の「PyTorchがサポートするGPUの Compute Capability」の表を見ると、PyTorch 1.6.0がサポートしているCUDA capabilityにsm_86はない!
ということで、原因はここにあることが分かった。
ここまでのことを整理すると、
- sm_86が対応しているPytorchのバージョンは1.9.0以降
- cuda 11.8に対応しているPytorchとtorchvisionのバージョンは2.0.0以降(ここから調べられる)
よって、environment.ymlを以下のように編集。
#編集前
- pytorch==1.6.0
- torchvision==0.7.0
#編集後
- pytorch==2.0.1
- torchvision==0.15.2
environment.ymlを書き換えた後の処理とコマンド集
1.environment.ymlを書き換える
2.仮想環境から出る:conda deactivate
3.古い仮想環境を消す:conda remove --name <ENV_NAME> --all
4.新しい仮想環境を構築:conda env create -f environment.yml
5.作業ディレクトリに移動:cd <project_dir>
6.仮想環境に入る:conda activate <ENV_NAME>
7.実行