誰向けの記事?

    • WSL2 + DockerをでJupterLabを用いたPythonの開発環境を作りたい。

 

    • WSL2って何?Dockerって何?状態なのでそこら辺の入門をしたい。

 

    WSL2 + DockerからGPUを使った開発環境(PyTorch)を作りたい。

筆者自身が全てに当てはまっていたので、やったことのメモ的な側面もあります。

WSL2 + Dockerの環境を作る

INTEL VIRTUALIZATION TECHNOLOGYを有効化する

BIOSを立ち上げて、INTEL VIRTULIZATION TECHNOLOGYを有効化します。
これをサボったことにより後でエラーが出て調べる羽目になりました。必ず確認しておくと良いでしょう!

WSL2インストール

1. インストール

PowerShellで以下のコマンドを打つだけ。簡単。

wsl --install

「Windowsの機能の有効化または無効化」の設定が必要。自動で設定されるらしいという情報もあったが、結局手動で以下をチェックした。

    • Linux用Windowsサブシステム(wsl2インストール前は無かった気がする)

 

    • Windowsハイパーバイザープラットフォーム

 

    仮想マシンプラットフォーム

2. 利用可能なディストリビューションの一覧の確認

wsl -l -o

ubuntu 20.04を使うことにする。。

3. Ubuntu20.04で環境構築

wsl --install -d Ubuntu-20.04

これでUbuntuのターミナルがスタートメニューに追加される。
Ubuntu(WSL)に入りたければ、スタートメニューから叩けば入れる。この時点でVirtual Boxより圧倒的に使いやすくて感動。

とりあえずでaptのアップデートをしておく@WSL2

sudo apt update
sudo apt upgrade

Docker Desktopのインストール

公式からインストーラー入手してインストール

ライセンスが気になる場合は「Docker Engine」をWSL2に入れる。なお、この先の手順には互換性があるはず。

開発用コンテナのイメージをビルドする

1. Dockerfileの作成

WSL2上の/home/user/Dockerfile/Python-BaseにDockerfileを作成する。(パスは好みでOK)

FROM python:3.9-slim-buster

RUN pip install --upgrade --no-cache-dir pip && \
  pip install --upgrade --no-cache-dir \
  jupyterlab

CMD ["jupyter", "lab", "--ip=0.0.0.0", "--allow-root", "--LabApp.token=''"]

これは

    • Docker Hub上にあるpython:3.9-slim-busterというイメージをベースにして

pip installで必要なモジュールをインストールして
jupyter labを立ち上げる

ということが書かれている。環境の構築手順が明示されているので、誰かに環境を渡すときに便利。

2. コンテナをビルドする。

cd /home/user/Dockerfile/Python-Base
docker image build --tag jupyter:test .

dockerコマンドの意味は以下

コマンド意味docker image buildイメージをビルドするよ--tag jupyter:testイメージ名 jupyterが名前, testがバージョン名 だよ.Dockerfileがあるディレクトリはここだよ

コンテナを起動し、ホストPCのブラウザからjupyterに接続する

以下に留意してコンテナを起動する。

    • jupyterはwebサーバーが立ち上がるので、ホストPCからコンテナ上のwebサーバーにアクセスする必要がある。

 

    開発したソースコードはホストPCとコンテナ双方から見える位置に置いておきたい。

1. WSL2上に開発したソースコードを入れるディレクトリを作成する。

/home/usr/test/srcとする。
ちなみに、WSL2上のディレクトリはWindows上の\\wsl$という場所に入っている。ネットワークドライブに割り当てておくと便利!

2. 以下のコマンドでコンテナを起動する。

docker container run \
--name jupyter \
--rm \
--detach \
--publish 18888:8888 \
--volume /home/usr/test/src:/mnt/host_src \
jupyter:test
コマンド意味docker container runコンテナを起動するよ--name jupyterコンテナの名前はjupyterだよ--rmstopと同時にコンテナは消去されるよ。--detachデタッチするよ
(じゃないと、WSLのターミナルが固まる)--publish 18888:8888ホスト側の18888ポートとコンテナ側の8888ポートを接続するよ。
(jupyterはデフォルトで8888ポートを使う)--volume /home/usr/test/src:/mnt/host_srcホスト側の/home/usr/test/src
コンテナ側の/mnt/host_srcにマウントするよjupyter:test起動するイメージはjupyter:testだよ

