Ubuntu 20.04 Docker 설치 및 사용

업데이트:

Why Docker?

Docker는 컨테이너 기반의 오픈소스 가상화 플랫폼 입니다. Docker는 가상 머신처럼 독립적인 실행환경을 만들어주는데, 실제 가상환경처럼 OS를 설치하는 것은 아니기 때문에 용량도 적고, 속도도 빠릅니다. 특히 Docker는 실제 개발환경을 그대로 저장, 실행할 수 있어서 일관된 개발 환경을 제공하여 코딩을 훨씬 편리하게 만들어줍니다.

Image

Docker hub에 가면 많은 Image를 찾을 수 있습니다. 이 이미지는 컨테이너 실행에 필요한 파일 및 설정값들을 포함하고 있습니다. 즉 같은 이미지를 이용해서 여러개의 다른 컨테이너를 생성할 수 있습니다. 예를 들어서 CUDA11.0을 갖고 있는 이미지가 있다면, 이를 이용해서 CUDA11.0 기반의 컨테이너를 계속해서 생성할 수 있습니다.

Container

Docker를 사용하기 위해서는 container가 무엇인지를 알아야합니다. Container는 Image를 실행시킨 상태입니다. 이는 가상머신처럼 OS를 가상화 하는것이 아니고 ,프로세스가 격리된 공간에서 동작하는 기술입니다. 하나의 서버에 여러 컨테이너를 이용해서 서로 영향을 미치지 않고 독립적으로 실행하는 것이 가능합니다.

Anaconda와 비교한 Docker 장점

Docker의 최대의 장점은 CUDA 버전과 같은 요소들에 영향을 받지 않고 코드를 실행시킬 수 있다는 점입니다. 코드를 실행하기 위해서 GPU가 가장 잘 돌아가는 환경을 세팅하는 것이 실험을 시작하기 전 가장 어려운 일이라 할 수 있습니다. 하지만 Docker를 사용한다면 원하는 pytorch 버전과 cuda 버전이 이미 설정되어있는 이미지를 다운 받아서 컨테이너를 생성하는 것이 가능해집니다.

Anaconda의 경우에는 CUDA의 경우 pc에 설치되어있는 cuda 버전과 기타 세팅들을 따라 가야해서 버전이 업그레이드 된걸 사용해야하는 경우에 gpu를 제대로 사용하지 못하는 문제가 발생할 수 있는데, docker를 사용한다면 다른 버전을 사용하는데 큰 어려움이 없습니다.

Docker Install

curl -fsSL https://get.docker.com/ | sudo sh

Nvidia Toolkit 설치

  • CUDA 재설치 등의 작업을 수행한 경우 nvidia toolkit 작업을 다시 해 주어야 합니다.
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 apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker

권한 설정

  • 현재 접속중인 사용자에게 권한을 주고, pc를 재부팅해서 권한 설정을 완료합니다.

      sudo usermod -aG docker $USER
      sudo reboot
    

Docker Image 다운받기

  • Docker hub에 접속해서 원하는 image를 다운 받습니다.
      docker pull pytorch/pytorch:1.7.1-cuda11.0-cudnn8-devel
    
  • Docker를 확인, 삭제 하는 명령어 입니다.

      # docker 확인
      docker images
    
      # docker 삭제
      docker rmi <image_id>
    

TAG 변경

  • 다운 받은 image의 이름이 너무 길어서 tag를 변경해서 사용하는 것이 가능합니다.

      docker tag pytorch/pytorch:1.7.1-cuda11.0-cudnn8-devel torch171:cuda11.0
    

Container 생성

  • 다운 받은 이미지를 실행시키셔 container를 생성합니다. [container-name]에 지정하고자 하는 컨테이너의 이름을 작성합니다.

      docker run -it --gpus all --name [container-name] torch171:cuda11.0 /bin/bash
    

Container 실행/접속/탈출/종료/삭제

# 실행
docker start [container-name]

# 접속
docker attach [container-name]

# 탈출 (-it 옵션을 줬을때만 가능)
ctrl+P
ctrl+Q

# 종료
exit

# 삭제
docker rm [container-name]

File 저장 경로 설정

Docker를 사용하게 되면 volume에 파일들이 저장됩니다. 저는 컴퓨터의 하드디스크에 직접 파일이 저장되는 상태로 사용하고 싶어서 workspace에 컴퓨터 파일시스템을 직접 마운트해서 사용하고자 합니다. 원하는 경로를 마운트 하는 상태로 container를 생성하기 위해서는 다음과 같은 명령어를 입력해야 합니다. [filepath]에 원하는 경로를 입력하여 워크스페이스와 파일 시스템 경로를 연결할 수 있습니다.

docker run -it --gpus all --name [container-name] -v [filepath]:/workspace/[container-name] torch171:cuda11.0

카테고리:

업데이트:

댓글남기기