더 이상 tistory 블로그를 운영하지 않습니다. glanceyes.github.io에서 새롭게 시작합니다.

새소식

Back-End

원격 서버에서 Jupyter Notebook 또는 Jupyter Lab을 실행하여 접속하기

  • -

 

자신에게 할당받거나 또는 자신이 운영 중인 서버가 있는데, 이를 원격으로 접속하여 jupyter 환경을 이용하고 싶을 때 유용할 수 있다. 인터넷 환경이 갖춰진 곳에서 웹 브라우저만 있어도 본인이 알고 있는 비밀번호를 이용하면 서버의 jupyter를 이용할 수 있는 것. 
이 글에서는 네이버 부스트캠프 AI Tech 활동에서 제공한 AI Stages의 서버를 이용하지만, AWS EC2, GCP 등 여러 클라우드 플랫폼의 서버에도 같은 방법으로 적용할 수 있다.

 

 

설정 과정

 

우선 서버에 터미널을 이용하여 ssh로 접속한다.

Image 2022-10-08 오후 5.50.45

which jupyter로 jupyter가 설치되어 있는지 확인하고, 설치되지 않았으면 pip install jupyter로 이를 설치한다.

이왕 설치하는 김에 뒤에서 필요할 Jupyter lab도 pip install jupyterlab같이 설치해 주자.

 

 

 

Config 파일 생성하기

 

jupyter notebook --generate-config로 config 파일을 생성한다.

어느 경로에 config 파일이 생성되었는지 확인할 수 있다.

여기서는 /opt/ml/.jupyter/jupyter_notebook_config.py에 생성되었다.

1645436020694

 

 

jupyter에 접속할 비밀번호 설정하기

 

jupyter notebook password로 접속할 때 필요한 비밀번호를 설정한다.

1645436679876

 

처음에 설정할 비밀번호를 입력하고, 확인용으로 다시 한 번 같은 비밀번호를 입력한다.

1645436694449

이 방법 말고도 ipython으로도 비밀번호를 설정할 수도 있으니 참고바란다.

 

 

 

jupyter_notebook_config.py 파일 수정하기

 

위에서 얻은 경로로 접근하여 에디터를 통해 직접 jupyter_notebook_config.py를 수정한다.

.jupyter 디렉토리를 찾기 어려우면 ls -a를 이용한다.

1645436269155

 

파일을 보면 여러 설정의 예시들이 주석 처리되어 있는 걸 볼 수 있다.

1645436649812

 

수정하고 싶은 설정의 줄을 직접 찾아서 주석을 제거하여 설정해도 되고, 아니면 주석 밑에 새로운 설정을 추가해도 된다.

여기서는 주석을 지우지 않고 맨 밑에 새로운 설정을 추가하겠다.

1645436839107

위에 적힌 예시 외의 다양한 설정들이 존재하지만, 개인적으로 필요한 것들만 우선 설정했다.

  • c.NotebookApp.port: 접속할 포트를 지정한다. 서버를 생성할 때 할당받은 포트 중 원하는 번호를 입력하면 된다.
  • c.NotebookApp.ip: 원격 서버의 내부 IP 주소를 입력한다. ssh에 접속한 상태에서 root@ 뒤에 있는 (빨간색으로 밑줄 친)주소를 설정하면 된다. 1645441876747
  • c.NotebookApp.allow_root: jupyter를 실행할 때 관리자 권한으로 실행하는 것을 허용할지를 정한다.
  • c.NotebookApp.notebook_dir: 외부에서 jupyter 인터페이스에 처음 접속했을 때 나오는 경로를 설정한다.
  • c.NotebookApp.open_browser: 서버에서 jupyter를 실행했을 때 브라우저를 자동으로 띄울지를 결정한다. 로컬 컴퓨터가 아니므로 브라우저를 띄우지 않도록 False로 설정한다.

 

 

 

jupyter 실행하고 원격으로 접속하기

 

jupyter-lab로 서버에서 jupyter를 실행한다.

1645438863536

 

이제 로컬 컴퓨터 브라우저에 [Public IP]:[Port] 또는 [Public IP]:[Port]/lab로 접속하고 비밀번호를 입력하면 정상적으로 접속이 가능하다.

