CUDA-BEVFusion用のdockerイメージ
以下のテキストを「Dockerfile」という名前で保存します。
(長いですが、右下のcopyボタンからクリップボードにコピーできるため、また以後プロンプト表記などを省いて、容易にコピー&ペーストできます。)
Dockerfile
FROM nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04
# Environment settings
ENV DEBIAN_FRONTEND noninteractive
ENV CONDA_DIR /opt/conda
ENV PATH /usr/local/cuda/bin:$CONDA_DIR/bin:$PATH
ENV FORCE_CUDA="1"
ENV MMCV_WITH_OPS=1
# System dependencies
RUN apt-get update && apt-get install -y \
wget \
build-essential g++ gcc \
libgl1-mesa-glx libglib2.0-0 \
openmpi-bin openmpi-common libopenmpi-dev libgtk2.0-dev git \
gnupg2 curl software-properties-common \
cmake \
protobuf-compiler \
libprotobuf-dev \
&& rm -rf /var/lib/apt/lists/*
# Add NVIDIA package repositories and install TensorRT
RUN curl -fsSL https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub | apt-key add - && \
curl -fsSL https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/7fa2af80.pub | apt-key add - && \
echo "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /" > /etc/apt/sources.list.d/cuda.list && \
echo "deb https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/ /" > /etc/apt/sources.list.d/nvidia-ml.list && \
apt-get update && \
apt-get install -y --allow-downgrades cuda-toolkit-config-common=11.3.58-1 && \
apt-get install -y tensorrt=8.5.2.2-1+cuda11.8 \
libnvinfer8=8.5.2-1+cuda11.8 \
libnvinfer-plugin8=8.5.2-1+cuda11.8 \
libnvparsers8=8.5.2-1+cuda11.8 \
libnvonnxparsers8=8.5.2-1+cuda11.8 \
libnvinfer-bin=8.5.2-1+cuda11.8 \
libnvinfer-dev=8.5.2-1+cuda11.8 \
libnvinfer-plugin-dev=8.5.2-1+cuda11.8 \
libnvparsers-dev=8.5.2-1+cuda11.8 \
libnvonnxparsers-dev=8.5.2-1+cuda11.8 \
libnvinfer-samples=8.5.2-1+cuda11.8 && \
apt-get install -y python3-libnvinfer=8.5.2-1+cuda11.8 python3-libnvinfer-dev=8.5.2-1+cuda11.8 \
&& rm -rf /var/lib/apt/lists/*
# Install Miniconda
RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda.sh && \
/bin/bash ~/miniconda.sh -b -p $CONDA_DIR
# Python packages
RUN conda install -y python=3.8 pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=11.3 -c pytorch && \
pip install Pillow==8.4.0 tqdm torchpack mmcv==1.4.0 mmcv-full==1.4.0 mmdet==2.20.0 nuscenes-devkit mpi4py==3.0.3 numba==0.48.0 numpy==1.23.0
#Enviroment(for bevfusion)
ENV CPATH /usr/local/cuda-11.3/include:$CPATH
ENV LIBRARY_PATH /usr/local/cuda-11.3/lib64:$LIBRARY_PATH
ENV LD_LIBRARY_PATH /usr/local/cuda-11.3/lib64:$LD_LIBRARY_PATH
ENV PATH /usr/local/cuda-11.3/bin:$PATH
ENV CUDA_HOME /usr/local/cuda-11.3
FROM nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04
# Environment settings
ENV DEBIAN_FRONTEND noninteractive
ENV CONDA_DIR /opt/conda
ENV PATH /usr/local/cuda/bin:$CONDA_DIR/bin:$PATH
# System dependencies
RUN apt-get update && apt-get install -y \
wget \
build-essential g++ gcc \
libgl1-mesa-glx libglib2.0-0 \
openmpi-bin openmpi-common libopenmpi-dev libgtk2.0-dev git \
gnupg2 curl software-properties-common \
cmake \
libprotobuf-dev \
protobuf-compiler \
&& rm -rf /var/lib/apt/lists/*
# Add NVIDIA package repositories and install TensorRT
RUN curl -fsSL https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub | apt-key add - && \
curl -fsSL https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/7fa2af80.pub | apt-key add - && \
echo "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /" > /etc/apt/sources.list.d/cuda.list && \
echo "deb https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/ /" > /etc/apt/sources.list.d/nvidia-ml.list && \
apt-get update && \
apt-get install -y --allow-downgrades cuda-toolkit-config-common=11.3.58-1 && \
apt-get install -y tensorrt=8.5.2.2-1+cuda11.8 \
libnvinfer8=8.5.2-1+cuda11.8 \
libnvinfer-plugin8=8.5.2-1+cuda11.8 \
libnvparsers8=8.5.2-1+cuda11.8 \
libnvonnxparsers8=8.5.2-1+cuda11.8 \
libnvinfer-bin=8.5.2-1+cuda11.8 \
libnvinfer-dev=8.5.2-1+cuda11.8 \
libnvinfer-plugin-dev=8.5.2-1+cuda11.8 \
libnvparsers-dev=8.5.2-1+cuda11.8 \
libnvonnxparsers-dev=8.5.2-1+cuda11.8 \
libnvinfer-samples=8.5.2-1+cuda11.8 && \
apt-get install -y python3-libnvinfer=8.5.2-1+cuda11.8 python3-libnvinfer-dev=8.5.2-1+cuda11.8 \
&& rm -rf /var/lib/apt/lists/*
# Install Miniconda
RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda.sh && \
/bin/bash ~/miniconda.sh -b -p $CONDA_DIR
# Python packages
RUN conda install -y python=3.8 pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=11.3 -c pytorch && \
pip install Pillow==8.4.0 tqdm torchpack nuscenes-devkit mpi4py==3.0.3 numba==0.48.0 numpy==1.23.0
#Enviroment(for bevfusion)
ENV CPATH /usr/local/cuda-11.3/include:$CPATH
ENV LIBRARY_PATH /usr/local/cuda-11.3/lib64:$LIBRARY_PATH
ENV LD_LIBRARY_PATH /usr/local/cuda-11.3/lib64:$LD_LIBRARY_PATH
ENV PATH /usr/local/cuda-11.3/bin:$PATH
ENV CUDA_HOME /usr/local/cuda-11.3
#mmcv install
RUN pip install --no-cache-dir mmcv==1.4.0 mmcv-full==1.4.0 mmdet==2.20.0 -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.10/index.html
このようなDockerfileになっている理由は、調査検討の血と汗と涙の結晶のため説明しきることが難しいものですが、「軽い」解説を以下に記します。
- 後にbevfusionフォルダ(本家のようなものです)の方も動かすため、そちらも睨んだ古めの環境(cuda11.3)になっています。
- issueに挙がっていますが、tensorrtのバージョンが古めでないと、正しい推論ができない様子のため、バージョン指定でインストールしています。
- その他のライブラリについても、当時の記法と現在でズレが存在するため、古いものを指定してある場合が多いです。
以下コマンドでイメージを生成します。-tの部分は何でも良いですが、作成されるイメージにあだ名を付けておきます。
(当記事内では「cubev-nexty」で説明致します)
docker build . -f Dockerfile -t cubev-nexty