Jupyter Notebookが動くDockerを作る (Win11用)その1

NVIDIA RTX4080Super 16GB対応

使用するグラフィックカードは、自分の予算に応じた価格帯の物を選びます。
例えば、私のような貧乏人でも入手できそうなモデルと価格帯は以下 
ラジコン草刈り機が買えそうな値段 
最低ラインでRTX3060 12GB 中古で4~5万
中位 RTX4080Super16GB 中古で16~17万
上位 RTX4090 24GB 中古で40~68万

PyTorch・YOLO開発環境 構築手順書

1.Windowsの仮想化機能を有効にする

タスクバーの検索窓に「windows features」と入力し、「Windowsの機能の有効化または無効化」を開いて以下の4つにチェックを入れてPCを再起動します。

・Hyper-V
・ Linux用Windowsサブシステム (WSL)
・ Windowsハイパーバイザープラットフォーム
・仮想マシンプラットフォーム

2.NVIDIA グラフィックドライバーの導入

NVIDIA公式サイトから、RTX 4080 SUPER (Windows 11用) の Studio ドライバー (SD) をダウンロードし
てインストールし、PCを再起動します。

3.WSL2 (Ubuntu 24.04) のインストール

WindowsのPowerShell(管理者権限)を開き、以下を実行して初期ユーザー名とパスワードを設定し
ます。

wsl --install -d Ubuntu-24.04

・GPUの認識確認(Ubuntu内)
 Ubuntuターミナルを開き、以下を実行します。

nvidia-smi

 RTX 4080 SUPERのステータスが表示されれば、WSL2へのGPU認識は完了です。



4. Docker Desktop のインストールと連携設定


Windows版の Docker Desktop をインストールして起動します。
https://www.docker.com/ja-jp/products/docker-desktop/
Windows版のAMD64をダウンロードします。

 設定
 設定(歯車マーク)> Resources > WSL integration を開き、
 「Enable integration with my default WSL distro」にチェックを入れ、
 「Ubuntu-24.04」のスイッチをONにして「Apply & restart」をクリックします。
 起動したら「close」ボタンをクリックします。

5.作業フォルダと Dockerfile とdocker-compose.ymlの作成


 作業用のフォルダ(例: C:\YOLO_Develop など、どこでも構いません)を作成します。
 今回は「C:\Users\name\MyDocker1」を作成し、そのMyDocker1フォルダー内にテキストエディタ
 ーで拡張子無しで以下の様なDockerfileを配置します。
 保存する時に文字コード->UTF-8N 改行コード->LFにして下さい。

 Windows 11 + WSL2 (Ubuntu 24.04) + RTX 4080 Super のパワーを最大限に活かし、PyTorch
 や Ultralytics(YOLO)が爆速で動く環境を構築します。
 nvcr.io/nvidia/pytorchイメージはNVIDIAがPyTorchを限界まで高速化・最適化してあるのですが
 そのまま動かそうとしてもエラーが出まくるのでインストールに工夫が必要になります。
 こちらはPython 3.10.12です。
 素直にnvidia/cuda:12.6.0-runtime-ubuntu24.04を使う手もあります。(構築2参照)
 この場合、PyTorchや必要なライブラリを自分で一からビルド(pipインストール)する必要が
 あります、その場合手順1~5は同じ作業なので飛ばして手順5から進めて下さい。
 この解説の場合フォルダ名とポート番号を変えているので2方式両方入れて両方を動かすことも
 出来ます。

 Windows11のFドライブ内のdataフォルダをJupyterNotebook起動時に使えるようマウントしてい
 ます、不要な場合やドライブを変更したい場合には書き換えて作成して下さい。

Dockerfile (nvcr.io/nvidia/pytorch:24.01-py3使用)

FROM nvcr.io/nvidia/pytorch:24.01-py3

