Tip: 리눅스 환경(Centos 7)에서 SSH Terminal + Docker + Jupyter Notebook을 이용한 Tensorflow GPU 버전 사용

리눅스 환경(Centos 7 기준)에서 Nvidia Docker를 이용하여 Tensorflow GPU 버전을 사용하는 방법에 대해 알아보겠습니다.

먼저 리눅스 환경에서 Docker를 설치합니다.
Docker 설치 방법은 아래 링크를 참고해주세요.
https://github.com/NVIDIA/nvidia-docker
https://docs.docker.com/install/linux/docker-ce/centos/

Docker 설치 후 일반 계정에서 Docker를 사용할 수 있도록 권한을 부여해줍니다.
root 계정으로 로그인 한 다음, shell에서 usermod -aG docker <id> 를 입력해줍니다.
입력 후 다시 로그인합니다.

Nvidia Docker를 사용하면 CUDA, CUDNN 등 CUDA 프로그래밍에 필요한 파일들을 설치하지 않아도 됩니다. Graphic Driver만 설치되어 있으면 사용이 가능합니다.
shell에서 nvidia-smi 명령어를 사용하여 Graphic Driver가 설치되어있는지 확인합니다.
만약 드라이버가 설치되어 있지 않다면 설치합니다.
https://www.nvidia.com/Download/index.aspx

드라이버가 설치되었으면, Nvidia tensorflow gpu 버전 docker 이미지를 다운받습니다.
docker pull 명령어를 통해 docker image를 다운받는데, 이 때 다양한 태그를 통해 여러 버전의 이미지를 받을 수 있습니다.
(참고 : https://www.tensorflow.org/install/docker )
이번에는 Tensorflow GPU, Python3, Jupyter notebook 환경을 사용할 것이기 때문에, 아래와 같이 shell에 명령어를 입력합니다.
docker pull tensorflow/tensorflow:latest-gpu-py3-jupyter

다운로드가 완료됐으면 docker images 명령어를 통해 이미지를 확인해줍니다.

그 다음 docker container를 만듭니다. container를 만드는 명령어는 다음과 같습니다.

docker run –runtime=nvidia –name=<name> -v </home/ID/directory:/directory -it –entrypoint=bash -p 8888:8888 -p 6006:6006 tensorflow/tensorflow:latest-gpu-py3-jupyter

위의 명령어를 실행하기 전에 위에서 사용된 docker 명령어에 대해 알아봅시다.
1) –name=<name> 도커 컨테이너의 이름을 지정해주는 명령어입니다. 컨테이너를 다시 시작할 때, 복잡한 컨테이너 ID를 사용하기 번거로우므로, 별명을 지정해줘서 사용하기 편하게 해줍니다. <name> 부분에 본인이 원하는 이름을 적어주면 됩니다.

2) -v 호스트의 디렉토리를 도커 컨테이너에 마운트 하는 명령어입니다. 호스트에 있는 파일을 작업하기 편하도록 마운트 해줍니다. 마운트하기 원하는 디렉토리의 주소(pwd 명령어로 확인)를 </home/ID/directory:/directory> 형식으로 입력합니다.

3) -it 명령어로 shell에 입출력이 가능해집니다.

4) –entrypoint=bash 컨테이너 시작시에 수행할 명령어입니다. 위의 예시의 경우 Jupyter notebook이 자동으로 실행되지 않게 하기 위해 입력한 것입니다.

5) -p 8888:8888 -p 6006:6006 Jupyter notebook (8888)과 tensorboard (6006)를 사용하기 위해 포트 설정을 해주는 옵션입니다.

사용 예시) 만약, test라는 계정의 works 디렉토리를 컨테이너에 works 디렉토리로 만들고 컨테이너 이름을 hello로 만들고 싶다면, 다음과 같이 입력하면 됩니다. (v, it, p 앞에는 – 1개, runtime, name, entrypoint 앞에는 – 2개)
docker run –runtime=nvidia –name=hello -v /home/test/works:/works -it –entrypoint=bash -p 8888:8888 -p 6006:6006 tensorflow/tensorflow:latest-gpu-py3-jupyter

성공적으로 컨테이너가 만들어 졌다면 아래와 같은 화면이 출력됩니다.

호스트의 디렉토리가 마운트 된 것도 확인할 수 있습니다.

이어서 사용환경 setting에 대해 알아보겠습니다.
nvidia docker 이미지는 ubuntu os가 설치되어 있습니다. 하지만 기본적인 프로그램 설치가 되어있지 않기 때문에 필요한 프로그램을 설치해줍니다.
저는 우선 vim 편집기를 설치했습니다
shell에 apt-get install vim 입력하고 설치합니다.

그 다음 jupyter notebook을 실행합니다.
그러면 아래와 같은 에러 메시지가 출력됩니다.

해당 에러를 해결하기 위해, jupyter notebook configuration 파일을 생성해줍니다.
shell에 jupyter notebook –generate-config 명령어를 입력합니다. (generate 앞에 – 2개, config 앞에 – 1개)

그 다음 vim 편집기를 이용해 config 파일을 수정해줍니다.
shell에 vi /root/.jupyter/jupyter_notebook_config.py 를 입력해줍니다.

vim 편집기 에서 / 를 사용하여 notebook_dir, NotebookApp.ip, NotebookApp.port, allow_root, 를 각각 검색합니다.
notebook_dir는 노트북 시작시 홈 디렉토리를 설정하는 파라미터입니다. 마운트 한 디렉토리로 바꾸는것이 사용에 편리할 것입니다.
ip 는 ‘0.0.0.0’ 으로 수정합니다.
port 는 8888로 수정합니다.
allow_root는 True로 바꿔줍니다.

(수정할 때 앞의 주석처리 #을 지워주는것을 잊지 마세요!)

위와 같이 수정했다면 :wq 를 입력하여 수정한 파일을 저장합니다. 그 다음 다시 jupyter notebook을 실행합니다.

이렇게 된 상태에서 터미널을 하나 더 실행하여 host 계정으로 접속합니다. host에서 웹 브라우저를 실행합니다. 저는 firefox를 사용하겠습니다.

웹브라우저 주소창에 127.0.0.1:8888 을 입력합니다.

아래와 같은 창이 뜨면, 도커 컨테이너에서 token 값을 복사하여 입력합니다.
그리고 필요에 따라 password를 설정해서 사용할 수 있습니다.

토큰을 입력하면 다음과 같이 실행됨을 알 수 있습니다.

수고하셨습니다. 연구에 도움이 되길 바랍니다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중