본문으로 건너뛰기

GPU에서 Jupyter Notebook 환경 구성

카카오클라우드 GPU 서비스를 이용하여 Jupyter Notebook을 구축하는 실습을 진행합니다.

기본 정보

시작하기 전에

본 문서는 데이터 분석 및 시각화에 유용한 Jupyter Notebook을 카카오클라우드의 고성능 GPU 서비스와 결합하여 구축하는 과정을 설명합니다. Jupyter Notebook은 Jupyter에서 제작한 Python용 통합 개발 환경 중 하나로 웹 기반 오픈소스 애플리케이션으로, 코드, 설명, 수식, 그래프 등을 쉽게 사용하고, 데이터를 시각화할 수 있어 데이터 분석에 널리 사용됩니다.
Jupyter Notebook을 카카오클라우드의 GPU 환경에 구축함으로써, 데이터 처리와 모델 훈련을 더 빠르게 수행하고, 보다 효율적으로 연구 및 개발 속도를 향상할 수 있습니다.

작업 순서

Step 1. NVIDIA GPU 환경 설정

카카오클라우드 GPU 인스턴스에서 NVIDIA GPU 드라이버와 라이브러리를 설치합니다. 이는 Jupyter Notebook 환경을 구성하기 위한 기본적인 설정입니다.

  1. NVIDIA GPU 환경 설정 문서를 참고하여 필요한 드라이버와 라이브러리를 설치합니다.

  2. GPU 인스턴스 호스트의 8080 포트에 접근 가능하도록 Security Group의 인바운드 정책을 설정합니다. 이 단계는 Jupyter Notebook에 원격으로 접속하기 위해 필수적입니다.

    1. 카카오클라우드 콘솔 > VPC > Security Group 탭으로 이동 후, [인바운드 정책 관리] 버튼을 클릭합니다.

    2. 인바운드 정책 탭에서 다음의 인바운드 정책을 추가합니다.

      프로토콜패킷 출발지포트 번호정책 설명 (선택)
      TCP{나의 Public IP}/328080Jupyter Notebook
  3. 프라이빗 키 파일이 위치한 경로로 이동합니다.

  4. 다음 명령어를 실행하여 생성한 인스턴스에 접속합니다.

    ssh ubuntu@${GPU_PUBLIC_IP} -i ${PRIVATE_KEY_FILE}
    #작업 진행의 편의를 위해 루트 권한으로 접근합니다.
    sudo -i
    파라미터유형필수 여부설명
    GPU_PUBLIC_IPString필수GPU 환경에서 접속할 인스턴스의 Public IP 주소
    PRIVATE_KEY_FILEString필수프라이빗 키 파일
  5. 다음 명령어를 실행하여 NVIDIA 드라이버 및 환경 설치를 확인합니다.

    nvcc -V
    # nvcc: NVIDIA (R) Cuda compiler driver ...

Step 2. Jupyter Notebook 환경 구성

  1. 다음 명령어를 이용하여 Python 3.8 버전을 설치하고, 설치된 버전을 확인합니다.

    # python 3.8 설치
    apt-get update -y
    apt-get install python3.8 -y
    python3 --version
  2. Jupyter Notebook의 설치 및 환경 관리를 위해 Anaconda를 사용합니다. 먼저 Anaconda 설치 파일을 다운로드합니다.

    wget https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-x86_64.sh
  3. 다운로드한 파일을 실행하여 Anaconda를 사용자의 VM에 설치합니다.

    sh Anaconda3-2022.05-Linux-x86_64.sh
  4. 계속 설치를 진행하기 위하여 Enter를 입력합니다.

    # In order to continue the installation process, please review the license
    # agreement.
    # Please, press ENTER to continue
    # >>> ## 'Enter' "키를 입력합니다" ##
  5. Anaconda를 설치하기 위해서 EULA 등 라이선스에 동의합니다. 화면의 내용을 확인 후, q 키를 입력하여 다음 절차로 넘어갈 수 있습니다.

    # ==================================================
    # End User License Agreement - Anaconda Distribution
    # ==================================================
    #
    # Copyright 2015-2022, Anaconda, Inc.
    # ...
    # --More--
    # >>> ## 'q' "키를 입력합니다." ##
  6. EULA 라이선스에 동의한다면 yes를 입력합니다.

    # Do you accept the license terms? [yes|no]
    # [no] >>> ## 'yes' "를 입력합니다" ##
  7. Enter 키를 입력하여 설치를 시작합니다.

    # - Press ENTER to confirm the location
    # - Press CTRL-C to abort the installation
    # - Or specify a different location below
    #
    # [/root/anaconda3] >>> ## 'Enter' "키를 입력합니다" ##
  8. 설치가 성공적으로 끝나면, 아래와 같이 환경변수를 설정합니다. conda 명령어를 이용하여 정상 설치를 확인합니다.

    export PATH=~/anaconda3/bin:$PATH 

    # 아래로 설치되었는지 확인
    conda help

