急にUnetが使えなくなりました Torch not compiled with CUDAを解決した方法
こんにちはKazuです
今書こうとしている論文でAIの検者内誤差を出す必要が出ました。
内容は病理画像中の細胞検出です
1回目の測定の際には全く問題なく動いてくれていました
しかし本日全く同じコード、同じデータセットでデータを読み込んでら何故かerrorがでます(何故 涙)
内容はTorch not compiled with CUDAというerrorを吐きます
午前中6時間くらいかけて何とか治りました。
原因はpipでライブラリを入れた際にtorchも更新されてしまい自身のCUDAとversionが合わなくなったことです。
以下直し方
①自分のCUDAのversionを確認する
やり方はコマンドプロンプトを開いて以下を打ち込みます
nvcc -V
これで一番下の行に以下の文が出てきます
Cuda compilation tools, release 9.1, V9.1.85
自分の場合だとCUDA 9.1になります
罠ですがnvidia-smiで出てくるversionはあくまで搭載GPUに推奨のverなので実際認識されているverとは異なります
自分の場合はnvcc -Vで表示されたverが正しいverでした
② versionの合わなくなったtorch torchvisionをアンインストール
コマンドプロンプトで以下を打ち込みます
pip uninstall torch torchvision
③上記CUDAに合うpytorchのversionを確認しインストール
version情報はpytorchの公式https://pytorch.org/get-started/previous-versions/を参照
自分の場合はCUDA9.1でしたが、公式には9.2しかないのでCUDA9.2でインストールしました。
torchのversionは試行錯誤しました。(これがめっちゃ大変だった)
かなり古いやつで1.4.0だったような記憶もあったので試しましたが学習済の重みをloadする際にtorchが古すぎるとerorrが出てしまいました
(学習時に重みを保存した際のpytorchのversionと、検証時にtestデータで重みをloadする際のpytorchのversionが一致していないといけない 多分コードの書き方もversionによって微妙に変わっている?)
ただし学習時のpytorchのversionもわからないため上の公式を見ながら試行錯誤で学習したときのversionを掘り当てた感じです。
自分の場合は以下が当たりでした (コマンドプロンプトで以下を打つ)
(必ずご自身のCUDAのversionにあったものをインストールされますように
あくまで自分の環境でうまく行った場合の例示です)
# CUDA 9.2
pip install torch==1.7.1+cu92 torchvision==0.8.2+cu92 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
④再起動
実は①~③で修正できているのにerrorを吐くことがあります。
その場合には再起動すると治りますので面倒くさがらず①-③を施行後は再起動して、エラーの出たコードを試して治ったかどうかご確認ください。
原因
直近で考えると2週ほど前にpipであるライブラリをインストールしたことです
これにより何らかconflictを避けるために自動でtorchやら何やらがアップデートされて自分のGPU、CUDAとpytorchのversionが合わなくなり起きたものと思われます
1つのプロジェクトで1つの環境を構築する必要性をとても感じました。
自分は面倒なので全てのプロジェクトを一つの環境で行っていました。
しかしあるプロジェクトで何らかライブラリが足りなくてpip等でインストールした際に、別のプロジェクトでは動かなくなってしまうということが生じているものと思われます
プログラムを組む際には通常はこんな変なこと(環境ごちゃまぜ)はしないのかもしれませんが自分は全て独学のため変なことをしているのだと思います
自戒をこめて参考になれば幸いです。
学習時にtorchのversionもprintしておいてNotebookに残しておこうと思いました
この記事が気に入ったらサポートをしてみませんか?