[AWS EC2] AWS EC2에서 Jupyter Notebook 환경 구축 본문

AWS/EC2

[AWS EC2] AWS EC2에서 Jupyter Notebook 환경 구축

최재강 2021. 8. 19. 14:53

python과 관련된 코드로 과제를 하거나 연구를 할 때에 Jupyter Notebook을 많이 활용합니다.

보통 local 환경에서는 (자기 노트북, 데스크탑 등) 많이들 손쉽게 Jupyter Notebook을 실행하여 진행하지만 클라우드 환경인 AWS EC2와 같은 환경에서는 활용하지 못하는 경향이 있는 듯 합니다.

그래서 이번 포스팅에서는 AWS EC2환경에서 어떻게 Jupyter Notebook을 실행하여 사용할 수 있을 지 안내합니다.

AWS EC2 ubuntu 18 환경을 기준으로 작성하였습니다.

Jupyter Notebook 실행 환경 구성

1. jupyter notebook을 설치

sudo apt-get update
sudo apt-get install python3-pip
sudo pip3 install notebook
  1. 이미 jupyter notebook 이 설치된 가상환경 실행
source activate [가상환경 이름]

jupyter notebook을 위한 패스워드 설정

python을 실행 합니다

python3

아래와 같이 코드를 입력한 후

from notebook.auth import passwd
passwd()

원하는 password를 입력합니다 verify password에 같은 password를 입력합니다.

박스에 'argon~~' 과 같은 해쉬값을 확인할 수 있습니다 필요한 값이니 따로 메모장 등에 기록해둡니다.

생성한 password를 아래의 명령어로 jupyter에 적용합니다

y/n 문구가 나온다면 y를 입력하여 진행합니다.

jupyter notebook --generate-config

그리고 아래와 같이 jupyter 구성 파일에 수정을 하기 위해 접근합니다.

sudo vim /home/ubuntu/.jupyter/jupyter_notebook_config.py

파일의 맨 아래로 내려간 후 아래와 같이 작성합니다.

c = get_config()
c.NotebookApp.password = '[패스워드 해쉬값]'
c.NotebookApp.ip = '[인스턴스의 private ip]'
c.NotebookApp.notebook_dir = '/home/ubuntu'

[패스워드 해쉬값]에 아까 록해둔 해쉬값을 씁니다.

[인스턴스의 private ip] 는 연결한 터미널의 ubuntu@[private ip]로 확인하거나 AWS 콘솔창에서 확인하실 수 있습니다.

접속을 위한 port 열어주기

AWS EC2에 jupyter notebook을 실행하면 저희는 웹상에서 해당 인스턴스의 ip와 port를 통해 접속할 수 있습니다. 하지만 인스턴스에 방화벽이 걸려있고 보안 그룹에서 해당 port를 열어주어야 합니다.

기본적으로 8888 port를 사용하므로 8888 port에 대한 보안 그룹을 할당합니다

보안 그룹 할당에 대해서는 자세한 내용은 해당 링크에 보안 그룹에 규칙 추가 섹션을 참조하시면 좋을 것 같습니다
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/working-with-security-groups.html

Jupyter Notebook 실행하고 접속하기

이제 아래의 명령어로 jupyter notebook을 실행합니다.

sudo jupyter-notebook --allow-root

그 후 로컬 환경에서 ( 노트북, 데스크탑 등) 웹 브라우저를 열고 [인스턴스의 public ip]:8888 에 들어갑니다.

인스턴스의 public ip도 AWS 콘솔에서 확인할 수 있습니다.

아래와 같은 화면이 떳다면 지정한 패스워드를 입력한 후 과제나 실험을 진행합니다 !

추가적으로 도움이 될 수 있는 작업

1. Jupyter Notebook에 가상 환경 등록

과제나 실험을 하다보면 특정 가상환경에서 jupyter notebook을 실행해야하는 경우가 있습니다. 하지만 jupyter notebook에는 python2, python3와 같은 스탠다드한 버전만 있는 경우가 있습니다.

이럴 때 해당 가상환경을 jupyter notebook에 등록하여 사용할 수 있도록 세팅합니다.

먼저 아래 명령어로 .local 폴더의 권한을 변경하여 가상환경을 등록할 수 있도록 합니다.

sudo chmod -R 777 .local

그다음 해당 가상 환경을 우선 실행합니다

source activate [가상 환경 이름]

그리고 아래 명령어로 jupyter notebook에 가상환경을 등록합니다

python -m ipykernel install --user --name [가상 환경 이름] --display-name [등록한 가상 환경이 보여질 이름]

그러면 아래 빨간 박스와 같이 등록한 가상환경을 쓸 수 있게 됩니다.

 

 

2. Jupyter Notebook kernel die 방지

사용하다 보면 kernel이 죽어 restart해야한다는 문구를 볼 수 있습니다.
이를 방지하기 위해 jupyter notebook에 할당할 메모리양을 늘려 줍니다.

아래의 명령어로 jupyter 구성을 수정하기 위해 파일을 엽니다

sudo vim /home/ubuntu/.jupyter/jupyter_notebook_config.py

맨 밑으로 내려가 해당 코드를 추가해줍니다.

c.NotebookApp.max_buffer_size = 10000000000

디폴트 값보다 약 18배 많은 비트 수를 할당합니다. 인스턴스의 디스크 메모리를 고려하여 적절히 할당해줍니다.

 

 

3. Jupyter Notebook 백그라운드 실행

AWS EC2에서 jupyter를 쓰다가 콘솔화면이 예기치 않게 꺼지면 수행하던 작업이 강제로 멈추게 될 수 있습니다.

따라서 콘솔이 다운되더라도 jupyter notebook에 영향이 없도록 백그라운드에서 실행할 수 있도록 설정합니다.

아래와 같이 jupyter를 실행시킨 후 ctrl + z를 통해 주피터 서버를 중지 시킵니다.

sudo jupyter-notebook --allow-root

bg 명령어를 입력하여 jupyter가 백그라운드로 동작할 수 있도록 하고
disown -h 명령어로 소유권을 포기하여 사용자 터미널에 연결되지 않더라도 실행될 수 있도록 구성합니다.

bg
disown -h

자 이제 터미널에 연결되지 않더라도 웹 상에서 jupyter notebook에 접속할 수 있게 되었습니다.

참조

'AWS > EC2' 카테고리의 다른 글

[AWS EC2] Graviton2 기반 EC2 인스턴스 소개  (0) 2021.12.12
Comments