機械学習環境ってどれで作るか迷うよね~
昨今では、Google Colaboratory やAmazon SageMaker があるためPythonを用いた機械学習環境の構築に悩むこともなくなってきたと思います。しかし、実務ではコンテナや仮想環境での環境構築が必要になる場面がありますよね。
今回はDockerとVSCodeを使って機械学習環境を構築していくよ!
動作環境
ツール | バージョン |
---|---|
Docker Desktop | 4.13.0 |
VS Code | 1.73 |
Dev Containers | 0.262.3 |
Windows10 | 22H2 |
ファイル構成
今回はこのようなファイル構成になります。
Test/
├.devcontainer/
│ ├pytohn/
│ │ ├Dockerfile
│ │ └requirements.txt
│ ├devcontainer.json
│ └docker-compose.yml
└work-sample.ipynb
.devcontainerの中にはImageをビルドするためのDockerfileとポート設定などを記述したdocker-compose.yml。後はVS Codeでコンテナにリモート開発プロジェクト構成を記述すdevcontainer.jsonで構成されています。
ベースImage
今回はこちらのImageをベースにします。
私の環境の場合はWindowsなので、Power Shellで下記のコマンドを入力してイメージを取得します。
docker pull jupyter/datascience-notebook
Git Hubの方にクイックスタートが書かれているのでこちらも参考になりますよ!
コード
- devcontainer.json
- docker-compose.yml
- Dockerfile
- requirements.txt
これらのファイルを作成していきます。
devcontainer.json
“extensions”に”ms-python.python”を設定しておけば、VS Codeでコンテナにリモート接続したときに、最初からPython関係の拡張機能が追加されるため余計な手間がかからないです。
{
"name": "Python DataSience",
"dockerComposeFile": [
"docker-compose.yml"
],
"service": "jupyter",
"workspaceFolder": "/home/jovyan/work",
"extensions": [
"ms-python.python"
]
}
docker-compose.yml
特に解説はありませんが、container_nameは適宜変更してください。
version: "3.9"
services:
jupyter:
container_name: my-jupyter
image: jupyter/datascience-notebook
build: ./python
ports:
- 8888:8888
environment:
- JUPYTER_ENABLE_LAB=yes
volumes:
- ../work/:/home/jovyan/work
command: start-notebook.sh
Dockerfile
requirements.txtに記述したモジュールのインストールとpip自体のアップグレードを行います。
FROM jupyter/datascience-notebook
WORKDIR /tmp/work
COPY requirements.txt ${PWD}
RUN pip install --upgrade pip && pip install -r requirements.txt
requirements.txt
今回はプラスαとして、pandas-profilingとxgboostをインストールします。適宜必要なライブラリは
ここに追記してください。
pandas-profiling
xgboost
接続
ファイルの準備ができたら、VS CodeよりTestフォルダを開きましょう。
フォルダを開くと左下にポップが表示されます。こちらの”Reopen in Container“をクリック
しても良いですし、画面左下をクリックしてから”Reopen in Container“を選択することもできます。
少しすると無事にコンテナが起動し、勝手にリモート接続します。
試しに、notebookファイルを開いて”Hello”を出力してみましょう。
うまくいきましたね!!
おわりに
いかがだったでしょうか。比較的簡単にDockerを用いた機械学習環境が構築できたと思います。
ホストOSがWindowsだとLinux環境での構築が少々面倒ですが、これなら楽でいいですね!
しかし、慣れるまではいろいろ準備するものが多いためちょっと大変ですね。