3. ホストPC(Windows)のブラウザでアクセスする。

localhost:18888にアクセスすると、JupyterLabが開く。ディレクトリ構成をみるとコンテナの世界だということはわかるはず。

4. いったんコンテナを止める

docker container stop jupyter

別にこのままでも良いのですが、docker-composeを使ってお手軽に実行したいので。

イメージビルド~コンテナ起動をdocker-composeで簡略化する。

1. 以下のファイルを作る。Dockerfileと同じ場所でOK。

version: '3.8'

services:
  jupyter:
     container_name: jupyter
     build:
        context: .
     ports:
        - '18888:8888'
     volumes:
        - type: bind
          source: /home/user/test/src
          target: /mnt/host_src
キー意味version公式サイトからDocker-Engineに対応したバージョンを書くservices各サービスごとに定義していく。複数のコンテナを立ち上げることも可能jupyterサービスの名前container_nameコンテナとしての名前buildビルドの情報。contextdocker image buildのときの最後の”.portsホスト側18888とコンテナ側8888を繋げるvolumesホスト側のsourceをコンテナ側のtargetにマウント(bind)する

2. docker compose upする

docker-compose.ymlがある場所で以下のコマンドを打つだけ。

docker compose up

初回はdocker image build ⇒ docker container run相当の動きをします。次からはdocker container runから始まります。長いコマンドが簡単になって嬉しいです。
docker-composeは複数のコンテナをまとめてbuildしたりrunしたり出来るところがメリットです。実は必要なかったのですが、入門ということでやってみました。

コンテナを停止させるときはdocker-compose.ymlがある場所で

docker compose down

GPUを使った開発環境の構築

更にホストPC上のGPUリソースにDockerからアクセスできるようにカスタムをしていく。

PyTorch使う。
ホストPCはWin11

ドライバのインストール

nVIDEA DEVELOPPERからGPUにあったドライバーを選ぶ。SDインストール済みだと思ってもやっておきましょう。Download Typeは”SD”にしました。
インストール後、wslやDockerDesktop(DockerEngine)を再起動(起動していたら)

WSL2にCUDA Toolkit を入れる。

nVIDEA CUDA Toolkitを手順通りに進めていく。コマンドを写経すればOK。WSL2の環境は作成済みなので、”3. CUDA Support for WSL 2″からやれば良いはず。

動作確認コマンド。WSL上からGPUが認識されてればOKです。

/usr/local/cuda/bin/nvcc --version

Dockerfileにpytorchのpipを追加

PyTorch公式でpipのコマンドを教えてくれる。Windowsじゃなくて、Linux版のコマンドを参照して、Dockerfileを以下のように変更する。

FROM python:3.9-slim-buster

RUN pip install --upgrade --no-cache-dir pip && \
  pip install --upgrade --no-cache-dir \
  jupyterlab \
  torch \
  torchvision \
  torchaudio

CMD ["jupyter", "lab", "--ip=0.0.0.0", "--allow-root", "--LabApp.token=''"]

docker-compose.ymlにgpuの割り当てを記載する

deploy以下が追記した部分。(サービス名やコンテナ名も変更してる)

version: '3.8'

services:
  pytorch:
    container_name: pytorch

    build:
      context: .

    ports:
      - '18888:8888'
    volumes:
      - type: bind
        source: /home/user/test/src
        target: /mnt/host_src

    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

コンテナを立ち上げて動作確認する。

1. コンテナの立ち上げ(再掲)

docker compose up

2. コンテナのjupyterに接続する。(再掲)

ホストPC(Windows)のブラウザでlocalhost:18888にアクセス。

3. 適当なnotebookを作成して以下を実行

import torch
torch.cuda.is_avalilable()

True

これでDocker上でPyTorchをGPUで動かす準備ができた!

参考リンク

    • 実践 Docker – ソフトウェアエンジニアの「Docker よくわからない」を終わりにする本

 

    • Windowでデータ分析環境を構築する方法

 

    • Windows11 + WSL2 + Docker DesktopでGPU環境を作る

 

    • PyTorch公式

 

    nVIDEA CUDA Toolkit
广告
将在 10 秒后关闭
bannerAds