Docker DesktopでGPUを使う

Windows 10 の普通環境でも Docker Desktop を使って、コンテナ内で GPU (CUDA) を利用できるようになっていました。これまでは Insider Preview を使用する必要があったり、ベータ対応だったりと一般的に使うには…でしたが、ようやく安心して使える時がきたようです。

必要なもの

私の環境情報を記載します。以下のものが必要と考えられます。

  • Windows 10 21H2 (64bit)
  • Windows 版 Docker Desktop 4.4.4
  • NVIDIA グラフィックボードと最新のドライバ
    • GeForce 3060 Ti で確認
    • ドライババージョンは 511.23 と 511.79 で確認

これらの環境を用意すると、コンテナ内でも GPU を認識して CUDA が使用可能でした。

設定手順

Docker Desktop と WSL2 環境の準備

まずは Docker Desktop をインストールします。このときに WSL2 Integration を有効化します。さらに、 WSL2 環境で動作する Ubuntu 20.04 をインストールしておきます。

WSL”2″ であることが必要なので、以下のコマンドを実行してバージョンを確認しておきます。

C:\> wsl -l -v

ここで VERSION 2 となっていない場合には、Windows Subsystem for Linux の設定を修正してください。

NVIDIA のドライバを更新

2022年以降公開されたグラフィックスドライバに更新を行います。少し古いものだと上手く動作しない可能性があります。 WSL2 の Ubuntu の環境に NVIDIA ドライバをインストールしたり、CUDA 関連のソフトウェアをインストールは不要です。

動作確認

NVIDIA が提供しているコンテナを利用して、 コンテナ内で NVIDIA GPU を認識しているかを確認してみます。

NVIDIA が提供しているコンテナは以下のページで確認ができます。
https://catalog.ngc.nvidia.com/containers

ここでは PyTorch のコンテナを利用して確認をしていきます。以下のコマンドをコマンドプロンプトから実行して、コンテナ内のシェルに入ります。

c:\> docker run --gpus all -it --rm  nvcr.io/nvidia/pytorch:21.12-py3  /bin/bash

シェルに入った後、 nvidia-smi コマンドを実行してみると、うまく GPU を認識していることが分かります。

docker コマンドで “–gpus all” のオプションを消してコンテナを起動すると、 nvidia-smi コマンドが実行出来ませんので、この図の状態は確かに GPU が認識しているなと感じられます。

ただしこのままだとメモリ割当部分で警告が表示されてしまいます。何かしらのワークロードを実行する場合には、 docker の起動オプションに、”–ipc=host” もしくは “–shm-size=1g” の設定を付けておきましょう。

試しにディープラーニングのワークロードを走らせてみると、 Windows のタスクマネージャーからも GPU CUDA の使用率が上がることを確認出来ました。

まとめ

コンテナで簡単に CUDA, GPU を有効にした学習タスクを実行できるようになりました。少し前に WSL2 の環境で GPU を使えるようになったニュースがありましたが、それでも環境構築に手間取った印象があります。コンテナを使った場合では、その環境構築の手間が削減されて、かなり簡単に機械学習・ディープラーニングの環境が Windows 環境でも整えられそうです。

余談ですが、すこし昔の NVIDIA コンテナを使うとコンテナ内で 「WARNING: The NVIDIA Driver was not detected.」の警告が出てしまいました。しかしながら、 nvidia-smi コマンドが実行可能であったり、CUDA のタスクも問題なく実行出来たので、まぁ大丈夫かなと思っています。

※本記事は元ページから加筆修正を行い作成しました。

関連記事

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください