2019-07-30: Updated

발단은, 작은 궁금증이었습니다.

“리눅스를 서버처럼 세팅해서 맥북으로 가볍게 작업하려면, 어떻게 해야하나요?”

ssh+jupyer_tfkorea

*원 글 보러가기

진심으로 감사합니다!!

위 조언들에 따라, docker + jupyter + ssh 조합을 사용하기로 결심했습니다.
차근차근 설치하며, 다른 분들도 따라만 하면 설치할 수 있도록 작은 보답삼아 포스트를 남깁니다.
같은 고민을 하시는 분들께 도움이 되셨으면 좋겠습니다.

Docker + Jupyer + SSH

그동안 리눅스를 포맷하고 세팅하면서, 이제는 눈감고도 할 수 있을 정도가 되었습니다.
아나콘다로도 해보고, pip로도 해보았지만 역시 가장 유용했던 것은 Docker입니다.
특히 ufoym/deepo 이미지가 가장 마음에 들었습니다.
그리고 Udacity등의 강의를 들으며 사용했던 Jupyter는 가볍고 직관적이며 원격작업에 특히 유용했습니다.

이번 포스트에서는 딥러닝용 데스크탑을 서버로 세팅하고, 외부에서 맥 등으로 접속하여 작업하는 과정을 다룰 것입니다.

우분투 처음 설치하시는 분들께

우분투를 처음 세팅하시는 분들께 먼저 말씀드립니다.
아래, 제가 Ubuntu를 설치하며 남겼던 기록을 공유합니다.

아직 Docker가 없으시다면, 혹은 Tensorflow를 설치하지 않으셨다면,
아래 포스트를 참고하여 설치를 먼저 해주세요.
도움이 되셨으면 좋겠습니다.

본격적으로 시작합니다!

1. 내 ip 확인하기

먼저, 외부에서 내 서버로 접속하기 위해서는 ip를 알아야겠죠?
리눅스에서 다음 명령어로 ip를 확인합니다.

방법 1: ifconfig

[root@eungbean ~] ifconfig | egrep "(^\\w|inet )"
eth1      Link encap:Ethernet  HWaddr 00:0C:29:A2:8E:A8  
          inet addr:192.168.0.39  Bcast:192.168.0.255  Mask:255.255.255.0
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
[root@eungbean ~]# ifconfig | grep "inet "
          inet addr:192.168.0.39  Bcast:192.168.0.255  Mask:255.255.255.0
          inet addr:127.0.0.1  Mask:255.0.0.0

방법 2: ip

[root@eungbean ~]# ip addr | grep "inet "
    inet 127.0.0.1/8 scope host lo
    inet 192.168.0.39/24 brd 192.168.0.255 scope global eth1
[root@eungbean ~]# ip addr | grep "inet " | grep brd | awk '{print $2}' | awk -F/ '{print $1}'
192.168.0.39

2. SSH 세팅하기

ip를 확인했다면, 딥러닝 서버에 SSH 설정을 해주어서 원격으로 접속할 수 있도록 해주어야 합니다.
SSH에 대해서 생소하시다면, 아래 동영상을 참고하세요.

SSH 설정은 아래 포스트를 참고하여 완료해주세요.

GPU서버 (우분투) 데스크탑에서

#ssh 서버&클라이언트 설치
sudo apt-get install ssh

#방화벽 설정 후 port22 허용
sudo ufw enable
sudo ufw allow 22

랩탑 (맥북) 에서

#ssh는 이미 설치되어 있습니다.
#공개키, 개인 키 쌍 생성
ssh-keygen
#Enter file in which to save the key 가 나오면 엔터를 칩니다.
#‘~/.ssh/’에 키 값이 저장 됩니다.

#클라이언트 공개키를 서버로 보냅니다.
ssh-copy-id <서버아이디>@<서버주소>
ssh-copy-id eungbean@192.168.0.39
#비밀번호를 입력하면 서버의 '/.ssh/authorized_keys'에 저장됩니다.

설정을 완료하셨다면, 아래와 같이 접속하실 수 있습니다.

접속 성공!

이제 맥북에서 데스크탑 서버로 진입했습니다.

3. Jupyter 컨테이너 띄우기

GPU가 달린 데스크탑 서버에 ssh로 접속한 후, 내부에 docker 컨테이너를 띄웁니다.

아래 post를 따라서 docker를 설치했다고 간주하겠습니다.

#컨테이너와 공유할 데이터 폴더 만들기
mkdir ~/docker

#docker image 당겨오기
docker pull ufoym/deepo:all-jupyter-py36-cu90

# Jupyer 컨테이너 띄우기
nvidia-docker run -it \
-p 8888:8888 -p 6006:6006 \
--name tf2j \
-v ~/docker:/data \
ufoym/deepo:all-jupyter-py36-cu90 \
jupyter notebook \
--no-browser \
--ip=0.0.0.0 \
--allow-root \
--NotebookApp.token= \
--notebook-dir='/data'

이제 8888번 포트로 jupyter notebook 컨테이너에 접근할 수 있습니다.

4. 서버에 접속하기

내 서버의 ip가 192.168.0.39 라고 한다면, 아까 열어줬던 8888포트를 통해 접속할 수 있습니다.
크롬에서 다음 주소를 입력합니다.

192.168.0.39:8888

190322:jupyter

접속 성공!

5. 보안설정

그냥 포트를 열어놓기만 한다면, 아무나 들어올 수 있습니다.
아무나 들어와서 컴퓨터 리소스를 쓴다는 것은 바람직하지 않은 상황이기때문에, jupyter에 비밀번호를 걸어보겠습니다.

먼저 jupyter에 접속한 후, 새 python3 ipynb를 만듭니다. 그리고 아래와 같이 입력합니다.

In [1]: from notebook.auth import passwd

In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'sha1:f24baff49ac5:863dd2ae747212ede58125302d227f0ca7b12bb3'

이제 docker 컨테이너 내부에서 다음 명령어를 실행시킵니다.

#컨테이너 안으로 접속하기
> docker exec -it tf2j /bin/bash

# 컨테이너 안으로 접속 성공
jupyter notebook --generate-config
Writing default config to: /home/.jupyter/jupyter_notebook_config.py

# vi로 설정파일 열기
vi /home/.jupyter/jupyter_notebook_config.py

설정파일에 다음 내용을 추가합니다.

# Password to use for web authentication
c = get_config()
c.NotebookApp.password =
u'sha1:f24baff49ac5:863dd2ae747212ede58125302d227f0ca7b12bb3'

진짜 성공!

이제 위 주소를 즐겨찾기에 저장하고 노트북으로 접속하여 서버를 사용하세요!
다음 포스트에서는 랩탑에서 Pycharm으로 코딩하고 GPU서버에서 Interpreter가 돌아가도록 설정해보도록 하겠습니다.

감사합니다!

via GIPHY

Comments

Eungbean Lee's Picture

About Eungbean Lee

Lee is a Student, Programmer, Engineer, Designer and a DJ

Seoul, South Korea https://eungbean.github.io