[儲からない競馬予想AI] Section 00-01 : 開発コンテナ

プロジェクトのディレクトリ構成

何かを始めるときに、最初にするべきことは開発環境の整備です。

この記事の内容を研究したときには、Dev Containerは利用していませんでしたが、この記事を書くために再実験しているときは、Dev Containerを利用しています。

ですから、この連載記事で書かれるプロジェクトのディレクトリは以下のようになっています

project
├── .devcontainer
|    ├── Dockerfile
|    ├── devcontainer.json
|    └── docker-compose.yml
├── keiba_sourece_data
├── formatted_source_data
└── "programs"
  • .devcontainer
    • VS CodeのDev Containerプラグインで認識するディレクトリ。
    • Dev Containerを利用していない人は、中身のDockerfileやdocker-compose.ymlを利用すればいいです
    • Dockerを利用していない人はDockerfileを見て、必要なpythonライブラリを入れてください
  • keiba_source_data
    • 競馬のホームページから取ってきた生データを入れておくディレクトリ
    • 数GB程度
  • formatted_source_data
    • 生データがpandasなどで扱いやすい行列形式ではないので、それに整頓したデータを置く場所。
  • “programs”
    • 基本的には、ここにプログラムを置いていく。必要に応じてディレクトリで覆ってモジュール化します

.devcontainer

以下に.devcontainerの中身のファイルについて記します。

Dockerfile

ベースはpytorch:22.04。
各章で使うライブラリが変化したら、その都度更新します。

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

ARG USERNAME=vscode
ARG USER_UID=1000
ARG USER_GID=$USER_UID

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

RUN apt-get update \
&& groupadd --gid $USER_GID $USERNAME \
&& useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \
&& apt-get install -y sudo \
&& echo $USERNAME ALL=(root) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
&& chmod 0440 /etc/sudoers.d/$USERNAME \
&& apt-get -y install locales \
&& localedef -f UTF-8 -i ja_JP ja_JP.UTF-8

RUN apt-get -y install git

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 bs4
RUN python -m pip install scikit-learn
RUN python -m pip install optuna
RUN python -m pip install lightgbm
RUN python -m pip install tqdm

RUN python -m pip install timeout-decorator
RUN python -m pip install requests-html

RUN python -m pip install seaborn
RUN python -m pip install pyarrow
RUN python -m pip install deap
RUN python -m pip install numba
RUN python -m pip install selenium
RUN python -m pip install schedule

devcontainer.json

devcontainer.jsonは特に言うことないです。各自、自分が使うVS Codeのプラグイン名を"extensions":で記述してください。

{
    "name": "python-keirin_predict-docker",
    "service": "keirin_predict",
    "dockerComposeFile": "docker-compose.yml",
    "remoteUser": "vscode",
    "workspaceFolder": "/work",
    "customizations": {
      "vscode": {
        "extensions": [
          "ms-python.python",
          "ms-toolsai.jupyter"
        ]
      }
    }
}

docker-compose.yml

docker-compose.ymlも変なことはしてません。ポートは8888を通信ポートに指定しました。jypter-notebookとか使うときにこのポートを使います。任意のポートを指定すればいいと思います。
gpuが使えるようにdevicesでgpuを指定しました。

services:
  keirin_predict:
    container_name: 'python-keirin_predict-container'
    hostname: 'python-keirin_predict-container'
    build: .
    restart: always
    working_dir: '/work' 
    tty: true
    volumes:
      - type: bind
        source: ..
        target: /work
    ports:
      - 8888:8888
    ulimits:
        memlock: -1
        stack: -1
    deploy:
        resources:
          reservations:
              devices:
                - capabilities: [gpu]
  chrome:
    image: seleniarm/standalone-chromium
    shm_size: 2gb
    ports:
      - "4444:4444"
      - "7900:7900"

あとは、VS CodeのDev Containerプラグインを入れて、コンテナーで再度開くを押せば、自動でコンテナ内で開発ができる。すごい。

しかもRemote-SSHプラグインを入れていると、SSH接続上でDev Containerを使える。つまり、リモートのコンテナをVS Codeで開ける。すごい。

この研究をやってたときは、SSHで繋いで、リモート上でコンテナをビルドして、ログインして、共有ディレクトリをSambaで作って、Windowsで開いて…と開発環境の整備が面倒でしたが、このプラグインで全て解決できました。

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