スポンサーリンク

【windows11】 WSL2でDocker on GPU環境構築

Tool

WSL2上にDockerインストールし、GPUを使用できるように環境構築を行います。

windows環境でdockerを利用するにはWSLのインストールが必要になります。

WSLとは

WSL (Windows Subsystem for Linux) は、Windows 10およびWindows Server 2019で実行されるLinux環境を提供する機能です。これにより、Windows上でLinuxプログラムを実行することができます。

WSLは、Windows上でUbuntu、Debian、OpenSUSE、Kali LinuxなどのLinuxディストリビューションを実行することができます。

WSLを使用すると、Windows上でLinuxコマンドラインツールやシェルスクリプトを実行したり、Linux用のプログラムやツールをインストールして実行したりすることができます。

WSL2では、より高速なファイルシステムアクセスやネットワークパフォーマンスの向上、Dockerのサポートなどが追加されました。

私の構築した際の前提条件は下記になります。

前提条件
  • windows11
  • GeForce 3060Ti
  • NVIDIA Driver 531.68

Driver未インストールの場合はwindows用のNVIDIA DriverにWSL用のドライバが含まれているので、ダウンロードページまたはFeForce Experienceからwindows用ドライバをダウンロードします。

Rakuten

WLSのインストール

PowerShellまたはコマンドプロンプトを管理者モードで開き、wsl --installコマンド入力ます。こちらのコマンドでWSL2をインストールするだけでなく、Ubuntuもインストールしてくれます。

wsl --install

インストール済みの場合は念のためアップデートをします。

wls --update

WSL2でUbuntuが動作しているか確認をします。(私の場合はUbuntu-22.04になります。)
VERSIONが2になっていることを確認します。

wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-22.04    Running         2

WLS用のNVIDIA Driverの確認

wsl -d <Distribution Name>コマンドでWSLを起動します。(私の場合はUbuntu-22.04になります。)

wsl -d Ubuntu-22.04

WSLで起動したubuntuの /usr/lib/wsl/lib 配下にドライバ関連のファイルがあります。この中にnvidia-smiがあるので実行してGPUの認識確認を行います。

ubuntu@omen:/$ ls /usr/lib/wsl/lib
libcuda.so      libd3d12core.so  libnvdxdlkernels.so    libnvidia-opticalflow.so    libnvwgf2umx.so
libcuda.so.1    libdxcore.so     libnvidia-encode.so    libnvidia-opticalflow.so.1  nvidia-smi
libcuda.so.1.1  libnvcuvid.so    libnvidia-encode.so.1  libnvoptix.so.1
libd3d12.so     libnvcuvid.so.1  libnvidia-ml.so.1      libnvoptix_loader.so.1
ubuntu@omen:/$ nvidia-smi
Sun Apr 23 06:16:12 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 530.47                 Driver Version: 531.68       CUDA Version: 12.1     |
|-----------------------------------------+----------------------+----------------------+
| 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 RTX 3060 Ti      On | 00000000:01:00.0  On |                  N/A |
| 30%   32C    P8               15W / 200W|    712MiB /  8192MiB |     17%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

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

Dockerのインストール

公式サイトの手順通りにインストールを行います。

Dcokerのセットアップ

Docker公式スクリプトからのUbuntu上にDocker-CEセットアップを行います。

$ curl https://get.docker.com | sh \
  && sudo systemctl --now enable docker

ユーザー権限でDockerを起動できるようにします。

$ sudo usermod -aG docker $USER

NVIDIA Container Toolkitのセットアップ

順番にターミナルで実行していきます。

パッケージレポジトリとGPGキーのセットアップを行います。

$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
      && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
      && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
            sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
            sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

パッケージリストのアップデートを行い、nvidia-container-toolkitをインストールします。

$ sudo apt-get update
$ sudo apt-get install -y nvidia-container-toolkit

NVIDIA Container Runtimeを認識するようにDocker daemonを構成します。

$ sudo nvidia-ctk runtime configure --runtime=docker

Docker daemonを再起動します。

$ sudo systemctl restart docker

ここでCUDA containerが正常に動作するかテストをします。

$ sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi

下記が動作結果になります。

Unable to find image 'nvidia/cuda:11.6.2-base-ubuntu20.04' locally
11.6.2-base-ubuntu20.04: Pulling from nvidia/cuda
846c0b181fff: Pull complete
b787be75b30b: Pull complete
40a5337e592b: Pull complete
8055c4cd4ab2: Pull complete
a0c882e23131: Pull complete
Digest: sha256:9928940c6e88ed3cdee08e0ea451c082a0ebf058f258f6fbc7f6c116aeb02143
Status: Downloaded newer image for nvidia/cuda:11.6.2-base-ubuntu20.04
Sat Apr 22 20:10:11 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 530.47                 Driver Version: 531.68       CUDA Version: 12.1     |
|-----------------------------------------+----------------------+----------------------+
| 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 RTX 3060 Ti      On | 00000000:01:00.0  On |                  N/A |
| 30%   31C    P8               15W / 200W|    628MiB /  8192MiB |     19%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

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

先ほどのnvidia-smiと同じ結果になればOKです。

GPU環境下でDockerを動かす

h2_4

NVIDIA GPU CloudにあるPytorchのイメージで動作を試してみます。

とりあえず、一番新しいイメージを引っ張ってきてDockerを起動します。

$ docker pull nvcr.io/nvidia/pytorch:23.03-py3
$ docker run --name torch -it --rm --gpus all --shm-size=8g nvcr.io/nvidia/pytorch:23.03-py3

Dockerを起動させて、nvidia-smiを試します。

# nvidia-smi
Sat Apr 22 22:15:32 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 530.47                 Driver Version: 531.68       CUDA Version: 12.1     |
|-----------------------------------------+----------------------+----------------------+
| 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 RTX 3060 Ti      On | 00000000:01:00.0  On |                  N/A |
| 30%   31C    P8               15W / 200W|    710MiB /  8192MiB |     21%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

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

ついでにPython3を実行してPytorchからGPUが確認できるか試してみます。

# python3
Python 3.8.10 (default, Nov 14 2022, 12:59:47)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.cuda.is_available())
True

しっかりとTrueが返ってきておりました!

さいごに

なんとかwindowsのPCでもGPU使って計算処理ができるようになりました。

最後までご覧いただきありがとうございます。

コメント

タイトルとURLをコピーしました