글쓴이 보관물: sknayuta

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를 설정해서 사용할 수 있습니다.

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

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

Tip: Anaconda를 이용한 Intelpython과 TensorFlow (Intel MKL CPU version) 설치방법 – Windows 환경

현재 연구실에서는 머신러닝 관련 스터디를 진행하고 있습니다.
Hands on Machine Learning이라는 책으로 공부하고 있는데, 책의 중반부 부터 텐서플로(TensorFlow)를 활용하는 방법이 서술되어 있습니다.
우리 연구생 여러분들이 텐서플로를 쉽게 설치할 수 있도록 간단한 설치 가이드를 작성하고자 합니다.

참고 :
https://software.intel.com/en-us/articles/using-intel-distribution-for-python-with-anaconda
https://software.intel.com/en-us/articles/intel-optimization-for-tensorflow-installation-guide

Tensorflow는 CPU 버전과 GPU 버전이 있습니다. GPU 버전은 GPU를 이용한 병렬 연산을 지원합니다.
연구실에 있는 GPU 서버를 통해 계산할 때는 GPU 버전이 필요하겠지만, 지금은 공부하는 과정이므로 개인용 컴퓨터를 이용하는 것이 편리할 것 입니다. 따라서, CPU 버전으로 설치를 진행하도록 하겠습니다.

Tensorflow는 현재(19.01.27 기준) 파이썬 3.6 이하의 버전만 지원합니다. 현재 Anaconda 패키지는 파이썬 3.7 버전을 기준으로 배포되고 있습니다. 본 설치 가이드에서는 Intel python 3.6 버전을 아나콘다 환경에서 설치하여 텐서플로를 설치하도록 할 것입니다.

먼저 https://www.anaconda.com/download/ 에 접속하여 파이썬 3.7 버전을 설치합니다. (64-bit 권장)

Anaconda Prompt를 실행합니다.

conda update conda 를 입력하고 실행합니다. 업데이트 할 내용이 있으면 y 를 눌러 업데이트를 진행합니다.

conda config –add channels intel 를 입력하고 Enter를 누릅니다.
(add 앞에 – 2개 입니다 !)

필수 파일만 설치하려면 Core 버전을, 모든 패키지를 설치하려면 Full 버전을 설치하면 됩니다. Jupyter notebook 등의 패키지를 사용할 것이기 때문에, Full package를 설치하도록 하겠습니다. (코어 버전 설치 후 따로 패키지를 설치해도 됩니다.)
conda create -n idp intelpython3_full python=3 을 입력하고 실행합니다.
(코어 버전 설치는 위의 내용 중 full을 core로 바꿔주면 됩니다.)

설치가 완료됐으면 위의 메시지가 나타납니다. conda activate idp 를 입력하여 idp 환경을 활성화 시켜줍니다. 활성화가 됐다면 prompt 좌측의 (base)가 (idp)로 바뀌게 됩니다.
idp 활성화 후 python을 실행하여 Intel Python이 제대로 설치되었는지 확인합니다. 제대로 설치되었다면 exit() 를 입력하여 다시 밖으로 나옵니다.

마지막으로 conda install -c anaconda tensorflow-mkl 을 입력하여 텐서플로를 설치하도록 합니다.

Intel Python을 Full package로 설치했기 때문에 자동으로 Jupyter notebook이 설치되게 됩니다. Jupyter Notebook (idp)를 실행하여 텐서플로가 제대로 설치됐는지 테스트 해보도록 합니다.
(Windows 환경에서 위 이미지의 경로에 아이콘이 자동으로 설치됩니다.
C:\Users\계정이름\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit)
아이콘을 찾기 힘들다면 시작메뉴에 등록이 되어 있을것입니다.)

Jupyter notebook에서 Tensorflow를 import하고 예제를 실행해보도록 합니다. 예제가 제대로 출력된다면 설치가 제대로 된 것입니다.
* Tensorflow를 import 했을 때 위처럼 경고 메시지가 나타난다면 h5py를 업그레이드 하면 메시지가 사라지게 됩니다. 아래 내용 참고

Anaconda prompt를 관리자 권한으로 실행해서, idp 환경을 activate한 다음 pip를 업그레이드 하고 h5py를 업그레이드 합니다.
conda activate idp
python -m pip install –upgrade pip
python -m pip install –upgrade h5py

(upgrade 앞에 – 2개 입니다!)

h5py를 업그레이드 하고 다시 Tensorflow를 import 하면 경고 메시지가 사라지게 됩니다.
이상으로 Windows 환경에서 Intelpython과 Tensorflow 설치 가이드를 마치도록 하겠습니다. 스터디에 도움이 되길 바랍니다.
수고하셨습니다 🙂

소개: 박병경

부경대학교 에너지자원공학과 탄성파탐사 연구실 석사과정 박병경입니다.

어렸을 때부터 연구자가 되는 것이 꿈이었기 때문에 학부 초기부터 자연스럽게 연구실 생활을 시작하게 되었습니다.

학부 2학년 때는 에너지탐사 연구실에 소속되어 있었습니다.
컴퓨터를 좋아하는 제 모습을 보고 이전 지도교수님께서 지금의 연구실을 추천해주셨습니다.
그래서 학부 3학년부터 탄성파연구실에 들어오게 되었고, 재밌게 연구를 진행하고 있습니다.
(적성에 맞는 공부를 하는 게 참 중요한 것 같습니다.)

현재는 Schur Complement를 이용한 Laplace-domain 완전파형역산에 대한 연구를 진행하고 있습니다.

이 외에 기계학습을 지구물리분야에 적용하는 방법들에 대해 관심을 갖고 있습니다 🙂