[機械学習・進化計算による株式取引最適化] No.01-03 Dockerコンテナの作成

この連載でのプログラム作成は基本的にDockerコンテナを利用したものとなります.
この章ではDockerおよびDocker-Composeを利用した初歩的なコンテナの作成および実行について述べます.

※現在ではdev-containerによる開発を推奨しています。

ディレクトリ・ファイル構造

この本では,任意のプロジェクト(projectA)を作りたいときには,次のようなディレクトリ・ファイル構成をとります.

work_share
├projectA
  ├Dockerfile
  ├docker-compose.yml
  └src
    └空(programなど)

projectAがDockerコンテナ内ではルートディレクトリになるように配置します.また,Dockerファイルに関連しないファイル・ディレクトリは,すべてscrを親ディレクトリとなるように配置します.

Dockerfile

イメージはpytorchを元に生成します.また,機械学習に使いそうなライブラリも入れておきます.

FROM nvcr.io/nvidia/pytorch:22.04-py3
USER root

RUN apt-get update
RUN apt-get -y install locales && \
    localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm

ENV TZ=Asia/Tokyo
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

ENV PYTHONPATH "/root/src:$PYTHONPATH"

RUN apt-get update

RUN pip install --upgrade pip
RUN pip install --upgrade setuptools

RUN python -m pip install requests
RUN python -m pip install numpy
RUN python -m pip install pandas
RUN python -m pip install matplotlib
RUN python -m pip install scikit-learn
RUN python -m pip install optuna

RUN python -m pip install seaborn

RUN apt-get install -y gconf-service libasound2 libatk1.0-0 libatk-bridge2.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
RUN python -m pip install japanize-matplotlib
RUN python -m pip install lightgbm
RUN python -m pip install notebook
RUN python -m pip install tqdm

RUN python -m pip install pandas_datareader
RUN python -m pip install yfinance
RUN python -m pip install xlrd


ARG USERNAME=user
ARG GROUPNAME=user
ARG UID=1000
ARG GID=1000
ARG PASSWORD=user
RUN groupadd -g $GID $GROUPNAME && \
    useradd -m -s /bin/bash -u $UID -g $GID -G sudo $USERNAME && \
    echo $USERNAME:$PASSWORD | chpasswd

USER $USERNAME

docker-compose.yml

version: '3'
services:
  stock_predict_python:
    restart: always
    build: .
    container_name: 'python_stock_predict'
    working_dir: '/work/src'
    tty: true
    volumes:
      - ./src:/work/src
    ports:
      - 8888:8888
    ulimits:
      memlock: -1
      stack: -1
    shm_size: '10gb'
    deploy:
      resources:
          reservations:
              devices:
                - capabilities: [gpu]

コンテナ作成

プロジェクトのディレクトリ中に,「Dockerfile」「docker-compose.yml」「src」を作ります.「src」は空のディレクトリで構いません.
作成したプロジェクトのディレクトリへ端末を移動します.

comlew@comlewpc:~$ pwd
/home/comlew
comlew@comlewpc:~$ cd work_share/test_project/
comlew@comlewpc:~/work_share/test_project$ ls
docker-compose.yml  Dockerfile
comlew@comlewpc:~/work_share/test_project$ pwd
/home/comlew/work_share/test_project

イメージをビルドしてコンテナを作成します.イメージ元がpytorchなので数分かかると思います.

docker compose up -d --build

Runnignと最後に表示されればOKです.

[+] Running 2/2
 ⠿ Network test_project_default    Created                                                                                           0.1s
 ⠿ Container python_stock_predict  Started                                                                                           0.7s

作成したコンテナには以下のコマンドで入れます.抜けるときは端末同様「exit」で抜けます.

docker compose exec stock_predict_python bash

また,同時にコンテナを利用しない場合には,コンテナを終了させておくことをお勧めします.今回の例だと,ポート番号が他のプロジェクトのコンテナと同じ場合に,同時にコンテナを起動できないためです.

docker compose down

一度,ビルドしてコンテナを生成した後はビルドしなくてもよいです.

docker compose up -d

jupyter notebookの利用

起動したコンテナ内で以下のコマンドを実行することでnotebookを起動できます.「Ctrl+C」でnotebookを終了できます.

jupyter notebook --port=8888 --ip=0.0.0.0 --allow-root --NotebookApp.token='test'

ブラウザから「計算機のIPアドレス:8888」と入力すればjypyter notebookの認証画面に飛べます.またトークンは上のコマンドの例だとtestです.

トークンを入力すれば以下のようにnotebookの画面が開けます.実験結果の解析等はここで行うのが楽です.

タイトルとURLをコピーしました