プロジェクトのディレクトリ構成
何かを始めるときに、最初にするべきことは開発環境の整備です。
この記事の内容を研究したときには、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で開いて…と開発環境の整備が面倒でしたが、このプラグインで全て解決できました。