ADP 시험을 위한 Jupyter Notebook 환경 구축

 · 4 mins to read

Introduction

  • 한국데이터산업진흥원 주관 ADP(Advanced Data analytics Professional) 실기 수험생 중, Python을 사용하는 분들이 시험장에서 마주할 Jupyter notebook 환경을 Docker image로 작성하였습니다.
  • 이 문서와 관련된 모든 파일들은 제 개인 github에 있습니다. 혹시 Dockerfile을 다루는 데 능숙하시다면, Dockerfile을 직접 수정하여 환경을 고치는 것도 가능합니다.
  • Github link: https://github.com/hjben/adp/tree/master/docker

Prerequisites

  • Docker image는 최신 버전을 기준으로 Macbook Pro M2, Docker desktop for Mac 4.22.0 버전에서 작성되었으며, 아래의 Docker image 실행 환경도 동일합니다.
  • Windows 환경에서도 구동 가능하지만 소소한 불편함이 발생할 수 있습니다. 가능하면 Linux shell 기반의 OS(MacOS, Ubuntu Linux 등)에서 작업하시는 것을 추천드립니다.

Docker container construction

1. Install & Run docker

  • 먼저 Docker를 설치합니다. Docker 관련 명령어를 사용하려면 Docker 프로그램이 실행 중이어야 합니다.
  • Linux에서는 패키지 설치 관리자(apt, yum 등)로 설치 가능하며, Mac/Windows PC의 경우 Docker desktop을 설치하면 됩니다.

2. Download docker image

Docker 서비스가 실행 중인 상태에서 CLI(=Command Line Interface, 터미널, PowerShell 등의 명령어 입력기)을 열고, Docker image를 다운로드 받습니다. 다운로드 명령어 사용 시 지정해야 하는 image_version 파라미터는 ‘1.{시험회차}-{[arm64/amd64]}’ 형태로 구성되어 있고, 입력 방법은 아래와 같습니다.

  • 시험회차에는 ADP 시험 회차를 숫자(자연수)로 입력합니다. 시행 1주일 전 사용 패키지가 공개되므로, 이미 시행된 회차를 입력해야 합니다. (e.g. 32)
  • arm64/amd64 부분은 사용하는 PC의 CPU 아키텍쳐로, Apple silicon Mac 또는 arm64 CPU로 설정한 클라우드 서버의 경우에만 arm64를 사용하면 됩니다. 그 외 Intel CPU Mac과 Windows/Linux PC는 amd64 입니다.
  • 최신 버전을 의미하는 ‘latest’ 버전은 2024.07.14 기준으로 ‘1.32-arm64’ 버전 image와 동일하며, image_version을 생략할 경우 latest가 지정됩니다.
docker pull hjben/adp-python:{image_version}

e.g.

docker pull hjben/adp-python:1.32-arm64

3-1. Generate docker container (Using Automated shell)

(0) (Windows의 경우) CMD나 PowerShell에서는 ‘sh’ 확장자 파일을 실행할 수 없어서 별도 프로그램이 필요한데, 프로그램에 따라 추가 작업이 필요하거나 실행이 불가할 수도 있습니다. 따라서 3-2 단락의 방법을 추천드립니다.

(1) 위 Github 링크에서 docker-script 경로에 있는 shell 파일 2개 (container-init.sh, container-remove.sh)를 다운로드 받습니다.

(2) CLI에서 앞서 다운로드 받은 ./container-init.sh 를 실행시켜서 Docker image를 실행시킵니다. Shell script의 Parameter는 정해진 순서대로 사이에 공백을 하나씩 넣어서 입력합니다. 파라미터 순서와 종류는 아래와 같습니다.

  • container_name: Docker container 이름 (사용자가 지정)
  • image_version: 사용할 Docker image 버전. 앞서 다운로드 받은 image의 버전을 지정합니다.
  • port: Jupyter notebook을 사용할 포트 번호 (사용자가 지정). 사용 중인 다른 Jupyter가 없는 경우 8888을 추천합니다.
  • workspace_path: 환경에 연결할 작업 path로, Jupyter notebook 환경에서 작업하는 파일이 저장되는 로컬 PC 경로입니다. 파일 구분자(‘/’)는 OS에 따라 달라질 수 있습니다.
  • resource_limit: Docker container에 자원 제한을 걸 지 여부로, Optional입니다. 입력하지 않으면 시험장 환경인 2C CPU에 4G Memory로 제한이 걸리고, unlimited를 지정하면 자원 제한을 걸지 않습니다.
./container-init.sh {container_name} {image_verion} {port} {workspace_path} {resource_limit}

e.g.

./container-init.sh test-adp latest 8889 /Users/hyunjoong/Documents/workspace/notebook_base/adp unlimited

(3) 실행이 완료되면 아래와 같이 로그가 발생하면서 Jupyter notebook 실행되는 것을 볼 수 있습니다. 로그 아래쪽에 있는 http://({container ID} or 127.0.0.1):8888/?token= 뒤에 있는 값이 로그인에 필요한 토큰입니다.