# 1. OpenCVに必要なシステムライブラリをインストール
RUN apt-get update && apt-get install -y --no-install-recommends \
    libgl1-mesa-glx \
    libglib2.0-0 \
    && rm -rf /var/lib/apt/lists/*

# 2. NumPy 2.x、および既存の競合する OpenCV 関連パッケージを完全に強制削除
FROM nvcr.io/nvidia/pytorch:24.01-py3

# 1. OpenCVに必要なシステムライブラリをインストール
RUN apt-get update && apt-get install -y --no-install-recommends \
    libgl1-mesa-glx \
    libglib2.0-0 \
    && rm -rf /var/lib/apt/lists/*

# 2. NumPy 2.x、および既存の競合する OpenCV 関連パッケージを完全に強制削除
RUN python -m pip uninstall -y numpy opencv-python opencv-python-headless opencv-contrib-python opencv-contrib-python-headless && \
    python -m pip install --no-cache-dir "numpy==1.26.4"

# 3. 安定したバージョンの OpenCV を先にインストール
RUN python -m pip install --no-cache-dir opencv-python-headless==4.8.1.78

# 4. Pythonを動かさずに直接ファイルを書き換える(OpenCV内部バグ対策)
RUN TYPING_FILE=$(find /usr/local/lib/python3.10/dist-packages/cv2/ -name "__init__.py" | grep typing) && \
    if [ -n "$TYPING_FILE" ]; then \
        sed -i 's/LayerId = cv2.dnn.DictValue/# LayerId = cv2.dnn.DictValue/g' "$TYPING_FILE"; \
    fi

# 5. filelock を最優先領域から一度削除し、最新版を強制インストール
RUN python -m pip uninstall -y filelock && \
    python -m pip install --no-cache-dir "filelock>=3.12.0"

# 6. 残りの JupyterLab やデータサイエンス系パッケージをインストール
RUN python -m pip install --no-cache-dir \
    jupyterlab \
    pandas \
    matplotlib \
    scikit-learn

# 7. 既存環境を壊さないように Ultralytics をインストール
RUN python -m pip install --no-cache-dir ultralytics --no-deps

6.コンテナの起動と使い方

  Ubuntuのターミナル(wsl 画面)で以下を実行します。
 MyDocker2フォルダ内に「Dockerfile」があることを確認して以下を実行します。

cd /mnt/c/Users/name/MyDocker1
# 初回のみ:イメージのビルド(数分かかります、小文字使用の事)
docker build --no-cache -t image1 .

この時permission denied(権限エラー)が発生した場合には、頭に「sudo」を付けて実行するか
以下のコマンドを一度だけ入力してグループに追加します。

sudo usermod -aG docker name
#nameのところは自分のユーザーネームを入れる

設定を反映させるために、一度WSL2のグループ情報を更新します。

newgrp docker

その他、Windows11に環境にインストールしたNvidia GTX4080Superのバージョンが合わないとここ
でエラーストップしますので最新版のドライバーを探してインストールして下さい。

7.デスクトップへの「一発起動アイコン」の作成

.batファイルを作成してWindowsのデスクトップに置いておけば「DockerDesktop」を別に起動させ
る必要はなくなります。
実際の「Docker Desktop.exe」の保存場所は、各自確認の上変更指定してください。 
Windows側で「メモ帳」を開き、以下のコードをそのまま貼り付けます。

@echo off
cls

echo Docker Desktop を起動しています...
start /b "" "C:\Users\name\AppData\Local\Programs\DockerDesktop\Docker Desktop.exe"

echo Docker の起動完了を待機中...
:LOOP
wsl docker ps >nul 2>&1
if %errorlevel% neq 0 (
    timeout /t 3 /nobreak >nul
    goto LOOP
)

echo.
echo Docker が正常に起動しました。
echo Jupyter Lab を起動しています...
echo.

::  共有メモリを 16GB に拡張するオプション (--shm-size=16g) を追加
wsl docker run -d --rm --gpus all --shm-size=16g -p 8888:8888 -v /mnt/c/Users/name/MyDocker1:/workspace -v /mnt/f/data:/workspace/data image1 jupyter lab --allow-root --no-browser --ip 0.0.0.0 --NotebookApp.token=""

:: 3. Jupyter が完全に立ち上がるまで 5秒間 待つ(NGCコンテナは少し起動が重いため5秒に延長しています)
timeout /t 5 /nobreak >nul

echo ブラウザを起動して、この画面を閉じます...
:: 4. Windowsの規定のブラウザでJupyterを開く
start http://localhost:8888/lab

:: 5. バッチ画面を終了する
exit

 「名前を付けて保存」 を選び、保存先を「デスクトップ」、ファイルの種類を「すべてのファイル (.)
 」に変更し、ファイル名を Jupyter起動.bat にして保存します。

8.運用方法

・デスクトップの Jupyter起動.bat をダブルクリックします。
・黒い画面が立ち上がり、自動でJupyterLabが起動します。
・一回.batファイルを実行すれば、containerが生成されるので、ブラウザ(Chromeなど)を開き
 http://localhost:8888/lab またはhttp://localhost:8888/treeにアクセスすれば、JupyterNotebookが
 起動します。
*上記の設定の場合、Fドライブ内のdataフォルダーもマウントされて起動します。
 マウントドライブを削除または変更する場合は、batファイル内の「-v /mnt/f/data:/data」部分を
 削除または変更する。

 最後に起動したJupyter Notebook上でGPUのCUDAが機能しているか確認します。
 以下のスクリプトをセルに貼り付けて実行します。

import torch
print("CUDA利用可能か:", torch.cuda.is_available())
if torch.cuda.is_available():
    print("使用中のGPU:", torch.cuda.get_device_name(0))

 CUDA利用可能か: True
 使用中のGPU: NVIDIA GeForce RTX 4080 SUPER

 と出ればOKです。

起動した「Jupyter Notebook」左枠の「data」フォルダを開くと実ドライブの「F:data」にアクセス
出来る