DockerコンテナからNVIDIA GPUを利用するためのNVIDIA Container Toolkit
【概要】
Windows上でDocker Desktop(WSL2バックエンド)を用い,DockerコンテナからNVIDIA GPUを利用するための設定手順を解説する。Docker Desktopに同梱されたNVIDIA Container ToolkitによるGPUサポートの有効化と,NVIDIA公式CUDAイメージを用いたコンテナの作成・開始手順を説明する。
【目次】
【関連する外部ページ】
公式ドキュメント:https://docs.nvidia.com/datacenter/cloud-native/
【サイト内の関連情報】
- Windows の基本操作・コマンド操作・設定と、アプリ・開発環境・ローカル AI の導入
- Linux基本コマンドとその活用法:別ページで説明
1. 前提条件
本手順は,Windows上のDocker Desktop(WSL2バックエンド)でUbuntuコンテナを利用する構成を前提とする。以下の条件を満たす必要がある。
- NVIDIA製GPUがホストのWindowsマシンに搭載されていること
- Windows 10またはWindows 11が最新の状態に更新されていること
- WSL2のGPU準仮想化(GPU-PV)に対応した最新のNVIDIAドライバ(Windows側)がインストール済みであること(WSL2上のコンテナからは,このWindows側ドライバを通じてGPUが利用される)
- WSL2が有効化され,WSL2カーネルが最新であること(
wsl --updateで更新する) - Docker Desktopがインストール済みで,WSL2バックエンドで動作していること
本手順のdockerコマンドは,WSL2上のUbuntuのターミナル,またはWindowsのコマンドプロンプト/PowerShellで実行する。
DockerコンテナからGPUを利用することで,CUDA(NVIDIA GPU向けの並列計算プラットフォーム)およびcuDNN(深層学習向けライブラリ)のバージョン管理が容易になり,異なるバージョンの環境を複数のコンテナで使い分けることができる。
2. NVIDIA Container ToolkitによるGPUサポートの有効化
NVIDIA Container Toolkitは,DockerコンテナからGPUにアクセスするためのソフトウェアである。Windows上のDocker Desktop(WSL2バックエンド)では,このツールキットがDocker Desktopに同梱されており,利用者が個別にインストールする必要はない。
Docker Desktopは,GPU準仮想化(GPU-PV)によって,コンテナからGPUを利用できるようにする。第1章の前提条件(WSL2のGPU-PVに対応した最新のNVIDIAドライバ,最新のWSL2カーネル,Docker DesktopのWSL2バックエンド)を満たしていれば,docker runに--gpus allを付けるだけで,コンテナからGPUを利用できる。
GPUが正しく利用できるかは,次章でCUDAイメージのコンテナを作成し,nvidia-smiコマンドで確認する。
3. NVIDIA CUDAイメージからのコンテナの作成と開始
NVIDIA公式のCUDAイメージを使用してコンテナを作成する。使用可能なタグはhttps://hub.docker.com/r/nvidia/cuda/tagsで確認できる。
以下のコマンド例では,タグとして「nvidia/cuda:12.8.0-cudnn-devel-ubuntu24.04」を使用している。このタグは,CUDA 12.8.0,cuDNN(深層学習向けライブラリ),開発用ツール一式,Ubuntu 24.04を含む構成である。
docker run --name myubuntu --restart unless-stopped -p 8888:8888 -it --gpus all nvidia/cuda:12.8.0-cudnn-devel-ubuntu24.04 /bin/bash
nvidia-smi
exit
主要なオプションの説明は以下のとおりである。
- --name myubuntu:コンテナに「myubuntu」という名前を付与する
- --restart unless-stopped:手動で停止しない限り,Dockerデーモン起動時にコンテナを自動的に再開する
- -p 8888:8888:ホストのポート8888をコンテナのポート8888にマッピングする(Jupyter Notebook等で使用)
- --gpus all:ホストのすべてのGPUをコンテナから利用可能にする
コンテナ内でnvidia-smiコマンドを実行すると,GPUの認識状況,ドライバのバージョン,メモリ使用量を確認できる。GPUが正しく認識されていれば,GPU情報が表示される。