Skip to content

takumi0616/docker_miniconda

Repository files navigation

Docker + Conda によるクロスプラットフォーム機械学習開発環境

License: MIT

NVIDIA GPU と CPU の両方に対応した、ポータブルな機械学習・データ分析用の開発環境です。Docker と Conda の力を最大限に活用し、OS(Windows, Mac, Linux)や CPU アーキテクチャ(Intel x86_64, Apple Silicon ARM64)を問わず、誰でも・どこでも・いつでも 同じ環境を数分で構築できます。


✨ 主な特徴

  • 完全なクロスプラットフォーム対応

    • Windows, Linux (Intel/AMD), Mac (Intel/Apple Silicon) のすべてで動作します。
    • ホストマシンの環境を自動で判別し、最適な設定でコンテナを構築します。
  • 簡単な CPU/GPU 環境の切り替え

    • NVIDIA GPU がなくても、CPU 環境で全ての機能が動作します。
    • GPU を使いたい時は、CUDA バージョンを指定するだけで、自動的に GPU 対応環境に切り替わります。
  • 動的な CUDA バージョン管理

    • ビルド時にPYTORCH_CUDA_VERSION環境変数を指定することで、PyTorch の CUDA バージョンを動的に設定できます。
    • バージョン不整合のリスクを最小限に抑えた、柔軟な環境構築が可能です。
  • 宣言的な Conda 環境管理

    • environments ディレクトリに YAML ファイルを置くだけで、複数の Python 仮想環境を簡単に管理できます。
    • Dockerfileを直接編集することなく、ライブラリの追加や新しい環境の作成が可能です。
  • 高い再現性とポータビリティ

    • 「私の PC では動いたのに…」はもう過去の話。チームメンバー全員が全く同じ環境で作業でき、開発から本番環境への移行もスムーズです。
  • VSCode Remote に完全対応

    • VSCode の Remote - Containers 拡張機能を使えば、ローカル環境と同じ感覚でコンテナ内のファイルを直接編集・デバッグできます。

🤔 こんな人におすすめ

  • チームで開発環境を完全に統一したい方
  • PC を買い替えても、数コマンドで以前の環境を再現したい方
  • "pip/conda の依存関係地獄"から解放されたい方
  • GPU を使った開発と、CPU のみでのテストをシームレスに切り替えたい方
  • 機械学習の学習や研究に集中したいインフラ初心者の方

🔧 事前準備 (System Requirements)

この環境を利用するには、お使いの PC に以下のソフトウェアがインストールされている必要があります。

  1. Git: ソースコードのクローンに使用します。
  2. Docker Desktop: コンテナを動かすための必須ツールです。
  3. (NVIDIA GPU をお使いの場合のみ)

📝 Note: Linux 環境で Docker コマンド実行時のsudoを省略したい場合は、こちらの公式ガイドに従って設定を行ってください。


🚀 クイックスタート (Quick Start)

1. リポジトリをクローン

まず、このプロジェクトをお手元にダウンロードします。

git clone https://github.com/takumi0616/docker_miniconda.git
cd docker_miniconda

2. 環境のビルドと起動

実行したい環境に応じて、以下のコマンドを選択してください。

A) CPU 環境の場合 (Mac, GPU なし PC)

Mac ユーザーや、NVIDIA GPU を搭載していない PC の場合は、こちらのコマンドを実行します。

# Dockerイメージをビルド
sudo docker compose build

# コンテナをバックグラウンドで起動
sudo docker compose up -d

B) GPU 環境の場合 (NVIDIA GPU 搭載 PC)

NVIDIA GPU を利用する場合、2 つのステップで環境を構築します。

ステップ 1: ベースイメージの選択(初回のみ)

まず、compose.gpu.yml ファイルを開き、お使いの環境とライブラリに最適な BASE_IMAGE を 1 つだけ選択します(コメントを外します)。PyTorch が公式サポートする 12.1 または 11.8 が推奨です。

# compose.gpu.yml
  args:
    # 1. 使用したいベースイメージを選択 (この行を編集)
    - BASE_IMAGE=nvidia/cuda:12.1.1-cudnn8-devel-ubuntu22.04
    # - BASE_IMAGE=nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04

ステップ 2: ビルドと起動

