概要
- なぜmmdetectionで用意されているDockerfileを使わないのか
- 環境構築
- Dockerfileを書いて,buildする
なぜmmdetectionで用意されているDockerfileを使わないのか
主に2つ理由がある.
1つ目はDockerfileに書かれているPytorchやcuda,mmcvのバージョンが低いことだ.これは当該箇所を修正すれば良い.しかし,pytorchやcuda,mmcvのバージョンが新しくなったことで生じる問題に対して,対応をしなければならないのが面倒くさくなってしまった.また,TORCH_CUDA_ARCH_LIST="6.0 6.1 7.0+PTX"
など最新のGPUを使っていたらTORCH_CUDA_ARCH_LIST="6.0 6.1 7.0 7.5 8.0 8.6+PTX"
のように書き換えなければならない.これなら1から書いてもいいのではないかと思ってしまった.
2つ目はmmcvをpipからではなくsourceからインストールしたかったからだ.これは何かの理由でmmcv側でエラーを吐いたときに対応しやすいと考えたからだ.mmcvのコードに問題があれば,sourceを書き直せば良いので,問題の解決を図ることができる.
環境構築
Dockerの公式ページを見てDockerをインストールする.
nvidia-dockerを使用してGPU環境構築を参考にしてdockerでgpuを使えるように準備する.
NVIDIA Container Toolkit (NVIDIA Docker) は何をしてくれるかを参考にして,default runtime
をnvidia
にする.これはdocker buildするときにnvccを使う必要があるためである.
Dockerfileを書いて,buildする
以下にDockerfileを記述する.
必要であればこれを書き換えればよい.
mmcvのgithubとmmdetectionのgithubを参考にした.
なお,これはmmcv=1.7.1,mmdetection=2.28.2の環境である.
ARG PYTORCH="1.13.1"
ARG CUDA="11.6"
ARG CUDNN="8"
FROM pytorch/pytorch:${PYTORCH}-cuda${CUDA}-cudnn${CUDNN}-devel
#setup environment
ENV FORCE_CUDA="1" TORCH_CUDA_ARCH_LIST="6.0 6.1 7.0 7.5 8.0 8.6+PTX" PATH="/usr/local/cuda/bin:$PATH" TORCH_NVCC_FLAGS="-Xfatbin -compress-all" CMAKE_PREFIX_PATH="$(dirname $(which conda))/../" MMCV_WITH_OPS="1"
RUN apt update && apt install -y git libgl1 libglib2.0-0 ffmpeg libturbojpeg libsm6 libxext6 ninja-build libxrender-dev && apt clean && rm -rf /var/lib/apt/lists/*
#install mmcv
RUN git clone https://github.com/open-mmlab/mmcv.git -b v1.7.1 /mmcv
WORKDIR /mmcv
RUN pip install --no-cache-dir -e .[all] -v
#install mmdetection
RUN git clone https://github.com/open-mmlab/mmdetection.git -b v2.28.2 /mmdetection
WORKDIR /mmdetection
RUN pip install --no-cache-dir -e . -v
# if you need, you write the below code
RUN pip install --no-cache-dir albumentations