MLOps

[MLOps] 쿠브플로우 주피터 노트북 서버 - 커스텀 이미지 사용

by seokii 2023. 1. 19.
728x90
반응형

GitHub

MLOps 및 Kubeflow 관련 코드 내용은 GitHub에서 관리하고 있습니다.

https://github.com/Seokii/Study-MLOps

 

GitHub - Seokii/Study-MLOps: Study MLOps with Kubeflow

Study MLOps with Kubeflow. Contribute to Seokii/Study-MLOps development by creating an account on GitHub.

github.com

 

 

주피터 노트북 서버

https://seokii.tistory.com/205

 

[MLOps] 쿠브플로우 주피터 노트북 서버 만들기

GitHub 쿠브플로우 관련 코드 내용은 GitHub에서 관리하고 있습니다. https://github.com/Seokii/Study-MLOps GitHub - Seokii/Study-MLOps: Study MLOps with Kubeflow Study MLOps with Kubeflow. Contribute to Seokii/Study-MLOps development by c

seokii.tistory.com

기본적인 주피터 노트북 서버 만들기에 대한 내용은 전에 다루었습니다.

이번에는 도커를 사용해 커스텀 이미지로 주피터 노트북 서버를 만들어봤습니다.

 

쿠브플로우에서 기존 제공하던 이미지로 주피터 노트북 서버를 만들다보니,

필요한 패키지를 매번 설치해야되는 불편함이 있어서 커스텀 이미지로 만들고자 시도해봤습니다.

커스텀 이미지에 넣고자 하는 패키지들은 다음과 같습니다.

  • ML에 필요한 기본적인 라이브러리들 (pandas, numpy, scikit-learn)
  • kubeflow-fairing + msrestazure(페어링을 불러올 때 항상 설치해야함)
  • kfserving (페어링 설치 시 의존성)
  • kfp (파이프라인 작성)
  • tensorflow
  • torch
  • mlflow

무엇보다도 텐서플로우와 파이토치를 같이 쓸 수 있는 서버를 만들어보고자 커스텀 이미지를 만들었습니다.

 

 

Dockerfile

# Study-MLOps/1.Jupyter Notebook Server/make_custom_image/Dockerfile

FROM python:3.8

WORKDIR /home/jovyan

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


# Install base python3 packages
RUN pip3 --no-cache-dir install \
    kubeflow-fairing==1.0.2 \
    msrestazure==0.6.4 \
    kfp==1.7.0 \
    scikit-learn==1.0.1 \
    mlflow==1.21.0 \
    dill==0.3.4 \
    numpy==1.20.0 \
    kfserving==0.4.0 \
    pandas==1.3.5 \
    xgboost \
    tensorflow==2.8.0 \
    torch==1.10.0


# Configure container startup
ARG NB_USER=jovyan

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/jovyan --ip=0.0.0.0 --no-browser --allow-root --port=8888 --LabApp.token='' --LabApp.password='' --LabApp.allow_origin='*' --LabApp.base_url=${NB_PREFIX}"]

위와 같이 도커 파일을 작성했습니다.

파이썬 이미지에 주피터 랩과 필요한 패키지들을 설치하는 식으로 작성했습니다.

아래쪽은 쿠브플로우에서 요구하는 기본 환경 세팅들을 작성했습니다.

 

docker build -t seokii/kubeflow-jupyter-custom:0.0.3 .
docker push seokii/kubeflow-jupyter-custom:0.0.3

연결된 도커 허브에 도커 이미지를 빌드하고, 푸시했습니다.

(중간에 여러 실패 과정을 거쳐 0.0.1씩 버전을 올리다보니 0.0.3이 되었습니다.)

도커 이미지를 빌드하는 시간이 생각보다 오래걸렸습니다. (1시간 좀 넘게)

 

 

커스텀 이미지 서버 생성과 오류 해결

kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80

포트 포워드를 통해 쿠브플로우 대시보드에 접속합니다.

 

 

도커 이미지를 선택하는 부분에서 푸시했던 도커 이미지를 지정합니다.

부가적인 다른 부분들의 설정을 마치고 서버를 생성합니다.

 

(+ 2023.01.20 내용추가)

주피터 노트북 서버를 재생성하니 오류가 사라졌습니다.

 

(404 에러 발생과 임시 해결방법)

도커 이미지를 불러와 커스텀 이미지를 생성하면서,

pod의 상태가 pending인 상태부터 해결을 하고 현재 서버까지는 생성했지만,

connect 버튼을 눌러 접속하면 404 에러가 발생하는 상황입니다.

 

 kubectl port-forward pod/study-mlops-0 -n kubeflow-user-example-com 8888

현재 생성한 노트북 서버 pod에 대한 포트 포워드를 8888로 진행한 후

connect로 접속하고 localhost:8080을 localhost:8888로 바꾸어 접속해 사용하고 있습니다.

pod에 대해 따로 포트 포워드를 진행하면 정상적으로 접속이 되는 것을 봐서

서버는 정상적으로 생성이 되었지만, 연결하는 설정 부분에 문제가 있는 것 같아 이를 해결하는 중에 있습니다.

그래도 접속할 때만 포트 포워드만 진행하면 매번 필요한 패키지를 설치하던 과정이 사라져 훨씬 번거로움이 적어진 것 같아서 나름 성공적이라고 생각합니다.

 

 

728x90
반응형

댓글