GitHub
MLOps 및 Kubeflow 관련 코드 내용은 GitHub에서 관리하고 있습니다.
https://github.com/Seokii/Study-MLOps
주피터 노트북 서버
https://seokii.tistory.com/205
기본적인 주피터 노트북 서버 만들기에 대한 내용은 전에 다루었습니다.
이번에는 도커를 사용해 커스텀 이미지로 주피터 노트북 서버를 만들어봤습니다.
쿠브플로우에서 기존 제공하던 이미지로 주피터 노트북 서버를 만들다보니,
필요한 패키지를 매번 설치해야되는 불편함이 있어서 커스텀 이미지로 만들고자 시도해봤습니다.
커스텀 이미지에 넣고자 하는 패키지들은 다음과 같습니다.
- 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에 대해 따로 포트 포워드를 진행하면 정상적으로 접속이 되는 것을 봐서
서버는 정상적으로 생성이 되었지만, 연결하는 설정 부분에 문제가 있는 것 같아 이를 해결하는 중에 있습니다.
그래도 접속할 때만 포트 포워드만 진행하면 매번 필요한 패키지를 설치하던 과정이 사라져 훨씬 번거로움이 적어진 것 같아서 나름 성공적이라고 생각합니다.
'MLOps' 카테고리의 다른 글
[MLOps] 쿠브플로우 파이프라인 - 입출력 경로 지정하기 (0) | 2023.01.19 |
---|---|
[MLOps] 쿠버네티스에 MLflow 설치하기 (1) | 2023.01.17 |
[MLOps] 쿠브플로우 파이프라인 - 실행(Run) (0) | 2023.01.17 |
[MLOps] 쿠브플로우 파이프라인 - yaml 파일 업로드 (0) | 2023.01.16 |
[MLOps] 쿠브플로우 파이프라인 - 코드 작성 (0) | 2023.01.16 |
댓글