한 컴퓨터에서 GPU를 사용하는 프로젝트를 하나만 진행한다면 CUDA와 cuDNN이 하나의 버전만 있으면 되겠지만
여러 프로젝트를 진행할 경우, 프로젝트별로 필요한 CUDA, cuDNN 버전이 다를 수 있음
(TensorFlow만 해도 버전별로 각기 다른 CUDA, cuDNN이 필요하다!)
도커를 이용해서 컨테이너별로 다른 버전의 CUDA, cuDNN을 설치해보자
Docker를 이용한 딥러닝 환경 구축
Docker 설치
GPU driver 설치
GPU 드라이버 즉 NVIDIA 드라이버는 base machine에 설치해야함
NVIDIA driver 설치 후 아래의 명령어로 확인
nvidia-smi
GPU driver 연결
도커가 GPU를 인식할 수 있도록 NVIDIA Container Toolkit을 이용해서 연결해주자
NVIDIA Container Toolkit은 자동으로 base machine의 GPU driver를 인식하여 도커 컨테이너가 실행되면 연결시켜줌
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html
이미지 다운로드
NVIDIA에서 공식적으로 지원하는 Docker Hub에서 필요한 이미지를 다운받자
Tags 탭에서 원하는 CUDA 버전을 검색(ex. 10.1)하고
오른쪽의 복사 버튼을 누르고, 터미널에서 붙여넣기
이미지를 다운받는 것부터 잘못돼서 한참을 헤멨다
Overview를 보면 이렇게 나와있는데, 당연히 이 말만 철썩같이 믿고서
나는 cuDNN이 필요하니까 base, runtime, devel 중 runtime만 주구장창 받았다
웬걸?
runtime 버전의 이미지로 컨테이너를 만들고나서, CUDA 버전을 확인해보면
nvcc: command not found 오류가 뜬다
알고보니 devel 버전으로 받아야 CUDA, cuDNN 버전을 제대로 확인할 수 있었다
그리고 TAG 형식이
10.1-devel-ubuntu16.04
처럼만 있는게 아니고 좀 더 내려보면
10.1-cudnn7-devel-ubuntu16.04
'cudnn' 이 붙어있는 태그가 따로있다
딥러닝 환경 구축을 위해 cuDNN이 필요한 사용자라면
[CUDA버전]-cudnn[버전]-devel-[사용할OS]
처럼 cudnn 과 devel 로 구성된 이미지를 pull 하자
그리고 만약 내가 필요한 CUDA버전이 10.1이고, cuDNN버전이 7.6인 상황인데
Tag 목록에는 10.1-cudnn7-devel-ubuntu16.04와 같이 cuDNN 버전이 7만 있다! 고 생각할 수 있지만
나중에 확인해보면 7.6.5가 깔려있는 것을 확인할 수 있음 (뒤에 나옴)
컨테이너 생성
docker run -it --gpus all --name [컨테이너명] [이미지명] bash
--gpus 옵션을 넣어줘야 GPU driver를 인식할 수 있음
옵션 | 설명 |
-d | detached mode, 백그라운드 모드 |
-p | 호스트와 컨테이너의 포트를 연결 (포워딩) |
-v | 호스트와 컨테이너의 디렉토리를 연결 (마운트) -v [호스트 디렉토리]:[컨테이너 디렉토리] |
-e | 컨테이너 내에서 사용할 환경변수 설정 |
-it | 터미널 입력을 위한 옵션, -i 와 -t 를 동시에 사용한 것 |
-rm | 프로세스 종료 시 컨테이너 자동 제거 |
-link | 컨테이너 연결 [컨테이너명:별칭] |
--name | 컨테이너 이름 설정 |
--gpus all | GPU 사용 |
확인
NVIDIA driver 버전 확인
cat /proc/driver/nvidia/version
또는
nvidia-smi
현재 컨테이너 안에서 nvidia-smi를 입력했을 때
오른쪽 상단에 나오는 CUDA Version은
현재 컨테이너에 설치된 CUDA 버전이 아닌
현재 드라이버가 지원하는 CUDA의 최신 버전
https://stackoverflow.com/questions/53422407/different-cuda-versions-shown-by-nvcc-and-nvidia-smi
CUDA 버전 확인
nvcc --version
cuDNN 버전 확인
cat /usr/include/x86_64-linux-gnu/cudnn_v*.h | grep CUDNN_MAJOR -A 2
MAJOR, MINOR, PATCHLEVEL 순으로 버전을 읽을 수 있음
따라서 현재 설치된 버전은 7.6.5
Linux 버전 확인 (OS 확인)
cat /etc/*release*
cat /etc/issue
uname -a # 커널 정보
컨테이너 생성 후
아나콘다 가상환경 상에서 pip install로 원하는 패키지를 다운받아 사용하면 됨
참고
https://towardsdatascience.com/how-to-properly-use-the-gpu-within-a-docker-container-4c699c78c6d1
'Programming > Linux' 카테고리의 다른 글
[Linux] Docker container 생성 후 (0) | 2022.04.08 |
---|---|
Docker 기본 (0) | 2022.04.05 |
[Linux] 버전 확인 OS 확인 (0) | 2022.04.05 |
[Linux] Docker container에서 sudo 사용 (0) | 2022.04.04 |
[Linux] Docker container에서 Anaconda 가상환경 구축 (0) | 2022.03.22 |