環境
- Windows 10 Home
- OSビルド 20206.1000
- ubuntu 18.04
- NVIDIA Container Toolkit for Docker 19.03
- CUDA10.1
pytorchやTensorflowを使いたいのでCUDA toolkit 10.Xが必要(?)
http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/
を見た感じubuntuのバージョンは2004はCUDA11しかないっぽいので1804でやってみる
手順
準備
- Windows 10 Insider Preview Buildをインストールしておく
- wsl1からwsl2にしておく
私は終わっていたので省略
windows側にGPUドライバインストール
ここからダウンロードしてインストールするだけ
https://developer.nvidia.com/cuda/wsl/download
Microsoft storeからubuntu 18.04インストール
Installing, this may take a few minutes...
Enter new UNIX username:
New password:
Retype new password:
- 名前とパスワードを設定
- Windows側でWSL2か確認
> wsl -l -v
NAME STATE VERSION
* Ubuntu-18.04 Running 2
CUDA toolkit インストール
これを参考にインストール。
- 準備
$ sudo apt update
$ sudo apt upgrade
- インストール
$ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
$ sudo sh -c 'echo "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 /" > /etc/apt/sources.list.d/cuda.list'
$ sudo apt update
$ sudo apt-get install -y cuda-toolkit-10-1
Nvidia container toolkitインストール
$ curl https://get.docker.com | sh
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
$ curl -s -L https://nvidia.github.io/nvidia-container-runtime/experimental/$distribution/nvidia-container-runtime.list | sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
$ sudo apt update
$ sudo apt-get install -y nvidia-docker2
- docker 起動
$ sudo service docker start
* Starting Docker: docker [ OK ]
$ sudo service docker status
* Docker is running
動いている様子
docker run時のエラー
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"process_linux.go:432: running prestart hook 0 caused \\\"error running hook: exit status 1, stdout: , stderr: nvidia-container-cli: detection error: stat failed: /dev/dxg: no such file or directory\\\\n\\\"\"": unknown.
wslのバージョンが古い可能性がある。Windows側からwslをアップデートする。
wsl --update
更新をチェック中...
更新をダウンロード中...
更新をインストール中...
この変更は、次回の WSL 再起動時に有効になります。強制的に再起動するには、' wsl --shutdown ' を実行してください。
カーネル バージョン: 4.19.128
wsl --shutdown
wsl --update
更新をチェック中...
カーネルの更新を受けるには、Windows Update の「Windows の更新時に他の Microsoft 製品の更新プログラムを受け取る」設定をオンにしてください。
詳細については、 https://aka.ms/wsl2kernel.
を参照してください
最初どのバージョンか把握していなかったが、4.19.128になったら上記エラーは出なくなった。
pytorch を入れてみる
$ sudo docker pull pytorch/pytorch
$ sudo docker run -it --gpus all pytorch/pytorch
root@ee5e5884320e:/workspace# python
Python 3.7.7 (default, May 7 2020, 21:25:33)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.cuda.is_available()
True
無事GPUを認識しているようです。
忘備録:Windows側のVSCodeからWSL内のContainerにアクセスできない
WSL2でDockerを使いたい場合、Docker Desktop for windowsを使うようにという情報多数あるが、GPUを使いたい場合、wsl側にNVIDIA Container Toolkitを入れる必要がある。
Windows側のVSCodeからWSL内のContainerにアクセスしContainer内の開発を行いたかった…。(できないので解決した人いればコメント下さい)
以下やったことなど。
VSCodeの以下の拡張機能をインストールした。
- Local
- Remote - WSL
- Remote - Container - Remote(WSL:UBUNTU-18.04)
- Docker
エラー:"connect EACCES /var/run/docker.sock"
これで解決
https://docs.docker.com/engine/install/linux-postinstall/
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
WSLのDockerを起動しておくと、Docker拡張機能から各Containerの存在は見えるようになった。
エラー(未解決):Docker returned an error. Make sure the Docker daemon is running.
起動したコンテナに対してAttach Visual Studio Codeするとエラーダイアログがでる。
参考
- https://qiita.com/ksasaki/items/ee864abd74f95fea1efa#cuda-toolkit-%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
- https://docs.nvidia.com/cuda/wsl-user-guide/index.html#getting-started
- https://github.com/microsoft/vscode-docker/wiki/Troubleshooting
- https://www.kouken-party.info/2020/06/19/wsl2%E3%81%A7cuda%E3%82%92%E4%BD%BF%E3%81%86/