본문 바로가기

ML & AI/kubeflow

MiniKF - Jupyter Notebook 커스텀(기본)

Jupyterlab의 기본 이미지를 사용하여 Custom Notebook을 만든다.

 

1. Dockerfile 생성
FROM python:3.6

WORKDIR /home/vacance
USER root

RUN pip install jupyter -U && pip install jupyterlab

RUN apt-get update && apt-get install -yq --no-install-recommends \
       apt-transport-https \
       build-essential \
       bzip2 \
       ca-certificates \
       curl \
       g++ \
       git \
       gnupg \
       graphviz \
       locales \
       lsb-release \
       openssh-client \
       sudo \
       unzip \
       vim \
       wget \
       zip \
       emacs \
       python3-pip \
       python3-dev \
       python3-setuptools \
       && apt-get clean && \
       rm -rf /var/lib/apt/lists/*

RUN curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

RUN echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list

RUN apt-get update

RUN apt-get install -y kubectl

RUN pip install jupyterlab && \ jupyter serverextension enable --py jupyterlab --sys-prefix

ARG NB_USER=vacance
EXPOSE 8888 ENV

NB_USER $NB_USER
ENV NB_UID=1000
ENV HOME /home/$NB_USER
ENV NB_PREFIX /

CMD ["sh", "-c", "jupyter lab --notebook-dir=/home/vacance --ip=0.0.0.0 --no-browser --allow-root --port=8888 --LabApp.token='' --LabApp.password='' --LabApp.allow_origin='*' --LabApp.base_url=${NB_PREFIX}"]

[필수 실행명령]

  • 작업 디렉토리 설정 : --notebook-dir=/home/vacance
  • 쥬피터 노트북 네트워크 설정 : --ip=0.0.0.0
  • Root 권한 설정 : --allow-root
  • Port 설정 : --port=8888
  • 인증해제 설정 : --NotebookApp.token=''     --NotebookApp.password=''
  • orign 설정 : --NotebookApp.allow_origin='*'
  • Base URL 설정 : --NotebookApp.base_url=$NB_PREFIX (NB_PREFIX는 바드시 변수로 선언되어야함)
2. Docker 빌드
docker build -t spansite/dship:kflow-jupyterlab-custom01 .

(생략)

3. Docker 푸시 (도커 레지스트리에 접근 가능해야함. Dockerhub 사용 시 "docker login" 수행)
docker push spansite/dship:kflow-jupyterlab-custom01

Github에 이미지 업로드

4. Kubeflow Central Dashboard에서 새로운 Notebook Server를 생성하고, 빌드한 커스텀 이미지를 사용하여 Notebook 생성

Git저장소에 푸시한 Custom 이미지 설정
Notebook 서버 생성

5. 결과확인
  • Dashboard에서는 아래와 같이 Notebook의 상태를 확인할 수 있다.

Kubeflow 대시보드

  • k9s에서는 Notebook이 생성되는 네임스페이스를 통해 아래와 같이 Notebook Pod의 상태와 Log를 확인할 수 있다.

k8s 네임스페이스 확인
kubeflow-user 네임스페이스 내 Custom Notebook Pod 생성
Custom Jupyter Notebook 로그확인


단순히 Jupyter lab을 실행하는 Custom Notebook을 만들어보았다. 하지만 실제로 머신러닝 트레이닝을 위해서는 fairing, pipeline Library를 포함하여 Custom Notebook을 만들어야 한다.

그러면 Jupyter Notebook에서 fairing과 pipeline을 통해 python 코드를 kubeflow에 배포하여 머신러닝 학습 및 서비스가 가능하다.