投稿者: sassy

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

    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」をクリックします。

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


     作業用のフォルダ(例: C:\YOLO_Develop など、どこでも構いません)を作成します。
     今回は「C:\Users\name\MyDocker2」を作成し、そのMyDocker2フォルダー内にテキストエディタ
     ーで拡張子無しで以下の様なDockerfileとdocker-compose.ymlを配置します。
     いずれも保存する時に文字コード->UTF-8N 改行コード->LFにして下さい。
     
     
     Windows 11 + WSL2 (Ubuntu 24.04) + RTX 4080 Super のパワーを最大限に活かし、PyTorch
     や Ultralytics(YOLO)が動く環境を構築します。
     nvcr.io/nvidia/pytorchイメージはNVIDIAがPyTorchを限界まで高速化・最適化してあるのですが
     そのまま動かそうとしてもエラーが出まくるのでインストールに工夫が必要になります。
     こちらの方法は素直にnvidia/cuda:12.6.0-runtime-ubuntu24.04を使う方法になります。
     Pythonは 3.12.3です。
     この場合、PyTorchや必要なライブラリを自分で一からビルド(pipインストール)する必要が
     あります。(構築1の方法もあります)
     フォルダ名とポート番号を変えているので2方式両方入れて両方を動かすことも出来ます。
     その場合手順1~5は同じ作業なので飛ばして手順5から進めて下さい。

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

    Dockerfile (nvidia/cuda:12.6.0-runtime-ubuntu24.04使用)

    # Ubuntu 24.04 ベースの CUDA 12.x イメージを使用
    FROM nvidia/cuda:12.6.0-runtime-ubuntu24.04
    
    # 環境変数の設定(対話型プロンプトの無効化)
    ENV DEBIAN_FRONTEND=noninteractive
    
    # 必要なシステムパッケージのインストール
    RUN apt-get update && apt-get install -y \
        python3-pip \
        python3-dev \
        git \
        ffmpeg \
        libsm6 \
        libxext6 \
        curl \
        && rm -rf /var/lib/apt/lists/*
    
    # python コマンドのシンボリックリンク作成
    RUN ln -s /usr/bin/python3 /usr/bin/python
    
    # Python パッケージのインストール(Ultralytics, Jupyter, その他必要なもの)
    RUN pip install --no-cache-dir --break-system-packages \
        jupyterlab \
        notebook \
        ultralytics \
        numpy \
        pandas \
        matplotlib \
        opencv-python
    
    # コンテナ内の作業ディレクトリを設定
    WORKDIR /workspace
    
    # Jupyter Notebook の起動(トークンやパスワードを省略して即起動する開発用設定)
    CMD ["jupyter", "notebook", "--ip=0.0.0.0", "--port=8888", "--no-browser", "--allow-root", "--NotebookApp.token=''", "--NotebookApp.password=''"]
    

    docker-compose.yml

    name: mydocker2-project
    
    services:
      jupyter_gpu2:
        build: .
        image: image2:latest
        restart: always
        ports:
          - "8889:8888"
        volumes:
          # 1. 先にベースとなる作業スペースをマウント
          - .:/workspace
          # 2. 次に、その中の特定のサブフォルダにFドライブをマウント(後勝ちで上書きされないようにする)
          - /mnt/f/data:/workspace/data
        deploy:
          resources:
            reservations:
              devices:
                - driver: nvidia
                  count: all
                  capabilities: [gpu]
        shm_size: '16gb'
    
    

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

      Ubuntuのターミナル(wsl 画面)で以下を実行します

    cd /mnt/c/Users/name/MyDocker2
    # 初回のみ:イメージのビルド(数10分かかります)
    sudo docker compose build

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

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

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

    newgrp docker
    

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

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

    「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.
    
    :: MyDocker2のフォルダに移動
    cd /d C:\Users\name\MyDocker2
    
    :: 一度古いコンテナを完全に終了・削除する
    wsl docker compose down
    
    :: コンテナを再生成して起動する
    wsl docker compose up -d
    
    :: 2. Jupyter が完全に立ち上がるまで 5秒間 待つ(down後の起動なので少し長めに設定)
    timeout /t 5 /nobreak >nul
    
    echo ブラウザを起動して、この画面を閉じます...
    :: 3. Composeで設定したポート番号(8889)でブラウザを開く
    start http://localhost:8889/lab
    
    :: 4. バッチ画面を終了する
    

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

    8.運用方法

    ・デスクトップの Jupyter起動.bat をダブルクリックします。
    ・黒い画面が立ち上がり、自動でJupyterLabが起動します。
    ・またブラウザ(Chromeなど)を開き、http://localhost:8889/lab またはhttp://localhost:8889/tree
     にアクセスすれば、Jupyter Notebookが起動します。
    *上記の設定の場合、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」にアクセス
    出来る