1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

devcontainer + Dockerfile を使用したPythonの機械学習環境構築メモ

Posted at

概要

仕事やコンペなどで機械学習モデル(特にPyTorch)を扱う際、簡易的にGPUを活用できる開発環境を構築したいと思うことが多くなってきました。

今回は、devcontainer と Dockerfile を組み合わせて、CUDA環境下で汎用的に使用できるPython機械学習環境を構築するテンプレートを紹介します。
環境構築における設定ファイルと、工夫についても書き残しておきます。

なぜ devcontainer + Dockerfile を使うのか?

VSCode の Remote Containers(devcontainer)機能を使えば、以下のようなメリットがあります。

  • 開発環境の再現性が高い

  • ホスト環境を汚さない

  • 複数のプロジェクト間で環境を分離できる

  • GPU対応のDockerイメージを使えば、CUDAやcuDNNなどの依存関係の面倒なインストールを避けつつ、GPUを活用した開発ができる

設定ファイル

├── .devcontainer
│   ├── devcontainer.json
│   └── Dockerfile

これらのファイルについて解説していきます。

使用するDockerfile

以下が、今回使用する Dockerfile です。ベースは nvidia/cuda:12.6.2-cudnn-devel-ubuntu24.04 を使用しています。

FROM nvidia/cuda:12.6.2-cudnn-devel-ubuntu24.04

# ロケール設定(日本語表示で文字化けしないように)
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8

# 作業ディレクトリの作成
WORKDIR /workspace

