Docker를 사용한 딥러닝 재구현 가능한 환경 구축

Eunbin Park·2026년 9월 5일

Prerequisite

  • conda 환경
  • Distributor ID: Ubuntu
  • Description: Ubuntu 22.04.1 LTS
  • Release: 22.04
  • Codename: jammy
  • CUDA 11.7
  • 기설치된 docker

Nvidia-docker2 설치

모델 재구현 환경을 만들어야 하기 때문에 GPU 를 연결해야 하여 nvidia docker를 설치해준다.

Nvidia Docker 공식 설치 에서 설치를 위한 명령어를 확인할 수 있다.

distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
   && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
   && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
   
# 데몬 재시작
sudo systemctl restart docker

가상환경 패키지의 파일화

# 환경 전체를 파일로
conda env export > environment.yaml
# 설치된 패키지 정보만 파일로
conda list --explicit > package-list.txt

GPU 자원 확인

sudo docker run --rm --gpus all nvidia/cuda:11.7.1-base-ubuntu22.04 nvidia-smi

본 명령어는 docker상에 NVIDIA 드라이브가 인식되어 있는지 확인하기 위해 입력한다.
정상적인 실행을 마치면 아래와 같은 화면이 나와야 하지만,
nvidia-smi

이런 에러가 뜬다면 도커 리스타트를 하고 다시 실행시키는 걸 권장한다.
하이루에러

Dockerfile 작성

base, runtime, devel 차이

  • base: starting from CUDA 9.0, contains the bare minimum (libcudart) to deploy a pre-built CUDA application.
    Use this image if you want to manually select which CUDA packages you want to install.
  • runtime: extends the base image by adding all the shared libraries from the CUDA toolkit.
    Use this image if you have a pre-built application using multiple CUDA libraries.
  • devel: extends the runtime image by adding the compiler toolchain, the debugging tools, the headers and the static libraries.
    Use this image to compile a CUDA application from sources.
FROM nvidia/cuda:11.7.1-cudnn8-runtime-ubuntu22.04

ENV DEBIAN_FRONTEND=noninteractive

SHELL ["/bin/bash", "-c"]
RUN apt-get update && apt-get install -y --no-install-recommends \
    ca-certificates \
    ccache \
    cmake \
    curl \
    git \
    libfreetype6-dev \
    libhdf5-serial-dev \
    libzmq3-dev \
    libjpeg-dev \
    libpng-dev \
    libsm6 \
    libxext6 \
    libxrender-dev \
    pkg-config \
    software-properties-common \
    ssh \
    sudo \
    unzip \
    vim \
    wget

RUN rm -rf /var/lib/apt/lists/*

ENV LD_LIBRARY_PATH /usr/local/cuda-${CUDA}/targets/x86_64-linux/lib:/usr/local/cuda/extras/CUPTI/lib64:/usr/local/cuda/lib64:$LD_LIBRARY_PATH
RUN ln -s /usr/local/cuda/lib64/stubs/libcuda.so /usr/local/cuda/lib64/stubs/libcuda.so.1 && \
    echo "/usr/local/cuda/lib64/stubs" > /etc/ld.so.conf.d/z-cuda-stubs.conf && \
    ldconfig

# set timezone
ENV TZ=Asia/Seoul
RUN sudo ln -snf /usr/share/zoneinfo/$TZ /etc/localtime

ADD . /app
WORKDIR /app

# Install miniconda3
ENV LANG C.UTF-8
RUN curl -o /tmp/miniconda.sh -sSL http://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh && \
    chmod +x /tmp/miniconda.sh && \
    bash /tmp/miniconda.sh -bfp /usr/local && \
    rm /tmp/miniconda.sh && \
    conda init bash && \
    conda update -n base -c defaults conda

SHELL ["/bin/bash", "-c"]

ARG PYTHON_VERSION=3.8
ARG CONDA_ENV_NAME=

# RUN conda create -n ${CONDA_ENV_NAME} --file package-list.txt python=${PYTHON_VERSION} -y
RUN conda env create -f /app/environment.yaml
ENV PATH /usr/local/envs/$CONDA_ENV_NAME/bin:$PATH


RUN echo "source activate ${CONDA_ENV_NAME}" >> ~/.bashrc

0개의 댓글