Step 3. Jupyter Notebook 설치 및 실행

  1. Jupyter Notebook을 설치하고 설정 파일을 생성합니다.

    conda install jupyter-notebook
    jupyter-notebook --generate-config
  2. printf 명령어를 통해 Jupyter Notebook 접속에 사용할 비밀번호를 암호화합니다.

    printf "from notebook.auth import security\nsecurity.passwd()\n" | ipython
    # Enter password: ${원하는 비밀번호 입력}
    # Verify password: ${이전에 입력한 비밀번호 입력}

    비밀번호로 test를 입력하는 예제로, Out[2]: 뒤로 암호화된 비밀번호의 문자열이 출력됩니다. 이 값을 따로 복사해 저장합니다.

    In [2]: Enter password: test
    Verify password: test
    Out[2]: 'argon2:$argon2id$v=19$m=10240,t=10,p=8$oBt2YGaflk+sL3Lq60urcg$4Vc/yVxAR1x43bzlEDNy/Viu+U0kfOBDXbnsIdquEeI'
  3. Jupyter Notebook 설정 파일에서 접근 아이피와 포트 등을 작성합니다. 아래 sed 명령어를 통해 작업을 수행할 수 있습니다.

    sed -i "s/$(cat ~/.jupyter/jupyter_notebook_config.py \
    | grep c.NotebookApp.ip)/c.NotebookApp.ip = '0.0.0.0'/g" \
    ~/.jupyter/jupyter_notebook_config.py

    sed -i "s/$(cat ~/.jupyter/jupyter_notebook_config.py \
    | grep "c.NotebookApp.port =")/c.NotebookApp.port = 8080/g" \
    ~/.jupyter/jupyter_notebook_config.py
  4. 미리 복사 및 저장한 암호화된 문자열을 이용하여 Jupyter Notebook의 설정 파일에 비밀번호를 작성합니다.

    sed -i "s|^c\.NotebookApp\.password =.*$|c.NotebookApp.password = '${ENCRYPTED_PW}'|g" ~/.jupyter/jupyter_notebook_config.py
    파라미터유형필수 여부설명
    ENCRYPTED_PWString필수Jupyter Notebook에 접속할 암호화된 비밀번호
    - Out[2] 뒤에 오는 값
  1. 암호화된 비밀번호가 제대로 입력되었는지 확인합니다.

    # 이전에 환경변수로 지정한 문자열이 출력되는지 확인합니다.
    cat ~/.jupyter/jupyter_notebook_config.py | grep "c.NotebookApp.password ="

    # 결과 예시
    c.NotebookApp.password = 'argon2:$argon2id$v=19$m=10240,t=10,p=8$oBt2YGaflk+sL3Lq60urcgs4Vc/yVxAR1x43bzlEDNy/Viu+U0kfOBDXbnsIdquEeI'
  2. 설정 완료 후 Jupyter Notebook을 8080 포트에서 실행합니다.

    mkdir -p ~/jupyter
    nohup jupyter notebook --allow-root > ~/jupyter/jupyter.out 2>&1 & echo $! > ~/jupyter/jupyter.pid

    # jupyter notebook이 열려있는지 확인합니다.
    sleep 3
    curl http://localhost:8080/login
  3. 사용할 라이브러리를 설치합니다.

    pip3 install numpy
    pip3 install pandas
    pip3 install matplotlib
    pip3 install seaborn
    pip3 install scikit-learn
    pip3 install tensorflow==2.5.0 --use-deprecated=legacy-resolver
    pip3 install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 \
    --extra-index-url https://download.pytorch.org/whl/cu113
  4. 예제가 작성된 파일을 다운로드합니다.

    git clone -b jupyter-notebook https://github.com/kakaoenterprise/kc-handson-config.git
    mv ./kc-handson-config/hands-on-test.ipynb ./hands-on-test.ipynb

Step 4. Jupyter Notebook 환경 접속

  1. 생성된 Jupyter Notebook 프로세스를 확인한 후, 브라우저에서 ${GPU_PUBLIC_IP}:8080/login으로 접속합니다.

  2. 설정한 비밀번호를 입력하여 접속합니다.

    접속 확인

  3. 비밀번호를 입력하면 Jupyter Notebook 작업 디렉터리 페이지에 접속할 수 있습니다. 다운로드한 handson-on-test.ipynb 파일에 접근합니다.

    Jupyter Notebook 작업 디렉터리 페이지

  4. 예제 코드로 “Hello kakaocloud!”를 실행하여 결과를 확인합니다.

    jupyter-실행 결과 확인