LoginSignup
31
34

More than 1 year has passed since last update.

Windows 11のWSLとDocker DesktopとGPUを使用したDeepLearning環境の構築方法(超便利になった!!)

Last updated at Posted at 2022-01-21

今回は、Windows 11 の Deep Learning環境作成方法の紹介です。(Windows 10 21H2以降でも動くようになりました)

過去の記事

今まで紹介してきたWindowsのDeepLearning環境の構成とガラッと変わって、コンテナからNVIDIAのGPUを使う方法を紹介します。これで公開されているDeepLearning向けのコンテナをサックっと起動して素早くDeep Learningの環境を手に入れることができます。やったー。

WSLでCUDAを使うためのWindowsドライバをインストールする

最新のwindows版 CUDA Toolkitを以下のURLからダウンロードしてインストールします。

WSL 2 からCUDAを使うことができるようになります。

Docker Desktopをインストールする

次に、Docker Desktopを以下のURLからダウンロードしてインストールします。

これで準備は完了です!
Docker Desktopがnvidia-dockerに対応したため、コンテナ上からCUDAを使うことができます。以下のURLは紹介の記事。

UbuntuでCUDAが使えるか確認してみる

NVIDIAのCUDAコンテナを起動して、nvidia-smiを実行してみます。このコンテナは、ご自身でTensorFlowやPyTorchをインストールするときに便利なコンテナです。

コマンド(PowerShellかCommandから実行してください。以下はCUDA11.6がインストールされたUbuntu 20.04を指定)

docker run -it --gpus=all --rm nvidia/cuda:11.6.0-base-ubuntu20.04 nvidia-smi

実行結果

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.00       Driver Version: 510.06       CUDA Version: 11.6     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  On   | 00000000:01:00.0  On |                  N/A |
| 30%   30C    P8    31W / 350W |   1187MiB / 24576MiB |     N/A      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

フレームワークによっては対応しているCUDAのバージョンが異なるため、使いたいバージョンのCUDAをコンテナのタグで指定するだけで使うことができます。CUDAとcuDNNの再インストールが不要になりました。以下のURLから使いたいバージョンとOSを見つけてコンテナのタグに指定するだけです。

TensorFlowでCUDAが使えるか確認してみる

TensorFlowもコンテナから使うだけです。インストールは必要ありません。

コマンド(PowerShellかCommandから実行してください。以下は最新のコンテナを指定)

docker run --gpus all -it --rm tensorflow/tensorflow:latest-gpu python -c "from tensorflow.python.client import device_lib; import os; os.environ['TF_CPP_MIN_LOG_LEVEL']='1'; print(device_lib.list_local_devices())"

実行結果

[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 7510238269992894143
xla_global_id: -1
, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 22681550848
locality {
  bus_id: 1
  links {
  }
}
incarnation: 3708138668520980036
physical_device_desc: "device: 0, name: NVIDIA GeForce RTX 3090, pci bus id: 0000:01:00.0, compute capability: 8.6"
xla_global_id: 416903419
]

以下のURLを参考にバージョンを指定できます。

他に、NVIDIAが提供しているNGCのTensorFlowを使うこともできます。tf1はVersion 1系、tf2はVersion 2系ですね。

PyTorchでCUDAが使えるか確認してみる

PyTorchもコンテナから使うだけです。インストールは必要ありません。

コマンド(PowerShellかCommandから実行してください。以下はNGCのコンテナを指定)

docker run --gpus all -it --rm nvcr.io/nvidia/pytorch:21.12-py3 python -c "import torch; print('version={}\ncuda is available={}\ncuda device count={}'.format(torch.__version__, torch.cuda.is_available(), torch.cuda.device_count()))"

実行結果(一部抜粋)

version=1.11.0a0+b6df043
cuda is available=True
cuda device count=1

以下のURLを参考にバージョンを指定できます。

実際にプログラムを実行するには

コンテナに慣れた人であれば特に説明は不要だと思いますが、コンテナを起動するときはWindowsのフォルダをマウントすることをお勧めします。マウントしたフォルダでプログラムを編集します。

Jupyter Notebookを使う

Jupyter Notebookを使う方はポート転送の設定もした方がよいでしょう。

以下のTensorFlow起動では、bashを実行しています。また、WindowsのD:\workフォルダをコンテナの/workにマウント設定して、コンテナの8888ポートをWindowsの8888ポートに転送しています。

docker run --gpus all -it -p 8888:8888 -v D:\work:/work nvcr.io/nvidia/tensorflow:21.12-tf2-py3 bash

起動後、Jupyter Notebookを起動した後に表示される以下のようなURLを参考に、WindowsのブラウザでJupyter Notebookにアクセスすることができます。

jupyter notebook

.
.
.

    Or copy and paste this URL:
        http://hostname:8888/?token=9271c7732acb2837f7ed17c2d4033c8978a6a61a696c2e3a

ブラウザでアクセスする際は、hostnameと書かれているところは、localhostに変更します。

image.png

Visual Studio Codeを使う

VSCodeのRemote Developent(Remote - Contaners)プラグインを使うとVisual Studio Codeからコンテナにアタッチしてファイル編集やターミナルやデバッグを使うことができます。(ファイルの編集だけならこのプラグインを使う必要はありません。マウントされているファイルを直接編集できます。)

image.png

プラグインをインストールしたら、左下をクリックして、コンテナへのアタッチを選択します。

image.png

さいごに

Linux向けにしか提供されていなかったパッケージもこれで難なく動かすことができるようになりましたね。
超便利になった。WSL、CUDA on WSL、Docker Desktop最高!!

31
34
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
34