先行研究などの環境構築に使用したDockerfileとそれに関するメモなどを保管する場所
後輩などが同じ先行研究をとりあえず動かしたい時の環境構築が楽になるように
このリポジトリの作成者はABCI上でSingularityで環境構築をする時にDockerfileを使用しています
具体的な手順は以下
① DockerfileをbuildしてDockerHubにpush
②ABCI上でDockerHubからイメージをpullしてきてsingularityイメージに変換
- Docker使ったことない人向け簡単な説明
- 汎用Dockerfileテンプレートアップ
- 汎用Dockerfileテンプレートのアップデート
- DockerHubのアカウントは作成済みと仮定
- 各種設定
- ユーザ名 : 'user ID'
- イメージ名 : hoge-x.xx
- タグ : latest
- 注1. 自分はイメージ名の末尾にCUDAのバージョンをつけています
- 注2. タグは好きなものをつけてください(CUDAバージョンはこっちに書くべきかもしれない)
- 各種設定
- ABCI上で使いたい場合(Singularity)の例
- dockerイメージのbuildとpush
cd 'dockerfile-dir-path'
docker build -m 16g -t 'user ID'/hoge-x.xx:latest . && docker login && docker push 'user ID'/hoge-x.xx:latest
- --no-cacheオプションをつければキャッシュを参照せずにビルドできる
- 良い点:変なバグを引きにくいい
- 悪い点:ビルドに時間がかかる
- ABCI上でのSingularityイメージの作成
cd 'singularity-img-dir-path'
module load singualitypro && singularity pull hoge.img docker://'user ID'/hoge-x.xx:latest
- Singularityイメージ環境内での作業
- インタラクティブに使用する場合
singularity run --nv hoge.img
- singularity環境下に入るので自由に操作してください
- 注1. ABCIのgroup領域のデータは
--bind
でマウントしないと参照できません(共有領域のデータセットを使うときなど) - 注2.
--nv
はGPU使わない時は外したほうがいいです
- 注1. ABCIのgroup領域のデータは
- コマンドを投げる場合
singularity exec --nv hoge.img python run.py
- 例はsigularity環境下で
python run.py
を走らせる場合です- 注.
python run.py
は必要な命令に書き換えてください
- 注.
- バッチジョブを投げる時はこちらの方が書きやすいのはと思います
- インタラクティブに使用する場合
- dockerイメージのbuildとpush
- Dockerイメージとして使う場合
- インターネットに沢山解説があがっているので適宜参照してください
- DockerHub
- Docker専用GitHubのようなもの
- BuildしたDockerイメージをDockerHubに置くとURLを指定すればそのイメージをpull出来るようになります
- ABCI上でSingularityイメージファイルを作成するときはDockerHub経由が学習コストが低くて楽なのではないかと思っています
- Nvidia/Cuda
- Tags → Filter Tagsから必要なCUDA/cuDNN/Ubuntuのバージョンに合ったものを探す
- 基本的にDockerfileの1行目でよく使われている環境を
FROM
で引っ張ってくるのが良いです- 公式環境をベースにするのが推奨らしい(?)
- NVIDIA Docker
- DockerはデフォルトではBuild時にGPUが認識されません(例えばtorchsparseはCPU向けにビルドされます)
- Nvidia GPUを使用したBuildを行う際に必要となります(ABCI側には不要)
- 詳細は少し古いがこの記事を読めばある程度わかります