본문 바로가기
  • 🦄 창민이 개발일지
서버

개인용 서버 만들기 5편(딥러닝 서버 구축 2편)

by 창민이 개발일지 2022. 6. 19.

이번 편에는 5편에  마저 못한 Tensorflow 서버 구축을 할거에요. Tensorflow 서버에 Jupyter Notebook를 실행 시켜서 외부에서 딥러닝 프로젝트 보다 쉽게 할 수 있도록 할거에요. 저는 Tensorflow 서버를 docker를 통해  실행 시킬 건데, 다음 Tensorflow 공식 사이트에서 docker로 Tensorflow 서버를 구축하는 방법이 나와 있습니다. 

 

Docker  |  TensorFlow

Google I/O is a wrap! Catch up on TensorFlow sessions View sessions Docker Docker는 컨테이너를 사용하여 TensorFlow 설치를 나머지 시스템에서 격리하는 가상 환경을 만듭니다. TensorFlow 프로그램은 호스트 머신과 리

www.tensorflow.org

 

Tensorflow 컨테이너 생성 코드

docker run [-it] [--rm] [-p hostPort:containerPort] tensorflow/tensorflow[:tag] [command]

Tensorflow docker에서 GPU 구동 및 Jupyter Notebook 까지 실행 할 수 있도록 하려면 다음과 같이 입력하시면 됩니다.

docker run -it -p 8888:8888 -p 6006:6006 
           -v /home/[사용자 디렉토리]/jupyterNotebook/:/jupyterNotebook 
           --gpus all --restart always --name tensorflow-server 
           tensorflow/tensorflow:latest-gpu-jupyter 
           jupyter notebook --allow-root --ip 0.0.0.0 --NotebookApp.token='' 
           --no-browser --notebook-dir='/jupyterNotebook'

위의 코드의 의미는 다음과 같습니다. 

  • --gpus all # 도커 컨테이너내에서 호스트의 모든 gpu 사용
  • -p 8888:8888 # 호스트내 port 와 컨테이너내 Jupyter Notebook port 연결
  • -p 6006:6006 # 호스트내 port 와 컨테이너내 Tensorboard port 연결
  • --restart always # 도커가 재실행 될시 해당 컨테이너가 자동으로 실행
  • --name tensorflow-server # 도커 컨테이너 이름을 tensorflow-server로 설정
  • tensorflow/tensorflow:latest-gpu-jupyter # 도커 컨테이너내에서 GPU 지원 및 Jupyter 포함 
  • jupyter notebook # 매번 도커 컨테이너 실행시 주피터 노트북을 열라는 명령어
  • --allow-root # 루트계정에서 서버를 여는 것을 허용
  • --ip 0.0.0.0 # 모든 ip 허용
  • --NotebookApp.token='' # 서버 접속시 토큰 입력 생략
  • --no-browser # 주피터 접속 기억 실행하지 않도록
  • --notebook-dir='/jupyterNotebook' # 주피터 노트북 디렉토리를 /jupyterNotebook으로 설정

 

Tensorflow-server 컨테이너 접속

docker exec -it tensorflow-server bash

다음과 같이 접속됩니다. 

 

Jupyter Notebook config 생성

Jupyter Notebook config는 Jupyter notbook에 관한 모든 설정을 관리 할 수 있는 파일로, port 변경, 비밀번호 변경 그리고 Https 설정 같은 것이 있습니다. 

jupyter notebook --generate-config

 

Jupyter Notebook 비밀번호 설정

Ipython 실행및 비밀번호 해쉬값 출력

ipython
from notebook.auth import passwd

passwd()
# Enter password: 
# 비밀번호 입력
# Verify password: 
# 비밀번호 재입력

# 출력값: 'argon2:$argon2id$v=19$m=10240,t=10,p=8$Lr/KrGpToOUGsoa0ABm3Iw$id3yDMRRhPbGyxr36MToerZR8wtICRC+IbReFAGCI0w'

출력 된 값을 config의 password에 입력하시면 됩니다.

 

jupyter_notebook_config.py 파일 수정

vi ~/.jupyter/jupyter_notebook_config.py

# c.NotebookApp.password 부분을 찾아 # 제거 하고 다음과 같이 비밀번호 해쉬값을 입력하시면 됩니다.

c.NotebookApp.password = 'argon2:$argon2id$v=19$m=10240,t=10,p=8$Lr/KrGpToOUGsoa0ABm3Iw$id3yDMRRhPbGyxr36MToerZR8wtICRC+IbReFAGCI0w'

 

Jupyter Notebook HTTPs 설정

인증서

  • 내가 누구인지, e-mail, 용도 등 다양한 정보를 작성한 인증서를 말하며, 서버는 자신에게 등록된 인증서를 가진 사람을 신뢰하고, 접근을 허용.
  • 매번 접속할때마다 정보를 입력하게 하는 것보다는 이 인증서를 가지고 있으면 접근을 허용

출처: https://sectumsempra.tistory.com/49 [IT관련 공부]

X509란

  • ITU-T가 만든 PKI(Public Key Interface Infrastructure, 공개키 기반구조)

 

SSL 인증서 생성

 SSL 디렉토리를 만들어 주시고 해당 디렉토리에 들어가서 다음과 같은 명령어 입력하시면 됩니다.

openssl req -x509 -nodes -days 365 
-newkey rsa:2048 -keyout "cert.key" -out "cert.pem" -batch

입력하시면, cert.key 와 cert.pem 파일이 생성되며 각각 개인키와 공개키를 의미합니다. 

 

jupyter_notebook_config.py 파일 수정

vi ~/.jupyter/jupyter_notebook_config.py

#c.NotebookApp.certfile 과 #c.NotebookApp.keyfile 부분을 찾아 # 제거 하고 다음과 같이 입력하시면 됩니다.

c.NotebookApp.certfile = '/home/ubuntu/ssl/cert.pem'
c.NotebookApp.keyfile = '/home/ubuntu/ssl/cert.key'

 

Jupyter Notebook 접속

외부에서 접속하려면 https://[서버 ip 또는 서버 도메인]:port 번호 로 접속하시면 됩니다. 저 같은 경우 docker 컨테이너를 만들 때 -p 8888:8888로 입력 했기 때문에 https://[서버 ip 또는 서버 도메인]:8888로 접속 됩니다. 접속하면 다음과 같이 출력 되면, https 와 비밀번호가 잘 적용 된것을 확인 할 수 있습니다. 

이상으로 Tensorflow 서버 구축에 대해 설명 했습니다.