3
4

docker-composeを使ってWindows11でTensorflowの環境構築

Last updated at Posted at 2023-12-28

概要

Windows11搭載のPCにおいて,docker composeでPython + Tensorflow の環境(コンテナ1つ)を作るときの手順です.

私の場合オリジナルのデータセットをすべて外付けSSDに入れており,ドライブをマウントする必要があるのでそれも手順に加えました.

環境

  • Windows11
  • WSL2
  • Docker Desktop 4.26.1

(追記:2023/12/29)Windows11 に Docker をインストールする方法はこの記事にまとめました.

手順

ドライブのマウント

[D:]は外付けドライブのパス.パソコンによって違うためエクスプローラーから確認.

sudo mkdir /mnt/usb1
sudo mount -t drvfs [D:] /mnt/usb1

マウントできているか確認

df -h

実行して,以下のようにD:が表示されていれば成功!

Filesystem                                Size  Used Avail Use% Mounted on
none                                      3.8G  4.0K  3.8G   1% /mnt/wsl
none                                      953G  267G  687G  28% /usr/lib/wsl/drivers
/dev/sdc                                 1007G  1.8G  954G   1% /
.
.
.
D:                                        954G   30G  925G   4% /mnt/usb1

docker-compose.ymlの作成

ディレクトリ構成.ワーキングディレクトリの直下に作成

workdir
├── src
├── Dockerfile (今回は使わなかった)
├── docker-compose.yml
└── etc.

docker-compose.ymlの中身.

docker-compose.yml
services:
  dk_ml:
    image: tensorflow/tensorflow:2.13.0rc0-gpu
    # build: .
    volumes:    # ボリュームマウント
      - /mnt/usb1/vanguard:/mnt
      - .:/app
    ports:      # portの公開
      - "6006:6006"
    deploy:     # GPUの利用
      resources:
        reservations:
          devices:
            - capabilities: [gpu]
    shm_size: "256mb"
    tty: true

portは Tensorboard 用に公開.GPUを利用できるようにするのが手間取りました.docker runなら引数に--gpus=allを加えるだけだったので,複数行使うのが少し煩雑に感じました.
また,tty: trueを入れないと,コンテナが終了してしまいました.こちらのサイトを参考にしました.
docker-compose で exit with status 0 の解決法

コンテナの作成

WSLのターミナルから以下のコマンドを実行.

cd workdir
docker compose up -d

これでコンテナが作成されたので,あとはVSCodeからAttachすれば完了!

動いているサービスを確認するコマンドは以下

docker compose ps

サービスの停止

docker compose stop

サービスの開始

docker compose start

(比較)docker runを使う場合

今まではdocker composeを使わずにdocker runでコンテナを作成してました.

docker run -it \
    -v /mnt/usb1:/mnt \
    -v $PWD:/app \
    -p 6006:6006 \
    --gpus all \
    --shm-size 256m \
    --name dk_ml \
    tensorflow/tensorflow:2.13.0rc0-gpu bash

コンテナを作成する毎に上のコマンドを打ってたので結構大変で,間違えて入力してしまうこともしばしば,,,

docker composeを使えば yml を作るだけでコマンドで楽できてありがたい.

でも yml 作るのはそれなりに手間なので,コンテナ1つだけなら結局どっちがいいのでしょうか?

参考

以下のサイトを参考にさせていただきました(参照日はいずれも2023/12/28).

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4