Haribo ML, AI, MATH, Algorithm

jupyter notebook Docker를 이용한 서버 컴퓨터 원격 접속

2021-07-24
Haribo

Docker에 대한 설명은 생략하고 오로지 원격 접속 하는 방법에 대해서만 글을 쓸 예정임.

SSH나 Docker에 대한 설명은 아래 참고사이트가서 보고 오시길 바람.

그리고 MAC 기준 설명임. 윈도우도 같다.

참고사이트

SSH

https://eungbean.github.io/2019/03/22/jupyter-ssh/

http://programmingskills.net/archives/315

Docker

블로그1

블로그2

구글 클라우드

https://towardsdatascience.com/using-jupyter-notebook-running-on-a-remote-docker-container-via-ssh-ea2c3ebb9055

SSH 연결

Client 머신에서 실행

터미널에서

ssh-keygen

입력 후 엔터누르면됨. 중간에 passphrase 설정하라는게 나오는데 비밀번호 같은것으로 생각된다. 굳이 안해도 접속 가능함. 결과물 이미지로 보여주고 싶지만 뭔가 보여주면 안될것 같은 비주얼이라 생략. 그리고 ssh를 통해 서버에 접속한다.

ssh -L <로컬 포트번호>:localhost:<서버 포트번호> <server_name>@<server_IPaddr> -p <ssh_port_num>

# 로컬 포트번호, 서버 포트번호는 서버 이용자들끼리 안겹치게 설정

예를들면 이런식으로 접속

ssh -L 9999:localhost:151515 hello@1.2.3.4 -p 22

다른 포트번호로 SSH 연결

Server 머신에서 실행

ssh는 기본 포트가 22번인데 22번말고 다른 포트 번호로 접속하고 싶으면 서버 컴퓨터에서

vi /etc/ssh/sshd_config

를 실행해서

#Port 22
Port 141414  <- 새로운 포트번호 입력하면됨

를 써주면 된다. 그리고

# 새로 등록한 포트는 추가
sudo ufw allow 141414/tcp

# 기존 SSH 포트는 차단
sudo ufw deny 22/tcp

# 서비스를 재시작 합니다.
service ssh restart

그런다음

ssh -L 9999:localhost:151515 hello@1.2.3.4 -p 141414

Notebook 접속

Client 머신에서 실행

GPU를 위한 nvidia-docker와 필요한 이미지 pull은 완료했다는 가정하에 설명을 진행한다. 안해쓰면 여기가서 nvidia-docker와 원하는 이미지를 다운 받고 보면 된다. 우선 현재 대략적인 상황을 이미지로 표현하면

image-20210725145217674

문제는 그냥 컨테이너를 실행하면 컨테이너(가상환경)에서 한 작업물이 서버로 저장이 안된다. 그 문제를 해결하기위해 서버컴퓨터 안에 서버-컨테이너 를 위한 폴더를 하나 만들어준다.

nvidia-docker run -it \
-p <서버 포트번호>:<도커 내부 포트번호> \
--name <컨테이너이름> \
-v <컨테이너 파일 저장할 폴더 주소>:/data \
<컨테이너 이미지>  bash

예를들면

nvidia-docker run -it \
-p 151515:10000 \
--name hello \
-v ~/share:/data \
pytorch/pytorch:latest  bash

이렇게 컨테이너를 만들어준다. 그러면 자동으로 컨테이너 쉘에 접속이 되는데 여기서 jupyter notebook를 설치해준다.

pip install ipykernel
pip install jupyter notebook

설치가 끝나면 jupyter notebook를 실행

jupyter notebook --ip 0.0.0.0 --port <도커 내부 포트번호> --allow-root --NotebookApp.token= --notebook-dir='/data'

예를들면 이렇게

jupyter notebook --ip 0.0.0.0 --port 10000 --allow-root --NotebookApp.token= --notebook-dir='/data'

그리고 웹창에서

http://localhost:<로컬 포트번호>

Ex)
http://localhost:9999

로 접속하면 끝.

image-20210725135541024

image-20210725141019593

GPU 및 접속 잘됨. 즐겨찾기 해놓고 도커 킨다음에 접속하면 된다.

종료 및 다시켜기

컨테이너 종료시 쉘에

exit

를 치면 컨테이너가 종료상태가 된다. 다시 시작하려면 컨테이너를 켜주고 붙여주기만 하면됨.

docker start <컨테이너 이름>
docker attach <컨테이너 이름>

요약

# 1. SSH keygen
ssh-keygen

# 2. SSH 연결
ssh -L <로컬 포트번호>:localhost:<서버 포트번호> <server_name>@<server_IPaddr> -p <ssh_port_num>

# 3. Docker Container 생성(생성할 때 처음 한번만 하면됨)
nvidia-docker run -it \
-p <서버 포트번호>:<도커 내부 포트번호> \
--name <컨테이너이름> \
-v <컨테이너 파일 저장할 폴더 주소>:/data \
<컨테이너 이미지>  bash

#4. Jupyter 실행
jupyter notebook --ip 0.0.0.0 --port <도커 내부 포트번호> --allow-root --NotebookApp.token= --notebook-dir='/data'

#5. Jupyter notebook 접속
http://localhost:<로컬 포트번호>

#6. Jupyter, Container 종료
exit

#7. Container 재실행
docker start <Container 이름>
docker attach <Container 이름>

Comments

Content