본문 바로가기

Server/Docker

Docker를 이용하여 tensor flow (GPU ver) 사용하기.

반응형

본 글은 리눅스 ubuntu 16.04.4 LTS Xeniel에서 Docker를 이용하여 GTX1080Ti GPU를 사용하기 위한 tensorflow GPU버전을 설치하는 과정이다. 


0. Docker Install 방법은 지난 글 참고. (링크)


1. Tensorflow official docker image PULL

sudo docker pull tensorflow/tensorflow


2. nvidia-docker 설치

# If you have nvidia-docker 1.0 installed: we need to remove it and all existing GPU containers

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


# Add the package repositories

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


sudo apt-get update


# Install nvidia-docker2 and reload the Docker daemon configuration

sudo apt-get install -y nvidia-docker2

sudo pkill -SIGHUP dockerd


- https://hub.docker.com/r/tensorflow/tensorflow/

- https://github.com/NVIDIA/nvidia-docker


2. 컨테이너 띄우기

sudo nvidia-docker run -it -p 8888:8888 -p 6006:6006 -h TF-gpu --name TF-gpu tensorflow/tensorflow:latest-gpu

sudo nvidia-docker run -it -p 8888:8888 -p 6006:6006 -h TF-gpu --name TF-gpu tensorflow/tensorflow:1.7.0-devel-gpu-py3

sudo nvidia-docker run -it -p 8888:8888 -p 6006:6006 -h TF-gpu -v /home/Data01:/home/Data01 --name TF-gpu tensorflow/tensorflow:1.7.0-devel-gpu-py3

- latest-gpu는 python2용이다. 1.70-devel-gpu가 2018.04.02 현재 안정적인 python3의 gpu버전이다. 아래 ref에서 나에게 적절한 버전을 찾아서 설치하도록 하자. *이렇게 latest를 이용하지 않는 경우 다음단계에서 주의하도록 하자 :)

- -it 옵션은 interactive와 pseudo-tty로 bash shell을 사용하기 위해서이다.

- -p는 <local port>:<container>의 포트를 연결시켜준다. 즉 내 서버의 IP:port >>> container의 local:port와 연결되는 것.

- -h와 --name은 host name과 container name, 

- -v는 container의 볼륨을 따로 연결해주는 부분이다. container는 내부 삭제하면 내부 데이터가 사라진다. 내부 데이터를 보존하고 싶은 경우 -v로 local 저장소를 연결해놓은 경우 local 저장소에 데이터가 저장되기 때문에, 백업을 하기 쉽다 사용법은 다음과 같다.
          -v <local volume>:<container volume>

- 마지막은 원하는 image:버전 이다. 

# 8888은 jupyter 접속용 포트

# 6006은 tensorboard 접속용 포트

- https://hub.docker.com/r/tensorflow/tensorflow/tags/


3. 설치 잘 되어있는지 확인

- jupyter 접속 : http://<ip-adress>:8888 + 컨테이너 띄울때 받은 토큰

- latest-gpu가 아니라python3을 위해 필자와 같이 1.70-devel-gpu-py3와 같은 것을 이용할 경우, 기본 컨테이너를 실행하면, 바로 jupyther가 켜지지 않고, 그냥 컨테이너 안으로 들어가진다. 이제 스스로 jupyter를 실행해야 하는데, 다음과 같은 명령어로 실행하면 깔끔한 python3용 jupyter를 실행할 수 있다. 

../run_jupyter.sh --notebook-dir=../home/

- 새 노트북 만든 다음 아래 명령어 실행

import tensorflow as tf

sess = tf.Session()


4. 중간에 이미지로 저장하기

sudo docker commit TF-gpu jupyter-py3

- git과 비슷 한 방법으로 한다. 명


- dockerfile을 제작한다. 컨셉은 다음과 같이 만들면 된다. 이는 기존의 tensorflow/tensorflow의 1.7.0... 버전의 이미지에서 시작한다. 이후 유지보수하는 사람을 나타내고, RUN을 통해 뒤에 명령어들을 실행한다. 아주 간단한 docker file이다. 이후 sudo docker build -t tensorflow/tensorflow .로 image를 새로 만들면 된다. 이러한 작업을 통해 image에서 작업내용을 업데이트 하고 도중에 실수했지만 내부 작업을 지킬 수 있다. (무식한 방법이긴 하지만...)


# 어느 image에서 가져올것인가

FROM tensorflow/tensorflow:1.7.0-devel-gpu-py3

MAINTAINER kimyoungjin06@gmail.com

RUN apt-get -y update

RUN apt-get -y upgrade

$sudo docker build -t tensorflow/tensorflow .


- 이후 토큰 받은 터미널에 내 PC에 대한 정보가 나타난다. Found device 0 과 같은 식으로 나오면 0번 디바이스를 찾았다는 뜻. (0개의 디바이스를 찾은 것이 아니다!!)


4. 위대한 발걸음의 시작.
- 이제 tensorflow를 하고싶다면, 아래 한글 번역문서를 참고하면 좋겠다.


반응형

'Server > Docker' 카테고리의 다른 글

Docker, JupyterLab with GPU setting  (0) 2019.10.05
Docker 초보자 필수 매뉴얼  (0) 2018.04.03
Dockerfile 만드는 법  (0) 2017.05.31