1645439135701

 

 

실행 중인 jupyter를 종료하려면 접속한 jupyter에서 FileShut Down을 누르거나 ssh로 접속 중인 터미널에서 'CTRL + C'를 입력하여 아예 종료할 수도 있고, 터미널에서 CTRL + Z를 입력하여 실행 중인 jupyter를 멈출 수 있다.

1645439277692

앞서 실행한 jupyter를 미리 종료하지 않고 여러 번 jupyter를 실행하면 여러 개의 jupyter 프로세스가 새로운 포트 번호를 할당받아 실행된다는 점에 유의한다.

 

 

 

 

Jupyter를 항상 실행 가능하도록 하기

 

앞서 진행한 방법으로 jupyter를 실행 중인 상태에서 ssh 접속을 종료하면 실행 중인 jupyter도 꺼지는 단점이 있다.

그래서 실행 중인 jupyter를 백그라운드로 실행할 수 있도록 넘기거나 nohup을 이용하여 언제든지 jupyter에 접속할 수 있도록 해야한다.

 

 

첫 번째 방법: 백그라운드로 프로세스 넘기기

  1. jupyter-lab 실행하고 접속하기
  2. 실행 중인 jupyterCTRL + Z로 멈추기
  3. bg 입력하기
  4. disown -h 입력하기

 

터미널로 jupyter-lab을 실행하고 로컬 컴퓨터로 jupyter notebook 또는 jupyter lab에 접속한 후 다시 터미널에서 CTRL + Z를 입력하면 실행 중인 jupyter 프로세스가 멈춘다.

1645439902903

이후 bg를 입력하여 백그라운드 프로세스로 만들고 disown -h를 입력하면 프로세스에 대한 소유권이 없어져서 백그라운드로 프로세스가 계속 실행된다.

1645440000267

 

백그라운드로 넘긴 프로세스를 종료하려면 위에서 언급한 바처럼 jupyter에 웹으로 접속하여 Shut Down을 눌러 종료하거나, 터미널 상에서 다음과 같은 방법으로 멈출 수 있다.

 

서버에 lsof 유틸리티를 설치한다. ubuntu 환경에서는 apt-get install lsof로 설치할 수 있다.

1645440223966

 

lsof -n -i4TCP로 실행 중인 프로세스를 확인한다.

1645440323661

본인이 설정한 jupyter 실행 포트에 있는 프로세스 ID(PID)를 확인한다. 위에서는 483이 실행중인 프로세스 번호이다.

 

kill -9 [프로세스 번호]로 종료하고자 하는 프로세스를 종료한다.

1645440557833

앞에서 소개한 방법은 PID를 찾아야한다는 번거로움으로 있는데, ps -f, pkill 등 다른 명령어로 프로세스 이름으로도 원하는 프로세스를 한번에 종료할 수도 있다.

 

 

 

두 번째 방법: nohup으로 실행하기

 

nohup 커맨드는 리눅스 또는 유닉스에서 프로세스를 실행한 터미널의 연결이 끊어져도 계속 실행할 수 있도록 하는 명령어이다.

1645440798718

 

 

Jupyter 실행 자동화하기

 

cron이라는 스케줄러를 통해 jupyter notebook으로 작성한 ipynb가 주기마다 자동적으로 실행하도록 할 수 있다.

crontab -e로 실행 주기와 스크립트 파일을 지정할 수 있다.

 

예를 들어, 매 30분을 주기로 원하는 환경변수 설정으로 jupyter notebook이 실행되고, 그 결과를 log로 저장하려면 crontab -e를 입력하고 다음과 같이 작성한다.

*/30 * * * * [환경변수를 설정하는 스크립트 파일(.sh)] && [jupyter를 실행하도록 하는 스크립트 파일(.sh)] >> [실행 결과를 log로 기록할 디렉토리 또는 파일 경로]

 

현재 설정해 놓은 crontab 내용을 확인하려면 sudo crontab -l로 확인한다.

Contents

글 주소를 복사했습니다

부족한 글 끝까지 읽어주셔서 감사합니다.
보충할 내용이 있으면 언제든지 댓글 남겨주세요.