Docker 환경 설정(gpu 사용)

이용욱·2024년 2월 13일
0
post-thumbnail

PC환경
CPU : AMD® Epyc 7713p 64-core processor × 128
VGA : RTX 4090 24GB 4EA
Memory : 251GB
OS : Ubuntu 20.04

Docker에서 pytorch 2.2.0 & cuda11.8 & cudnn8 환경을 세팅

1. Docker install

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

1-1. 권한 설정

sudo usermod -aG docker $USER
sudo reboot

1-2. Docker Image 다운받기

Docker hub에 접속해서 원하는 image를 다운 받는다.
https://hub.docker.com/r/pytorch/pytorch/tags

docker pull pytorch/pytorch:2.2.0-cuda11.8-cudnn8-devel

명령어

#docker 확인
docker images
#docker 삭제
docker rmi [image_id]
#TAG 변경
docker tag pytorch/pytorch:2.2.0-cuda11.8-cudnn8-devel torch2.2.0:cuda11.8-cudnn8

1-3. Container 생성

docker run -it --gpus=all --name [container-name] torch2.2.0:cuda11.8-cudnn8 /bin/bash

명령어

# 실행
docker start [container-name]

# 접속
docker attach [container-name]

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

# 종료
exit

# 삭제
docker rm [container-name]

1-4. File 저장 경로 설정

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

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

2. daemon.json 파일 수정

도커는 기본적으로 설치하면 /var/lib/docker로 기본 패스가 설정되어 docker 이미지나 컨테이너 생성시 해당 위치를 사용하게 된다.
하지만 일반적으로 /var가 속한 파티션은 크기가 크지 않아 많은 도커를 운용할 때 디스크 용량 문제에 부딛히게 된다.

여기서는 /home/docker 패스에 1T SSD를 마운트 하여 도커 전용으로 사용하기 위해 /var/lib/docker기본 패스를 변경하여 /home/docker/docker_data에서 이미지와 컨테이너 데이터를 관리하도록 변경한다

mkdir -p /home/docker/docker_data
vi /etc/docker/daemon.json 

아래 내용 입력

{
    "graph":"/home/docker/docker_data",

    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

입력 후, 도커 데몬 재시작

systemctl restart docker.service
systemctl status docker.service

설치된 도커와 base path 변경된 것 확인

3. Portainer

3-1. Portainer 구축

portainer는 Docker의 Image, Container, Network 등을 쉽게 관리하도록 도와주는 Graphic User Interface Web Service이다. 쉽게 말해 window의 docker desktop처럼 GUI로 docker 컨테이너 등을 관리한다고 보면 된다.

먼저 Protainer Container를 설치하기 전에 Container와 Host(Ubuntu OS)간에 Volume Matcing을 위한 Directory 생성하자.

sudo mkdir -p /docker/portainer
# / 경로로 이동
cd /
# 폴더 만들어졌는지 확인
ls -al

루트 Directory [ / ] 밑에 docker라는 Directory를 만들고, 그 밑에 다시 portainer라는 Directory를 만들어 주었다.

sudo docker run --name portainer -p 9000:9000 -d --restart always -v /docker/portainer:/data -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

옵션 설명
🔹 --name : Container Name 생성
🔹-p Host Port 9000번과 내부 Port 9000번 Mapping
🔹 -d Deamon을 Background에서 실행
🔹 -restart always : 재 부팅시 자동 기동
🔹/docker/potainer:/data -v : Host와 Container 간의 Volume Matcing
🔹.docker.sock : Host와 Container 간의 공유를 위한 명령어
🔹portainer/portainer : Image 사용 순서 지정
🔹 컨테이너 목록: docker ps

3-2. Portainer 실행


Ubuntu의 IP (ifconfig 명령으로 확인)를 입력한 뒤 :9000을 인터넷 주소 창에 입력

그 후, local로 보면

Portainer 설치 및 구동 완료.

❌에러 'could not select device driver'

docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].

발생 시, nvidia-container-toolkit을 설치

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
systemctl restart docker.service

그 후,

docker run -itd --gpus=all --name [이름] [IMAGE 명] /bin/bash
#example
docker run -itd --gpus=all --name ywlee torch2.2.0:cuda11.8-cudnn8 /bin/bash
profile
자율주행에 관심이 있으며, Lidar SLAM을 공부하고 있습니다. [개인 홈페이지 : https://woogiee.wixsite.com/youngwooklee]

0개의 댓글