이번 편에는 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, 용도 등 다양한 정보를 작성한 인증서를 말하며, 서버는 자신에게 등록된 인증서를 가진 사람을 신뢰하고, 접근을 허용.
- 매번 접속할때마다 정보를 입력하게 하는 것보다는 이 인증서를 가지고 있으면 접근을 허용

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 서버 구축에 대해 설명 했습니다.
'서버' 카테고리의 다른 글
| 개인 서버 채굴 해킹 사례 및 분석 (1) | 2022.07.08 |
|---|---|
| Django을 위한 웹 지식 (0) | 2022.06.20 |
| docker 명령어 모음 (0) | 2022.06.17 |
| 개인용 서버 만들기 5편(딥러닝 서버 구축 1편) (0) | 2022.06.17 |
| 개인용 서버 만들기 4편(code-server 구축) (0) | 2022.06.04 |