딥러닝 모델 학습/테스트 환경에 필요한
GPU, 주피터노트북 등 필요한 환경 구축에 관한 포스팅
도커에서 GPU 사용하기
기본 개념
- 기본적으로 Docker Image로 생성된 Container 내에서는, Host OS가 보유한 GPU 자원은 사용할 수 없다
- 따라서 도커 컨테이너 안에서 GPU 사용을 위한 설정이 필요
- 기본적으로 Host OS에는 GPU 자원이 있고, Nvidia가 설치된 상태여야 한다.
- 또한 당연히 Docker도 설치된 상태여야한다
Nvidia-docker 설치
- Docker에서 GPU를 사용하기 위해서는 nvidia-docker가 설치해야 한다.
< 설치 과정 >
1. 우선 nvidia-docker1이 설치되어있다면 확인 후 제거해야 한다
- 아래 코드는 docker 버전 업그레이드가 필요한 경우에만 실행한다
$ docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
$ sudo apt-get purge -y nvidia-docker
2. 레파지토리에 추가한다
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
3. nvidia-docker2를 설치하고 docker 데몬을 다시 로드한다
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd
4. 도커 환경에서 nvidia를 바라보는지 테스트한다
docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi
<Test 화면>
5. 도커 실행 시 default로 nvidia-docker로 설정하기
$ vi /etc/docker/daemon.json
- daemon.json 파일을 아래와 같이 수정한다
- 위와 같이 설정하면 nvidia-docker명령어가 아닌 docker 명령만으로 GPU를 사용할 수 있다
6. Trouble Shooting
- 특정 이미지의 경우 nvidia-docker를 설치하고, default-runtime을 설정해도 위와 같이 nvidia-smi가 실행이 안될 경우가 있다. 그럴 경우에는 runtime을 다시 nvidia로 지정하고, 특정 GPU를 바라보게 한 뒤 실행
$ docker run --rm --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=0,1 [이미지이름]
도커에서 쥬피터 노트북 사용
$ docker run -it -p 8888:8888 --name [컨테이너이름] [이미지이름]
- 도커 컨테이너 내부에서 쥬피터 노트북을 실행하기 위해서는 포트포워딩을 해줘야한다
- '-p' 인자 뒤에 오는 포트는 [호스트포트]:[컨테이너포트] 이다.
$ jupyter notebook -no-browser --ip=0.0.0.0 --port=8888 --allow-root
- 도커 컨테이너 내부에서 쥬피터 노트북을 실행할 때 명령어
- 실제 실행시에는 '서버ip:지정포트'로 접속한다
도커에서 Host OS의 데이터 자원 공유
$ docker run --v [호스트 폴더 경로]:[컨테이너 폴더 경로] [이미지]
- Host os에 있는 데이터 혹은 코드를 컨테이너 내부에서 사용하고자 할 때
- '-v' 옵션을 사용하면 쉽게 호스트와 자원을 공유할 수 있다
도커에서 Tensorboard 접속
$ tensorboard --logdir=[로그파일위치] --bind_all
- 도커 컨테이너 안에서 텐서보드 실행시, 꼭 --bindall 파라미터를 같이 작성해야 접속 가능
- 접속은 http://localhost:6006 (기본 포트 : 6006, 변경 가능)
- 이때 로컬과 도커 컨테이너의 사용하려는 포트가 포트포워딩이 되어 있어야한다
'Docker & Kubernetes > Docker' 카테고리의 다른 글
[Docker-Compose] 도커 컴포즈 설치 및 사용 (2) | 2020.02.13 |
---|---|
[Trouble Shooting] 도커 사용시 문제 발생 및 해결 (1) | 2020.02.09 |
[Docker] 도커허브에 이미지 배포하기 (0) | 2019.10.14 |
[Docker] Ubuntu 18.04 도커 시작하기 (2) | 2019.10.13 |