次に、ターミナルで以下のコマンドを実行します。PYTORCH_CUDA_VERSION に、ステップ 1 で選んだ CUDA バージョン(例: 12.1)を指定してください。

# 環境変数を指定してGPU用のイメージをビルド
# (PYTORCH_CUDA_VERSIONは compose.gpu.yml で選んだバージョンに合わせる)
PYTORCH_CUDA_VERSION=12.1 sudo docker compose -f compose.yml -f compose.gpu.yml build

# GPUを有効にしてコンテナをバックグラウンドで起動
sudo docker compose -f compose.yml -f compose.gpu.yml up -d

この手順により、PYTORCH_CUDA_VERSION 変数が全ての GPU 用 Conda 環境に適用され、バージョン不整合のリスクなく環境を構築できます。

☕ Note: 初回のビルドは、ベースイメージや多数のライブラリをダウンロードするため、ネットワーク環境によっては 10 分以上かかる場合があります。2 回目以降はキャッシュが利用されるため、高速に完了します。

3. コンテナにアクセス

起動したコンテナの中に入り、開発作業を開始します。

sudo docker compose exec app bash

成功すると、シェルのプロンプトが以下のように変わり、デフォルトのpytorch_env環境が自動で有効化された状態になります。

(pytorch_env) root@<コンテナID>:/app#

🎮 コンテナ内での操作

動作確認

環境が正しく構築されているか、サンプルスクリプトを実行して確認してみましょう。

  • CPU 環境で実行する場合:

    (pytorch_env) root@```:/app# python src/check_cpu.py

    実行結果の例:

    Starting CPU environment check```
    ============================================================
    ===== SYSTEM & CPU INFORMATION CHECKER
    ============================================================
    Python Version: 3.12.3 | packaged by conda-forge | (main, May 10 2024, 18:03:52) [GCC 12.3.0]
    OS: Linux 6.6.31-linuxkit
    Architecture: aarch64
    

    PyTorch CPU check: PASSED TensorFlow CPU check: PASSED

    
    
  • GPU 環境で実行する場合:

    (pytorch_env) root@```:/app# python src/check_gpu_torch.py

    実行結果の例:

    PyTorch version: 2.4.1
    CUDA version: 12.1
    cuDNN version: 8907
    Number of GPUs available: 1
    Device name: NVIDIA GeForce RTX 4090
    

Conda 環境の操作

  • 他の環境への切り替え:

    # acs_envに切り替える(GPU環境の場合)
    (pytorch_env) root@```:/app# conda activate acs_env
    (acs_env) root@```:/app#
    
    # ベースの環境に戻る
    (acs_env) root@```:/app# conda deactivate
    root@```:/app#
  • 利用可能な環境の一覧表示:

    (pytorch_env) root@```:/app# conda env list

⚙️ 環境のカスタマイズ

このプロジェクトの真価は、その高いカスタマイズ性にあります。

新しい Conda 環境を追加する

Dockerfileを編集する必要は一切ありません。

  1. YAML ファイルを作成: environmentsディレクトリに、<新しい環境名>.ymlというファイルを作成します。

    例: my_new_env.yml

    name: my_new_env
    channels:
      - conda-forge
    dependencies:
      - python=3.12
      - pandas
      - jupyterlab
  2. イメージを再ビルド: CPU/GPU に応じたbuildコマンドを実行するだけです。

    # CPU環境の場合
    sudo docker compose up -d --build
    
    # GPU環境の場合(CUDAバージョンを指定)
    PYTORCH_CUDA_VERSION=12.4 sudo docker compose -f compose.yml -f compose.gpu.yml up -d --build

    ビルド完了後、コンテナに入ればconda activate my_new_envで新しい環境が使えます。

既存の環境にパッケージを追加する

  1. YAML ファイルを編集:

    • CPU/共通パッケージ: environments内の対応する YAML ファイルにライブラリ名を追加します。
    • GPU 専用パッケージ: environments_gpu内の対応する YAML ファイルに追加します。
  2. イメージを再ビルド: 上記と同様にbuildコマンドを実行します。conda env updateが差分だけを賢く更新してくれるため、効率的にパッケージが追加されます。