# 必要なパッケージのインストール
RUN apt-get update && apt-get install -y \
    python3 python3-pip python3-venv python3-dev \
    locales \
    git curl vim unzip \
 && locale-gen en_US.UTF-8 \
 && update-locale LANG=en_US.UTF-8 \
 && rm -rf /var/lib/apt/lists/*

# 仮想環境の作成
RUN python3 -m venv /opt/venv

# Pythonパッケージのインストール(PyTorch含む)
RUN /opt/venv/bin/pip install --upgrade pip && \
    /opt/venv/bin/pip install torch==2.7.1+cu126 --index-url https://download.pytorch.org/whl/cu126 && \
    /opt/venv/bin/pip install \
        numpy \
        pandas \
        matplotlib \
        scikit-learn \
        jupyterlab \
        seaborn \
        tqdm \
        ipywidgets \
        ipykernel

# Jupyter用カーネルの登録
RUN /opt/venv/bin/python -m ipykernel install --name xxx-dev --display-name "Python (xxx-dev)" --sys-prefix

# 起動時に仮想環境を有効化
RUN echo "source /opt/venv/bin/activate" >> /root/.bashrc

# コンテナ起動時のデフォルトコマンド
CMD ["bash"]

Dockerfile 解説(CUDA + Python仮想環境)

ベースイメージの指定

FROM nvidia/cuda:12.6.2-cudnn-devel-ubuntu24.04

NVIDIAが提供しているCUDA対応の公式イメージです。cudnn-develタグを使うことで、PyTorchやTensorFlowで必要になるcuDNNライブラリも含まれます。

CUDAバージョンはGPUやドライバに依存するため、環境に合わせて柔軟にベースイメージを選択します。
例えば、RTX50xx番台のGPUを使用している場合、CUDAのバージョンが12.8以上でないとPytorchが動作しなかったりします。

ロケール設定

ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8

こちらは必須の設定ではありませんが、ローカルのディレクトリをマウントした際に、ディレクトリやファイル名のトラブルを防ぐために設定してます。
日本語ファイル名やJupyter Notebookでの文字化けを防ぐためにUTF-8ロケールを指定します。

作業ディレクトリの設定

WORKDIR /workspace

コンテナ内での作業場所。VSCodeからもここが開かれるようになります。

必要なパッケージのインストール

RUN apt-get update && apt-get install -y \
    python3 python3-pip python3-venv python3-dev \
    locales \
    git curl vim unzip \
 && locale-gen en_US.UTF-8 \
 && update-locale LANG=en_US.UTF-8 \
 && rm -rf /var/lib/apt/lists/*
  • python3, pip, venv, dev: Python関連ツール
  • locales: ロケール変更のため
  • git, curl, vim, unzip: 開発に便利なツール

rm -rf /var/lib/apt/lists/* でイメージサイズを削減します。

Python仮想環境の作成

RUN python3 -m venv /opt/venv

RUN /opt/venv/bin/pip install --upgrade pip && \
    /opt/venv/bin/pip install torch==2.7.1+cu126 --index-url https://download.pytorch.org/whl/cu126 && \
    /opt/venv/bin/pip install \
        numpy \
        pandas \
        matplotlib \
        scikit-learn \
        jupyterlab \
        seaborn \
        tqdm \
        ipywidgets \
        ipykernel

Python3.13では、環境に直にpipインストールしようとすると警告が出てしまいました。
この対応が正しいのかはわかりませんが、venv環境を作成して、そこにpipインストールを行います。(調べてみたら、OSパッケージ管理システムと衝突しないように?Dockerコンテナは、ホストOSと分離された環境なので必要ないかもしれませんが、念のためです)

  • CUDA のバージョンに対応した PyTorch (torch==2.7.1+cu126) を明示的にインストール
  • 機械学習・データ分析に必要な主要ライブラリをインストール(Jupyter対応も含む)

Jupyter Kernel の登録

RUN /opt/venv/bin/python -m ipykernel install --name xxx-dev --display-name "Python (xxx-dev)" 

Jupyter Labで仮想環境を認識できるようにカーネルを追加します。VSCodeやJupyter Labで「Python (xxx-dev)」として表示されます。

起動時に仮想環境を自動有効化 / デフォルトの起動コマンドを bash に設定

RUN echo "source /opt/venv/bin/activate" >> /root/.bashrc

CMD ["bash"]
  • コンテナ内で bash を開いたとき、自動的に仮想環境が有効化
  • コンテナ起動時にシェルで操作可能にする

その他、必要に応じて行う設定

プロキシ環境での設定(社内・学内ネットワークで環境構築する場合など)

企業や大学などのネットワークでは、HTTP/HTTPS プロキシの設定が必要な場合があります。以下のような環境変数を Dockerfile の最上部に追加することで対応可能。

# プロキシ環境変数
ENV http_proxy=http://address:port/
ENV https_proxy=http://address:port/
ENV no_proxy=localhost,127.0.0.1

もし、github等を使用している場合は、http://address:portをそのまま書かないようにし、ビルド時に .env ファイルなどで管理するのが理想。

requirements.txt を使ってライブラリを一括インストール

現在は最低限のライブラリしか入れていない状態です。
開発を行う上で必要となるライブラリを適宜入れていき、他の人と共有する段階で requirements.txt にインストール処理を一元化すると便利です。

COPY requirements.txt /workspace/requirements.txt
RUN /opt/venv/bin/pip install -r /workspace/requirements.txt

devcontainer.json の設定

VSCodeでこのDocker環境を使うには .devcontainer/devcontainer.json を以下のように記述します。

{
  "name": "xxx-dev",
  "build": {
    "dockerfile": "Dockerfile",
    "context": ".."
  },
  "workspaceFolder": "/workspace",
  "mounts": [
    "source=${localWorkspaceFolder},target=/workspace,type=bind",
    "source=/mnt/c/Users/xxx/,target=/data,type=bind"
  ],
  "runArgs": ["--gpus", "all"],
  "customizations": {
    "vscode": {
      "settings": {
        "terminal.integrated.defaultProfile.linux": "bash",
        "python.defaultInterpreterPath": "/opt/venv/bin/python"
      }
    }
  },
  "remoteUser": "root"
}
項目名 説明
build Dockerfile を指定します。context は親ディレクトリ。
workspaceFolder /workspace をデフォルト作業フォルダに設定。
mounts ホストPCのフォルダをマウント。データの永続化に便利。
runArgs --gpus all でGPUを利用。
customizations.vscode.settings Pythonの仮想環境パスを指定。VSCodeの補完やLinterが仮想環境を認識します。

使用方法

プロジェクトルートをVSCodeで開き、Remote-Containers: Reopen in Container を選択すると、環境のビルドが行われます。

おわりに

自分の環境をなるべくクリーンに保ちながら、複数のプロジェクトへ対応するために、devcontainer + Dockerfile を使用した環境構築を行いました。特に研究や開発、コンペを並行して進めたい方におすすめです。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?