[Docker] Docker로 Pytorch CUDA 버전 맞춰진 container 생성하기
Docker에서 container는 새로운 컴퓨터를 하나 판다고 생각하시면 편합니다.
(Docker는 같은 서버를 사용하는 사용자 사이에서 CUDA 환경변수의 꼬임을 방지하기 위해 사용합니다.)
아래와 같이 export
로 직접 커맨드 창에 입력하여 CUDA path를 설정하는 방식을 사용할 수도 있지만 매번 그러기엔 귀찮고, 헷갈릴 수 있습니다.
export PATH=/usr/local/cuda-11.3/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.3/lib64:$LD_LIBRARY_PATH
만약 새로운 컴퓨터를 하나 파면 그 컴퓨터 안에서는 계속 같은 환경변수를 유지한다면 정말 편할 것입니다.
이를 해결해주는 것이 docker입니다.
바로 실전으로 넘어가봅시다.
Docker로 Pytorch CUDA 버전 맞춰진 container(=독립적인 컴퓨터) 생성하기
docker image를 pull할 때, docker hub pytorch에서 pytorch/cuda 버전이 맞는 것을 입력해줍니다.
먼저 docker hub로 들어가서 Tags 탭으로 가줍니다.
현재 project에서 필요한 pytorch version / cuda version을 확인해줍니다. (예시에선 pytorch 1.12.1, cuda 11.3을 사용했습니다.)
TAG에서 순서는 pytorch version / cuda version / cudnn version 순으로 명시되어있으며, devel이 붙은 것을 사용해야합니다. (runtime이 붙은 것은 제약이 있습니다.)
원하는 TAG를 찾았으면 copy를 해줍니다.
copy된 다음 command를 docker를 설치한 VScode에서 커맨드를 입력하면 docker image가 다운로드 됩니다.
docker pull pytorch/pytorch:1.12.1-cuda11.3-cudnn8-devel
docker images로 docker pull로 내려받은 pytorch version / cuda version을 확인해줍니다.
여기서 IMAGE ID의 앞 3글자를 사용하여 container를 생성할 것입니다. (여기서 IMAGE ID 앞 3글자는 fa5
입니다.)
container를 생성시 다음과 같은 커맨드를 입력합니다.
--name
으로 생성되는 container 이름을 정해줄 수 있습니다. (예시에선 CoR-GS로 NAMES를 정했습니다.)-v
는 현재 서버의 directory를 생성할 container에 directory에 mount할 경로를 정해줍니다.
docker run -it --gpus all --net=host --pid=host --ipc=host -v /mai_nas:/mai_nas --name CoR-GS fa5 /bin/bash
docker run으로 container를 실행시 다음과 같이 들어가집니다.
터미널을 하나 더열고 실제 container가 생성된 것을 확인합니다. NAMES에 CoR-GS 이름을 가진 container가 생성되었음을 확인할 수 있습니다.
생성된 container는 CONTAINER ID를 가지고 CONTAINER ID의 앞 3글자로 container를 중지시키거나, 제거할 수 있습니다.
- container를 제거할 때는
- 현재
container
내에서exit
로 나와container
를 종료시키거나 - 외부 터미널에서
docker stop [CONTAINER ID 앞 3글자]
로 종료시킨다음
- 현재
docker rm [CONTAINER ID 앞 3글자]
로 제거해줄 수 있습니다.
docker stop 97b
docker rm 97b
container가 처음 생성되었을 시에는 conda를 실행해주어야 conda 사용할 수 있습니다.
아래명령어를 입력해줍니다.
conda init bash
source ~/.bashrc
이제 모든 세팅이 끝났습니다. 현재 container의 cuda version / pytorch version을 확인해봅시다.
- nvcc -V (cuda version이 11.3인지 확인)
- pip list (torch version 1.12.1인지 확인)
python version까지 맞춰야하는 경우에는 생성한 container에서 conda로 가상환경을 만들어서 사용해줍니다.
예제에서 생성한 container의 python version이 3.7.13 입니다.
하지만 project에서 사용하는 python version은 3.8.1 입니다.
이 경우 python version이 달라서 library가 설치가 제대로 안될 수 있습니다.
이때는 현재 container에서 다음과 같이 python 3.8.1 version의 가상환경을 만들어서 사용합시다.
conda create -n CoR-GS python=3.8.1
conda activate CoR-GS
주의할 점: 만들어진 가상환경은 torch가 깔려있지 않은 상태이므로 제일 먼저, cuda version / torch version이 맞는 것을 pytorch org previous versions에서 찾아서 설치해줍니다.
pip
로 설치해줍시다.
pip install torch==1.12.0+cu113 torchvision==0.13.0+cu113 torchaudio==0.12.0 --extra-index-url https://download.pytorch.org/whl/cu113
environment.yml
의 나머지 모듈들은 requirements.txt에 붙여넣고 설치하는 방식을 사용하면 됩니다.
아래와 같이 requirements.txt 파일을 만들고 다음 커맨드를 실행하여 관련 모듈을 설치합니다.
pip install -r requirements.txt
마지막으로 submodules 설치에 대해 알아보겠습니다. 설치해야하는 submodules는 아래와 같이 2개입니다.
submodules는 직접 디렉토리로 이동하여 개발모드로 설치해줍니다.
cd submodules/diff-gaussian-rasterization-confidence
pip install -e .
cd submodules/simple-knn
pip install -e .
긴글 읽어주셔서 감사합니다.
Leave a comment