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 のみでのテストをシームレスに切り替えたい方
- 機械学習の学習や研究に集中したいインフラ初心者の方
この環境を利用するには、お使いの PC に以下のソフトウェアがインストールされている必要があります。
- Git: ソースコードのクローンに使用します。
- Docker Desktop: コンテナを動かすための必須ツールです。
- (NVIDIA GPU をお使いの場合のみ)
📝 Note: Linux 環境で Docker コマンド実行時の
sudoを省略したい場合は、こちらの公式ガイドに従って設定を行ってください。
まず、このプロジェクトをお手元にダウンロードします。
git clone https://github.com/takumi0616/docker_miniconda.git
cd docker_miniconda実行したい環境に応じて、以下のコマンドを選択してください。
Mac ユーザーや、NVIDIA GPU を搭載していない PC の場合は、こちらのコマンドを実行します。
# Dockerイメージをビルド
sudo docker compose build
# コンテナをバックグラウンドで起動
sudo docker compose up -dNVIDIA 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 回目以降はキャッシュが利用されるため、高速に完了します。
起動したコンテナの中に入り、開発作業を開始します。
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: aarch64PyTorch 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
-
他の環境への切り替え:
# 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
このプロジェクトの真価は、その高いカスタマイズ性にあります。
Dockerfileを編集する必要は一切ありません。
-
YAML ファイルを作成:
environmentsディレクトリに、<新しい環境名>.ymlというファイルを作成します。例:
my_new_env.ymlname: my_new_env channels: - conda-forge dependencies: - python=3.12 - pandas - jupyterlab
-
イメージを再ビルド: 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で新しい環境が使えます。
-
YAML ファイルを編集:
- CPU/共通パッケージ:
environments内の対応する YAML ファイルにライブラリ名を追加します。 - GPU 専用パッケージ:
environments_gpu内の対応する YAML ファイルに追加します。
- CPU/共通パッケージ:
-
イメージを再ビルド: 上記と同様に
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環境の動作確認スクリプト
開発が終わったら、以下のコマンドでコンテナと関連リソースを削除できます。
# コンテナを停止・削除
sudo docker compose down
# データを永続化するボリュームも完全に削除する場合
sudo docker compose down -v# コンテナを停止・削除
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 -fdocker の占有容量確認
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/srcgpu チェック
watch -n 1 nvidia-smirtx5090 で pytorch を使う際のコマンド(使用する仮想環境で実行)
pip uninstall torch torchvision torchaudio
pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu128git の権利関係のコマンド
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以上の改善により、今後は以下の手順で迅速に環境を構築できます。
-
初めての環境構築、または CUDA バージョンを変更したい場合:
compose.gpu.ymlを開き、使用するBASE_IMAGEの行のコメントを編集する。PYTORCH_CUDA_VERSION=<バージョン>を先頭につけてbuildコマンドを実行する。
-
同じ CUDA バージョンで再構築する場合:
- 単純に
PYTORCH_CUDA_VERSION=<バージョン>をつけてbuildコマンドを実行するだけで OK です。
- 単純に
この仕組みによって、CUDA バージョンの違いに起因するトラブルシューティングの時間を大幅に削減できるはずです。
このプロジェクトは MIT ライセンスのもとで公開されています。詳細は LICENSE ファイルをご覧ください。
プルリクエストや Issue の報告を歓迎します!より良い開発環境を一緒に作っていきましょう。
質問や問題がある場合は、Issues ページで報告してください。
- Docker コンテナ内から HTTP でモバイル/PC にプッシュ通知を送る仕組みです
- 無料の公開サーバ(https://ntfy.sh)を使うので、サーバの外にポートを開ける必要はありません
- SSH が切れても通知は届きます
- iOS/Android: アプリストアで「ntfy」をインストール
- Mac/PC: ブラウザで https://ntfy.sh を開く(通知許可)
- 「トピック」を作成
- Topic name:takumin0616-docker-miniconda
- Use another server:https://ntfy.sh
- アプリ(またはブラウザ)でこのトピックを購読(Follow/Subscribe)
- プロジェクトの .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
- 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()
- 通知が来ない:
- .env の NTFY_TOPIC が空でないか?
- サーバから https に出られるか?(curl https://ntfy.sh で確認)
- iOS 側の通知許可がオフになっていないか?
- 送信失敗してもジョブは継続:
- notify-run / notify_job は通知失敗を握りつぶす(非停止設計)
- 公開サーバ 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
- docker run -d --name ntfy --restart=always -p 8080:80
- NGINX 等で HTTPS 終端、Basic 認証/TOKEN を利用
- プロジェクトの .env で NTFY_SERVER と NTFY_TOKEN を設定
- 例(Docker):
- 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(指定時)
- START
- iOS の ntfy アプリではタグがアイコンに反映される
notify-run -- python ntfy_notify.pychmod +x fetch.sh
./fetch.shchmod +x open.sh
./open.sh