2024/12/07 Updated by

Docker on Windows 11 (GPU)


[Up] Japanese English

前提条件


インストール手順

" Enable NVIDIA CUDA on WSL " (07/01/2024) によると、手順は次の4ステップである。
  1. Install Windows11 or Windows 10, version 21H2
  2. WIndow11 または WIndows10 (version 21H2 以降) であれば大丈夫とのこと。 手元のPCは Windows 11 Pro version 24H2 であり、この条件を満たしている。

  3. Install the GPU driver
  4. CUDA ML workflows を使うために、 NVIDIA CUDA Enabled driver for WSL のリンク先から NVIDIA App for Enterprise をダウンロードし、インストールする。

    NVIDIA APP は "Best for Games/Creators" か "Best for Professionals/Workstation Users" という2種類のうちどちらかを選択する。 ここでは "Best for Profesionals/Workdstation Users" を選択した。

    どのドライバをインストールするかについては、以下の情報を参考にするらしい。

    要点は、 「Windows に WSL2 をインストールすること」 「Windows に Windows NVIDIA GPU ドライバをインストールする」 「WSL2 内に NVIDIA GPU Linux ドライバーをインストールしてはいけない」 ことのようだ。

  5. Install WSL
  6. [注意] 以下の文章では、"WSL" はすべて "WSL2" を意味している。

    上記のドライバ (NVIDIA Appのこと?) をインストールしたら、 「WSLを動作可能」にして 「glibc ベースのディストリビューション UbuntuかDebian を動作可能」にする。

    1. まず、Windows を最新版に更新する。
    2. Windows Update で Check for updates を選択して、Windows を更新する。

      WIndows Update の Advanced Options において、 Receive updates for other Microsoft products を選択しておくこと。

    3. WSLを動作可能にする。
      1. WSL コマンドをインストールする
      2. コマンドプロンプトを「管理者として実行」して、次のコマンドをタイプすると、 WSL がインストールされる。。
            wsl --install
        2024/12/07時点では、いきなり WSL2 (2.3.26) がインストールされた。 その後、続いて Ubuntu もインストールされた。
      3. Windows を再起動する。
      4. Windows から Ubuntu を起動する。スタート → すべて → Ubuntu (新規)
      5. Ubuntu を最初に 起動したときに、ユーザ名とパスワードを設定する。
            Enter new Unit username: nitta
            New password:    ← Windows と共通にしておく
      6. WSLのバージョンを調べる
      7. [Windowsのコマンドプロンプト上で]
            C:\Users\nitta>wsl -l -v
              NAME      STATE           VERSION
            * Ubuntu    Running         2
    4. glibc ベースのディストリビューション UbuntuかDebianを動作可能にする。
    5. WSL を動作可能にしたときに自動的に行われたので、ここですべきことはない。

    6. WSL2 の linux のバージョンを調べる。
    7. [Ubuntu ウィンドウの上で]
      nitta@gtunes2:~$ cat /proc/version
      Linux version 5.15.167.4-microsoft-standard-WSL2 (root@f9c826d3017f) (gcc (GCC) 11.2.0, GNU ld (GNU Binutils) 2.37) #1 SMP Tue Nov 5 00:21:55 UTC 2024
      
      [管理者として起動した「コマンドプロンプト」上で]
      C:\Users\nitta>wsl cat /proc/version
      Linux version 5.15.167.4-microsoft-standard-WSL2 (root@f9c826d3017f) (gcc (GCC) 11.2.0, GNU ld (GNU Binutils) 2.37) #1 SMP Tue Nov 5 00:21:55 UTC 2024
      
  7. Get started with NVIDIA CUDA
    1. NVIDIA CUDA on WSL User Guide に記述されている手順にしたがう。
      1. Windows に NVIDIA のドライバをインストールする。WSL にLinux用ドライバを入れてはいけない。
      2. すでに Windows には NVIDIAドライバはインストールされているので、ここでは何もしない。

      3. WSL2 (Ubuntu) 用の CUDA Toolkit にアクセスして WSL用のCUDA Toolkitをインストールする。
      4. WSL2上でCUDAアプリケーションをコンパイルするには、Linx x86 用のCUDA Toolkit が必要である。 しかし、標準の CUDA Toolkit は Linux用のGPUドライバを含んでいるので使ってはいけない。 必ず WSL2 用をインストールすること。

        上記の Web ページにアクセスすると、ダウンロード方法が示される。
            $ 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/12.6.3/local_installers/cuda-repo-wsl-ubuntu-12-6-local_12.6.3-1_amd64.deb
            $ sudo dpkg -i cuda-repo-wsl-ubuntu-12-6-local_12.6.3-1_amd64.deb
            $ sudo cp /var/cuda-repo-wsl-ubuntu-12-6-local/cuda-*-keyring.gpg /usr/share/keyrings/
            $ sudo apt-get update
            $ sudo apt-get -y install cuda-toolkit-12-6



      5. 古いGPG key を削除する。
      6.     nitta@gtunes2:~$ sudo apt-key del 7fa2af80
            [sudo] password for nitta:パスワード
            Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
            OK
            
      7. 上の手順にしたがって WSL用 CUDA Toolkit をインストールする。
      8.     nitta@gtunes2:~$ wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
            --2024-12-07 17:53:42--  https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
            Resolving developer.download.nvidia.com (developer.download.nvidia.com)... 152.199.39.144
            Connecting to developer.download.nvidia.com (developer.download.nvidia.com)|152.199.39.144|:443... connected.
            HTTP request sent, awaiting response... 200 OK
            Length: 190 [application/octet-stream]
            Saving to: ‘cuda-wsl-ubuntu.pin’
        
            cuda-wsl-ubuntu.pin           100%[=================================================>]     190  --.-KB/s    in 0s
        
            2024-12-07 17:53:43 (6.66 MB/s) - ‘cuda-wsl-ubuntu.pin’ saved [190/19
            nitta@gtunes2:~$  sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
            [sudo] password for nitta:
            nitta@gtunes2:~$  sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
            [sudo] password for nitta:
            nitta@gtunes2:~$ wget https://developer.download.nvidia.com/compute/cuda/12.6.3/local_installers/cuda-repo-wsl-ubuntu-12-6-local_12.6.3-1_amd64.deb
            --2024-12-07 18:28:15--  https://developer.download.nvidia.com/compute/cuda/12.6.3/local_installers/cuda-repo-wsl-ubuntu-12-6-local_12.6.3-1_amd64.deb
            Resolving developer.download.nvidia.com (developer.download.nvidia.com)... 152.199.39.144
            Connecting to developer.download.nvidia.com (developer.download.nvidia.com)|152.199.39.144|:443... connected.
            HTTP request sent, awaiting response... 200 OK
            Length: 3008426530 (2.8G) [application/x-deb]
            Saving to: ‘cuda-repo-wsl-ubuntu-12-6-local_12.6.3-1_amd64.deb’
        
            cuda-repo-wsl-ubuntu-12-6-loc 100%[=================================================>]   2.80G  9.69MB/s    in 5m 0s
        
            2024-12-07 18:33:21 (9.57 MB/s) - ‘cuda-repo-wsl-ubuntu-12-6-local_12.6.3-1_amd64.deb’ saved [3008426530/3008426530]
            nitta@gtunes2:~$  sudo dpkg -i cuda-repo-wsl-ubuntu-12-6-local_12.6.3-1_amd64.deb
            Selecting previously unselected package cuda-repo-wsl-ubuntu-12-6-local.
            (Reading database ... 40788 files and directories currently installed.)
            Preparing to unpack cuda-repo-wsl-ubuntu-12-6-local_12.6.3-1_amd64.deb ...
            Unpacking cuda-repo-wsl-ubuntu-12-6-local (12.6.3-1) ...
            Setting up cuda-repo-wsl-ubuntu-12-6-local (12.6.3-1) ...
        
            The public cuda-repo-wsl-ubuntu-12-6-local GPG key does not appear to be installed.
            To install the key, run this command:
            sudo cp /var/cuda-repo-wsl-ubuntu-12-6-local/cuda-56752864-keyring.gpg /usr/share/keyrings/
            nitta@gtunes2:~$  sudo cp /var/cuda-repo-wsl-ubuntu-12-6-local/cuda-*-keyring.gpg /usr/share/keyrings/
            nnitta@gtunes2:~$  sudo apt-get update
            Get:1 file:/var/cuda-repo-wsl-ubuntu-12-6-local  InRelease [1572 B]
            Get:1 file:/var/cuda-repo-wsl-ubuntu-12-6-local  InRelease [1572 B]
            Get:2 file:/var/cuda-repo-wsl-ubuntu-12-6-local  Packages [18.8 kB]
            Hit:3 http://archive.ubuntu.com/ubuntu noble InRelease
            Hit:4 http://security.ubuntu.com/ubuntu noble-security InRelease
            Get:5 http://archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB]
            Hit:6 http://archive.ubuntu.com/ubuntu noble-backports InRelease
            Fetched 126 kB in 1s (108 kB/s)
            Reading package lists... Done
            nitta@gtunes2:~$  sudo apt-get -y install cuda-toolkit-12-6
            ...(略)...
            Setting up cuda-toolkit-12-6 (12.6.3-1) ...
    2. 以上の操作により、NVIDIA CUDA on WSL ユーザガイドの指示にしたがって、 NVIDIA Docker 経由で既存の Linux ワークフローを使用することができるようになった。 ← 現時点(2024/12/07)では、NVIDIA Docker は非推奨になり、新しい NVIDIA/nvidia/container-toolkit に置き換えられている。



    3. WSL 内に直接 tensorflow や PyTorch をインストールしても GPU が利用可能だそうだ。


Docker Desktop を Windows11上にインストールする。

  1. docker の英語版公式サイト https://docker.com/ 上の Install Docker Desktop on Windows https://docs.docker.com/desktop/setup/install/windows-install/ を参考にしならが、インストールする。
  2. Docker Desktop for Windows - x86_64 をダウンロードする。
  3. "Docker Desktop Installer.exe"
  4. GUI で "Docker Desktop Installer.exe" を実行すると、 デフォルトで C:\Program Files\Docker\Docker にインストールされる。 インストール先を変更したい場合は、コマンドプロンプトからインストールする。
  5. コマンドプロンプトを起動し、その上からインストーラーを起動し、 D:\sys\Docker\Docker にインストールする。
  6. start /w "" ""Docker Desktop Installer.exe" install --install-dir=D:\sys\Docker\Docker
    
  7. admin アカウントが user アカウントと異なるならば、そのユーザを docker-users group に加える必要がある。 このPCでユーザー nitta はすでに、nitta はadmin アカウントなので、必要ない。 もしコマンドを実行すると「指定されたアカウントは既にグループのメンバーです」というエラーがおきる。
    net localgroup docker-users  /add
    
    [コマンドプロンプト上で]
    net localgroup docker-users nitta /add
    
      Configuration
        (x) Use WSL 2 instead of Hyper-V (recommended) <-- どちらも選択する
        (x) Add shortcut to desktop                    <-- どちらも選択する
    
  8. Windows を再起動する。
  9. Docker Desktop を起動する。
  10. Docker accont でログインする。
  11. Docker Desktop の設定

Docker 上に nVidia が配布しているImage のコンテナを生成する

  1. Ubuntu (WSL2) を起動する。
  2. DeepFake のコードが動くDocker コンテナ 」を参考にして、 tensorflow-2.2.0 を利用可能なコンテナを作成する。
  3. docker run --name 4semi7 --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 --gpus all \
         -p 7077:22 -p 8087:8888 \
         -v /home/docker/4semi7:/root/doc \
         -it nvcr.io/nvidia/tensorflow:20.08-tf2-py3
    
  4. 環境を整える
  5. apt-get update
    apt-get upgrade -y
    apt-get install -y openssh-server
    echo 'root:パスワード' | chpasswd
    sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/" /etc/ssh/sshd_config
    service ssh start

Ubuntu (WSL2) と Windows のファイルシステムの対応について

Windows のエクスプローラの上では、Linux という形で見えている。




Ubuntu (WSL2) からは、Windows のドライブは /mnt の下で見えている。