⚠️ クロスプラットフォーム対応のヒント: > .ymlファイルでライブラリのバージョンを厳密に固定(例: pytorch=2.2.2)すると、他の CPU アーキテクチャ(Intel vs Apple Silicon)でパッケージが見つからず、ビルドに失敗する原因となります。特別な理由がない限り、バージョン番号は指定しないことを強く推奨します。これにより、Conda が各環境で利用可能な互換バージョンを自動で選択してくれます。


📁 プロジェクト構造

.
├── .docker
│   ├── Dockerfile             # (全自動) 環境構築の設計図。通常は編集不要。
│   └── README.md              # Dockerインストール手順の詳細ガイド
├── .gitignore                 # Gitの追跡対象外ファイルを指定
├── README.md                  # このファイル
├── compose.yml                # Dockerコンテナの基本設定 (CPU用)
├── compose.gpu.yml            # GPU利用時の上書き設定
├── environments               # (★主に編集する場所) CPU用のConda環境定義
│   ├── acs_cpu_env.yml        # ACS研究用CPU環境
│   └── pytorch_env.yml        # PyTorch基本環境
├── environments_gpu           # (★GPU利用時に編集) GPU用のConda環境定義
│   ├── acs_env.yml            # ACS研究用GPU環境(PyTorch含む)
│   ├── pytorch_env.yml        # PyTorch GPU環境
│   └── tensorflow_env.yml     # TensorFlow GPU環境
└── src                        # ソースコードやスクリプト、データを配置
    ├── check_cpu.py           # CPU環境の動作確認スクリプト
    └── check_gpu_torch.py     # GPU環境の動作確認スクリプト

🧹 クリーンアップ

開発が終わったら、以下のコマンドでコンテナと関連リソースを削除できます。

A) CPU 環境の場合

# コンテナを停止・削除
sudo docker compose down

# データを永続化するボリュームも完全に削除する場合
sudo docker compose down -v

B) GPU 環境の場合

# コンテナを停止・削除
sudo docker compose -f compose.yml -f compose.gpu.yml down

# ボリュームも完全に削除する場合
sudo docker compose -f compose.yml -f compose.gpu.yml down -v

その他のクリーンアップコマンド

ファイルの削除

sudo rm -rf src/ACS/prmsl/result_prmsl_acs_random_search_v4

タスクの削除

pkill -f "multi_prmsl_acs_random_v4.py"

Docker の中身全削除(注意:全ての Docker リソースが削除されます)

sudo docker system prune -a --volumes -f

docker の占有容量確認

sudo docker system df

イメージを使用しているコンテナを停止・削除

sudo docker ps -a

# 上で確認したコンテナIDを指定してください
sudo docker rm [コンテナID]

docker イメージを削除

sudo docker images

# 上で確認したイメージIDを指定してください
sudo docker rmi [イメージID]

docker build cache の削除

sudo docker builder prune

ユーザー権限の譲渡

sudo chown -R $USER:$USER /home/takumi/docker_miniconda/src/

sudo chown -R s233319:s233319 /home/s233319/docker_miniconda/src

sudo chown -R devel:devel /home/devel/work_takasuka_git/docker_miniconda/src

sudo chown -R takumi:takumi /home/takumi/docker_miniconda/src

sudo chown -R devel:devel /home/devel/work_takasuka/docker_miniconda/src

sudo chown -R takumi0616:takumi0616 /home/takumi0616/docker_miniconda/src

gpu チェック

watch -n 1 nvidia-smi

rtx5090 で pytorch を使う際のコマンド(使用する仮想環境で実行)

pip uninstall torch torchvision torchaudio

pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu128

git の権利関係のコマンド

git config --local user.name "takumi0616"

git config --local user.email "takumi0616.mrt@gmail.com"

gpu01, gpu02 においてデータの転送(SSD→HDD)

# 1. rsyncでデータを同期
sudo rsync -avP /home/devel/work_takasuka_git/docker_miniconda/src/anemoi/ /mnt/gpu01C/devel/work_takasuka_git/docker_miniconda/src/anemoi/

# 2. 同期が完了したら、元のディレクトリを削除してシンボリックリンクを作成
sudo rm -rf /home/devel/work_takasuka_git/docker_miniconda/src/anemoi
ln -s /mnt/gpu01C/devel/work_takasuka_git/docker_miniconda/src/anemoi /home/devel/work_takasuka_git/docker_miniconda/src/anemoi