notebook-log

Jupyter notebook 접속은 웹 브라우저에 접속한 후 localhost:{사용자 지정 포트}로 할 수 있습니다.

notebook-main


로그인 화면에서 노트북 비밀번호 설정도 가능하지만, 컴퓨터 재부팅 등으로 Docker container가 중지되면 원상복구되어 다시 토큰으로 로그인해야 합니다.

(4) 다른 CLI를 열고 ./container-remove.sh 명령어를 수행하여 실행 중인 Jupyter notebook을 중지시킬 수 있습니다. 명령어 수행 시 container_name 파라미터로 중지하고 싶은 Container 이름을 지정해야 합니다.

3-2. Generate docker container (Manual)

(1) CLI를 열고, 아래의 두 Docker 명령어를 직접 수행하여 Container를 생성할 수 있습니다. Parameter들은 2-1 단락에서 서술한 container-init.sh 파일의 Parameter와 동일합니다.

docker run --name {container_name} -d -t -p {port}:8888 -v {workspace_path}:/workspace/Jupyter hjben/adp-python:{image_version}
docker exec -it {container_name} bash -c "jupyter-notebook --ip=0.0.0.0"

(2) 실행이 완료되면 로그가 발생하면서 Jupyter notebook 실행되는 것을 볼 수 있습니다. 로그 아래쪽에 있는 http://({container ID} or 127.0.0.1):8888/?token= 뒤에 있는 값이 로그인에 필요한 토큰입니다.

(3) 다른 CLI를 열고, 아래 Docker 명령어를 직접 수행하여 실행 중인 Jupyter notebook을 중지시킬 수 있습니다.

docker rm -f {container_name}

Jupyter notebook information

1. OS & Python Version

  • 각각 Ubuntu 16.04, Python 3.7.4로 시험장 버전과 동일합니다.

2. Font

  • 한글 폰트로 맑은 고딕(malgun.ttf)이 설치되어 있으며, 설치 경로는 /usr/share/fonts/truetype/ 입니다.

3. Data Path

  • Container 내부의 기본 경로는 시험장의 dataset 경로에 맞추어 /workspace/Jupyter 입니다.
  • 로컬의 {workspace_path} 경로가 Container 내부의 /workspace/Jupyter 경로와 동기화됩니다. 로컬의 {workspace_path} 경로에 파일을 복사하면 Jupyter notebook 내 /workspace/Jupyter 경로 하위에 들어가며, 반대 케이스도 가능합니다.

4. Python Packages

  • Python 패키지 버전은 ADP실기 시험안내를 참고하였으며, 패키지 추가/변경에 대응하여 꾸준히 업데이트 할 예정입니다.
  • 패키지는 가능한 비슷한 버전으로 구성했지만 실제 시험장의 환경과는 차이가 있으며 일부 기능이 동작하지 않을 수도 있습니다.
  • 다음은 시험장에는 있지만, 현재 시점에서 설치가 불가능하여 Docker image에 없는 패키지 목록입니다.
    mkl-fft==1.0.11
    mkl-random==1.0.2
    PyQt5==5.12
    spyder==3.3.3
    Keras==2.2.4
    
  • 또한, 다음은 시험장 환경과 버전 차이가 있는 패키지 목록입니다. 딱 맞는 버전 설치가 불가능했거나, Dependency에 따라 버전이 변경된 패키지들입니다.
    absl-py==1.0.0
    attrs==19.3.0
    blis==0.7.4
    catboost==1.2
    graphviz==0.8.4
    grpcio==1.24.3
    importlib-metadata==0.23
    ipywidgets==7.5.1
    Jinja2==2.11.1
    joblib==1.0.0
    jupyter-client==6.1.5
    Keras-Preprocessing==1.1.1
    lief==0.11.0
    llvmlite==0.30.0
    matplotlib==3.2.0
    mxnet==1.9.0
    nbformat==5.0.2
    networkx==2.4
    pandas-profiling==3.0.0
    phik==0.11.1
    preshed==3.0.2
    protobuf==3.9.2
    pycodestyle==2.6.0
    pyflakes==2.2.0
    pygame==2.0.2
    Pygments==2.4.1
    requests==2.24.0
    seaborn==0.11.0
    smart-open==5.2.1
    spacy==3.1.0
    srsly==2.4.3
    tensorboard==2.10.0
    tensorflow==2.10.0
    tensorflow-estimator==2.10.0
    thinc==8.0.7
    torch==1.8.0
    tqdm==4.48.2
    wasabi==0.8.1
    Werkzeug==1.0.1
    zope.interface==4.7.2
    
  • 아래 패키지들은 시험 공부 중 필요에 의해 추가 설치한 패키지로, Docker image에 포함되어 있습니다. 2024.07.14 기준 최신 버전이 설치되어 있습니다.
    stemgraphic
    kendall-w
    gower
    hdbscan
    scikit-learn-extra
    sklearn-som
    minisom
    factor_analyzer
    nltk
    wordcloud
    pydotplus
    bioinfokit
    fisher-test-python