コンテンツにスキップ

Top

Windows 10 + WSL2 + Ubuntu 20.04 + CUDA 11.3 + PyTorch 1.11 の組み合わせで動く環境を作る

Windows 10 の WSL2 上の Ubuntu 20.04 で PyTorch を実行する環境の構築手順。

面倒だったのはCUDAのバージョン

現在のNVIDIAのHPに従うと、11.7になる。
https://docs.nvidia.com/cuda/wsl-user-guide/index.html

これで動いていたので気に留めなかったが、
Detectron2 で コンパイル エラー
が発生。

1
2
3
RuntimeError:
The detected CUDA version (11.7) mismatches the version that was used to compile
PyTorch (11.3). Please make sure to use the same CUDA versions.

エラーメッセージから11.3 を入れないといけないのだがURLがわからない。
ので、頑張って調べた

この辺は、PyTorchのバージョンアップ(1.12とか)に伴い直っていくのだろう。

なお、Detectron2 のインストール方法については以下を。
https://jitaku.work/it/category/ai/machine-learning/deep-learning/pytorch/detectron2/

環境構築手順

①WSL2 に Ubuntu 20.04 を入れる

さすがに割愛。

②venvで環境構築

直接やっても良いが、環境が汚染されるといやなのでvenvを使う。

1
2
3
4
5
6
sudo apt -y update
sudo apt -y upgrade
sudo apt install -y python3.8-venv
python3 -m venv ~/envs/pytorch-cuda
echo 'source ~/envs/pytorch-cuda/bin/activate' >> ${HOME}/.bashrc
source ~/.bashrc

③pip を最新にする

pipを最新にしないとDetectron2のコンパイル時にエラーになって困ったので最新にしとく

1
pip install pip==22.1.2

④CUDA/CUDA Toolkit を入れる

CUDA と CUDA Toolkitを入れる。
本来であれば以下の、
https://docs.nvidia.com/cuda/wsl-user-guide/index.html
に従って入れればよいだけなのだけどこれだと最新の 11.7 になってしまう。

現在のPyTorchのStableな環境はCUDA 11.3で、11.7でもなんだかんだ言って動くのだけどDetectron2のコンパイル時にエラーになったので、ここは11.3を入れる。

CUDA 11.3 をインストール

1
2
3
4
5
6
7
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.3.1/local_installers/cuda-repo-wsl-ubuntu-11-3-local_11.3.1-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-11-3-local_11.3.1-1_amd64.deb
sudo apt-key add /var/cuda-repo-wsl-ubuntu-11-3-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda

CUDA Toolkit 11.3 をインストール

1
2
3
4
5
6
7
8
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.3.1/local_installers/cuda-repo-ubuntu2004-11-3-local_11.3.1-465.19.01-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2004-11-3-local_11.3.1-465.19.01-1_amd64.deb
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda-toolkit-11-3

注意!
忘れがちだけどパスを通すこと。

1
2
3
4
5
6
7
export CUDA_PATH=/usr/local/cuda-11.3
echo 'export CUDA_PATH=/usr/local/cuda-11.3' >> ${HOME}/.bashrc
export LD_LIBRARY_PATH=/usr/local/cuda-11.3/lib64:${LD_LIBRARY_PATH}
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.3/lib64:${LD_LIBRARY_PATH}' >> ${HOME}/.bashrc
export PATH=/usr/local/cuda-11.3/bin:${PATH}
echo 'export PATH=/usr/local/cuda-11.3/bin:${PATH}' >> ${HOME}/.bashrc
source ~/.bashrc

これでCUDA11.3のインストールは完了!
念のためnvccで確認する。

1
2
3
4
5
6
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Mon_May__3_19:15:13_PDT_2021
Cuda compilation tools, release 11.3, V11.3.109
Build cuda_11.3.r11.3/compiler.29920130_0

nvidia-smiでCUDAバージョンを確認しない!
nvidia-smiを起動すると右上のほうに CUDA Version: 11.6 とか出るのであれ?11.6なの?と誤解しがちだが、これは入っているドライバーがCUDA 11.6まで対応するよ、という意味で、今は言っているCUDAバージョンを指しているわけではない。

⑤Pytorchのインストール

やっとこさ、Pytorchのインストール。

https://pytorch.org/get-started/locally/

のページにしたがって以下を選択し、

・Stable (1.11.0)
・Windows
・Pip
・Python
・CUDA 11.3

生成された以下のコマンドを実行。

1
pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113

確認

1
2
python -c "import torch; print(torch.__version__)"
1.11.0+cu113

OK!

⑥CUDAが有効かを確認

1
2
python -c "import torch; print(torch.cuda.is_available())"
True

以上!

なんか変なエラーがでて動かなくなった

ごちゃごちゃ環境をいじってたら、

1
UserWarning: CUDA initialization: The NVIDIA driver on your system is too old (found version 10010). Please update your GPU driver by downloading and installing a new version from the URL: http://www.nvidia.com/Download/index.aspx 

とか出るようになって、CUDAで学習を実行できなくなった。

以下のコマンドでFalseが返却される。

1
2
python -c "import torch; print(torch.cuda.is_available())"
False

どうやっても戻せなかったので、Ubuntuの入れ直しからやり直した。

この状態に陥ってから入れ直しではなく直す方法が知りたい。