🔄 新しいワークフローのまとめ

以上の改善により、今後は以下の手順で迅速に環境を構築できます。

  1. 初めての環境構築、または CUDA バージョンを変更したい場合:

    1. compose.gpu.yml を開き、使用するBASE_IMAGEの行のコメントを編集する。
    2. PYTORCH_CUDA_VERSION=<バージョン> を先頭につけて build コマンドを実行する。
  2. 同じ CUDA バージョンで再構築する場合:

    • 単純に PYTORCH_CUDA_VERSION=<バージョン> をつけて build コマンドを実行するだけで OK です。

この仕組みによって、CUDA バージョンの違いに起因するトラブルシューティングの時間を大幅に削減できるはずです。


📝 ライセンス

このプロジェクトは MIT ライセンスのもとで公開されています。詳細は LICENSE ファイルをご覧ください。


🤝 貢献

プルリクエストや Issue の報告を歓迎します!より良い開発環境を一緒に作っていきましょう。


📞 サポート

質問や問題がある場合は、Issues ページで報告してください。

ntfy 通知ガイド

1. これは何?

2. スマホ/PC の準備

  • iOS/Android: アプリストアで「ntfy」をインストール
  • Mac/PC: ブラウザで https://ntfy.sh を開く(通知許可)
  • 「トピック」を作成
    • Topic name:takumin0616-docker-miniconda
    • Use another server:https://ntfy.sh
  • アプリ(またはブラウザ)でこのトピックを購読(Follow/Subscribe)

3. コンテナ側の設定

  • プロジェクトの .env を作成
    • NTFY_SERVER=https://ntfy.sh
    • NTFY_TOPIC=<上で決めた値>
    • TZ=Asia/Tokyo
  • コンテナをビルド
    • CPU: docker compose up -d --build
    • GPU: PYTORCH_CUDA_VERSION=12.4 docker compose -f compose.yml -f compose.gpu.yml up -d --build

4. 使い方

  • notify-run を使う(推奨)
    • notify-run -- python src/train.py
    • notify-run -l logs/job*$(date +%F*%H%M).log -- conda run -n swinunet_env python src/train.py --cfg cfg.yaml
  • Python コード内から
    • from notify.ntfy_notify import notify_job
    • with notify_job("My Experiment"): heavy_task()

5. トラブルシューティング

  • 通知が来ない:
    • .env の NTFY_TOPIC が空でないか?
    • サーバから https に出られるか?(curl https://ntfy.sh で確認)
    • iOS 側の通知許可がオフになっていないか?
  • 送信失敗してもジョブは継続:
    • notify-run / notify_job は通知失敗を握りつぶす(非停止設計)

6. セキュリティ

  • 公開サーバ ntfy.sh を使う場合、トピック名は長いランダム文字列にして実質秘匿
  • より厳格にしたい場合は自前 ntfy サーバを立て、トークン認証を有効化:
    • 例(Docker):
      • docker run -d --name ntfy --restart=always -p 8080:80
        -v /opt/ntfy:/etc/ntfy
        -e NTFY_BASE_URL=https://your.domain
        -e NTFY_CACHE_FILE=/etc/ntfy/cache.db
        binwiederhier/ntfy serve
    • NGINX 等で HTTPS 終端、Basic 認証/TOKEN を利用
    • プロジェクトの .env で NTFY_SERVER と NTFY_TOKEN を設定

7. 補足(タグ・タイトル)

  • notify-run/notify_job は自動で以下を付与:
    • START ▶️, DONE ✅, FAILED ❌
    • タグ: rocket/hourglass/white_check_mark/x など
    • 本文には以下のコンテキストを含めて送信します: host, container, user, conda, cwd(実行ディレクトリ), cmd, start/end(ISO8601), elapsed(H:MM:SS), exit_code, log(指定時)
  • iOS の ntfy アプリではタグがアイコンに反映される

チェック

notify-run -- python ntfy_notify.py
chmod +x fetch.sh
./fetch.sh
chmod +x open.sh
./open.sh

About

Docker と Conda を用いて Windows/Mac/Linux・x86/ARM・CPU/GPU に対応し、CUDA バージョンも動的に切替できる再現性の高い機械学習/データ分析用開発環境テンプレート。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors